把介面上靜態文字控制元件的尺寸根據文字的內容自動調整大小(轉)
函式功能:該函式計算指定的正文字串的高度和寬度。
函式原型:BOOL GetTextExtentPoint32(HDC hdc, LPCTSTR lpString, int cbString, LPSIZE lpSize);
參 數:hdc:裝置環境控制代碼。
lpString:指向正文字串的指標。此字串不必以\0結束,因為cbString指定了字串的長度。
cbString:指向字串中的字元數。
lpSize:指向SIZE結構的指標,該結構中字串的尺寸將被返回。
返 回 值:如果函式呼叫成功,返回值是非零值,如果函式呼叫失敗,返回值是0。
Windows NT:若想獲得更多的錯誤資訊,請呼叫GetLastError函式。
備 注
由於有的裝置緊縮字元,因此一個字串裡字元的範圍之和或許不等於字串的範圍。
計算的字元寬度考慮了由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);