您的位置:首页 > 编程语言 > PHP开发

为何我用GetTextExtentPoint32这个API总是得不到正确的文本长度?

2017-11-08 17:24 423 查看
原文转载自:http://bbs.csdn.net/topics/80515448

呵呵,偶问题解决了,不能独享,贴出来,楼主看一下,有一个步骤是必须的,就是取得主窗口的FONT,然后设置DC的FONT,然后再计算,这样才正确,参考下面的代码

CSize s;

CFont *font = this->GetFont();

CFont *def_font = NULL;

CClientDC dc(((CStatic *)GetDlgItem(IDC_STATIC_MSG)));

def_font = dc.SelectObject(font);

::GetTextExtentPoint32((HDC)dc.m_hDC, lpszTemp, (int)strlen(lpszTemp), &s))

dc.SelectObject(def_font);
回复于: 2006-05-12 10:53:36#5 得分:30

对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理




Tian_Dao_Akane
Tian_Dao_Akane 


我赶紧试试先^_^
回复于: 2006-05-12 13:36:53#6 得分:0

对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理




Tian_Dao_Akane
Tian_Dao_Akane 


测试通过了,太感谢楼上的两位朋友了!下面是我的完整代码:

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

结贴了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐