如果计算一段文字需要多少大小的矩形正好能够容其输出

AlbortEinstein 2006-03-24 10:34:22
代码段如下:
CDC *pDC = GetWindowDC();
CString strTemp = "D:\\JIANGJIONG\\PROJECT\\20041228003322_CURTAINBOX\\CURTAINBOX\\DEBUG\\ASSIST.EXE";
CRect rcTemp;
rcTemp.SetRectEmpty();
rcTemp.right = 236;
pDC->DrawText(strTemp, rcTemp, DT_WORDBREAK);
ReleaseDC(pDC);

本意是想让这段文字在一个宽236象素的矩形多行输出,可为什么偏偏它会变成一行,把rcTemp.right 变成603,这到底是为什么。
还有,如果把文字换成
strTemp = "C:\\Documents and Settings\\ljtt\\「开始」菜单\\hello World.bmp";
确成输成两行
这到底是为什么?不是DrawText明明有DT_WORDBREAK参数了吗?
...全文
116 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Qiushen 2006-05-12
  • 打赏
  • 举报
回复
要先设置一下字体,代码参考如下:

CFont *font = this->GetFont();
CFont *def_font = NULL;
CSize s;
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);
lightnut 2006-03-24
  • 打赏
  • 举报
回复
call the function

CSize CDC::GetTextExtent( const CString& str ) const,


vcmute 2006-03-24
  • 打赏
  • 举报
回复
加上 DT_EDITCONTROL|
DT_EDITCONTROL|DT_WORDBREAK
Snow_Ice11111 2006-03-24
  • 打赏
  • 举报
回复
你显示的字符串内容中要有空格,一行超出显示时才会在空格处换行,你给出的第一个字符串中无空格,所以不换行,而第二个字符串有,所以会自动换行。另外,你的代码中的rcTemp高度为0显示出东西吗?!
leechiyang 2006-03-24
  • 打赏
  • 举报
回复
好像不是很准确.

把文本输入到内存中,然后检测文字的实际宽度.

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧