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);