把界面上静态文本控件的尺寸根据文本的内容自动调整大小
2011-06-16 00:43
489 查看
把界面上静态文本控件的尺寸根据文本的内容自动调整大小
http://blog.csdn.net/hnhyhongmingjiang/archive/2008/08/27/2838738.aspx函数功能:该函数计算指定的正文字符串的高度和宽度。
函数原型: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);
相关文章推荐
- 把界面上静态文本控件的尺寸根据文本的内容自动调整大小(转)
- 笔记:把界面上静态文本控件的尺寸根据文本的内容自动调整大小
- 把界面上静态文本控件的尺寸根据文本的内容自动调整大小(转)
- 转:把界面上静态文本控件的尺寸根据文本的内容自动调整大小
- AutoFitTextView-根据文本内容自动调整字体大小的TextView
- 根据内容自动调整弹出窗口大小的JS解决方案
- showModalDialog根据内容自动调整窗口大小
- window.onload and showModalDialog根据内容自动调整窗口大小
- Android 自定义TextView实现文本内容自动调整字体大小以适应TextView的大小
- VC对话框界面如何调整静态文本字体和大小?
- 根据内容自动调整弹出窗口大小的JS解决方案
- 根据内容自动调整弹出窗口大小的JS解决方案
- 根据内容自动调整弹出窗口大小的JS解决方案
- 根据控件大小自动调整字体大小方法(C#)
- Android自定义控件之自定义EditText,令控件中的字根据控件高度自动调整大小-FenGKun
- Winform控件根据文字内容自动调整最合适大小
- VC对话框界面如何调整静态文本字体和大小?(转载)
- showModalDialog根据内容自动调整窗口大小
- QTableView根据内容自动调整大小(resizeColumnToContents解决不了的)
- Android 自定义TextView实现文本内容自动调整字体大小