把介面上靜態文字控制元件的尺寸根據文字的內容自動調整大小
函式功能:該函式計算指定的正文字串的高度和寬度。
函式原型: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);