1. 程式人生 > >把介面上靜態文字控制元件的尺寸根據文字的內容自動調整大小

把介面上靜態文字控制元件的尺寸根據文字的內容自動調整大小

函式功能:該函式計算指定的正文字串的高度和寬度。
  
  函式原型:BOOL GetTextExtentPoint32(HDC hdc, LPCTSTR lpString, int cbString, LPSIZE lpSize);
  
  引數:
hdc:裝置環境控制代碼。
  
  lpString:指向正文字串的指標。此字串不必以/0結束,因為cbString指定了字串的長度。
  
  cbString:指向字串中的字元數。
  
  lpSize:指向SIZE結構的指標,該結構中字串的尺寸將被返回。
  
  返回值:如果函式呼叫成功,返回值是非零值,如果函式呼叫失敗,返回值是0。
  
  Windows NT:若想獲得更多的錯誤資訊,請呼叫GetLastError函式。
  
  備註:GetTextExtentPoint32用當前所選字型來計算字串尺寸,按邏輯單位計算的高和寬都沒有考慮裁剪取的情況。
  
  由於有的裝置緊縮字元,因此一個字串裡字元的範圍之和或許不等於字串的範圍。
  
  計算的字元寬度考慮了由SetTextCharacterextra裝置的字元間隔。


  GetTextExtentPoint32(hdc,szText,lstrlen(szText),&size);

   
       其中size.cx   ,size.cy   即所求.字串的長度和高度(是畫素),
  Windows CE環境下GetTextExtentPoint32與GetTextExtentPoint相同。

有一個步驟是必須的,就是取得主視窗的FONT,然後設定DC的FONT,然後再計算,這樣才正確,參考下面的程式碼   
CStatic   *temp=(CStatic   *)GetDlgItem(IDC_STATIC1);   
  CRect   rect;   
  CSize   size(0,0);   
  temp->GetWindowRect(rect);   
  ScreenToClient(&rect);   
  CClientDC   dc(temp);   
  CFont   *pOldFont=dc.SelectObject(this->GetFont());   
  CString   str;   
  temp->GetWindowText(str);   
  if(::GetTextExtentPoint32((HDC)dc,str,str.GetLength(),&size))   
  {   
  rect.right=rect.left+size.cx;   
  rect.bottom=rect.top+size.cy;   
  }   
  else   
  temp->SetWindowText("GetTextExtentPoint32   fail   to   get   the   size   of   text!");   
  temp->MoveWindow(rect);   
  dc.SelectObject(pOldFont);