为何我用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); 结贴了! |
相关文章推荐
- 利用Google进行无长度限制的文本翻译(无需API,无需Money)
- 为何企业总是在为营销买单 却得不到效果?
- 利用Google进行无长度限制的文本翻译(无需API,无需Money)
- 利用Google API进行无长度限制的文本翻译
- 写正确函数需要注意的地方:在字符串中找出连续最长的数字串,并把这个串的长度返回
- c中自定义函数通过sizeof来输出数组的长度为何不正确?【原创】
- glGetString(GL_VERSION)、 glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max)为何老是得不到正确的值
- 建立一个更高级别的查询 API:正确使用Django ORM 的方式
- 在字符串中找出连续最长的数字串,并把这个串的长度返回
- Android为何总是无法正常访问Tomcat服务器
- [VS2005]解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”
- API之文本和字体函数
- SharePoint 列表视图修改多行文本字段显示长度
- 请帮忙看看这个程序的运行结果为何这样怪
- Android UI 之居中绘制文本内容的正确方法——实现自定义一个TextView
- 在写入数据库的时候,某字段varchar(20),报“字符长度超长”的错误,但是去数据库中用length()查,发现最大的长度都不超20,为什么会报这个错呢?
- 编辑框 改变背景、字体、文本颜色、长度限制、英文 汉字判断
- 探索C++的秘密之详解extern "C",这就是为什么很多.lib被我们正确调用确总是无法解析的。
- 不使用for完成一段有空格间隔的字符串,分辨长度大于等于4的单词(求各位高人修改,我表示我是菜鸟,这个算法实在太长了)
- SQLServer2008 突然用不了搜索文本了,就是Ctrl+F这个功能