如何知道某字符串的象素宽度和高度?

在MFC下运行此函数,
AAAA,BBBB情况下与抓图比较,差异比较大,CCCC最接近,可能绘图最好


void CCoolTabCtrl::GetTextSize(LPCTSTR lpszText, int nCount, CSize &size)
{
 size.cx = 0;
 size.cy = 0;
 /*AAAA*********************************************
 /*CString ss("Customized Split Size (0.00 MB)");
 CClientDC dc(this);
 int nSave = dc.SaveDC();
 CFont font;  
 font.CreateStockObject(SYSTEM_FONT);  
 LOGFONT lf;  
 memset(&lf,   0,   sizeof(LOGFONT));  
 font.GetLogFont(&lf);  
 lf.lfWidth = 6;
 lf.lfHeight = 8;
 strcpy(lf.lfFaceName, "宋体");
 dc.SelectObject(font);
 size = dc.GetTextExtent( lpszText, nCount );

 CRect rc(0,0,0,0);
 dc.DrawText(ss, &rc, DT_CALCRECT);
 CSize s = dc.GetTextExtent("Customized Split Size (0.00 MB)");
 CSize c;
 GetTextExtentPoint32(dc,"Customized Split Size (0.00 MB)",31, &c);
 dc.RestoreDC(nSave);
//宽度:0xd1
 */

 /*BBBB*********************************************
 HDC   hdc=::GetDC(*this);  
 TEXTMETRIC tm;  

 LPCTSTR szString = "Customized Split Size (0.00 MB)";
 ::GetTextMetrics(hdc,&tm);  
 ::GetTextExtentPoint32(hdc, szString, lstrlen(szString),&size);  
 int   cx=size.cx;//宽度  
 int   cy=tm.tmHeight+tm.tmExternalLeading;//高度 
宽度:0xd1
 */
 
 /*CCCC*********************************************/
 CClientDC dc(this);
 NONCLIENTMETRICS ncm;
 ncm.cbSize = sizeof(NONCLIENTMETRICS);
 SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0);

 CRect rc(0,0,0,0);
 CFont font;
 font.CreateFontIndirect(&ncm.lfMessageFont);
 // 将字体选进DC
 CFont* pOldFont = dc.SelectObject(&font);
 // 计算文本大小
 CString str("Customized Split Size (0.00 MB)");
 dc.DrawText(str, rc, DT_CALCRECT);
 // 回复旧字体-这是必须的
 dc.SelectObject(pOldFont);
// 宽度:0x96 与抓图下的象素值最接近
}


文章出处:http://www.diybl.com/course/3_program/c++/cppjs/2008717/133429.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值