drawtext换行的问题!

golgo 2004-10-14 05:17:39
DrawText(lpstr, CRect(rect.left, j--, rect.right, rect.bottom), DT_WORDBREAK)

lpstr中是汉字,就能正常换行,如果是英文字符,就不能正常换行了!为什么呀?
...全文
328 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
golgo 2004-10-15
  • 打赏
  • 举报
回复
多谢了,能分行了!参考了一个大哥的代码,可能还有点问题,正在改,多谢各位了
long width = rcWidth;
TCHAR temp[4076] = L"";
wcscpy(temp,lpszString);
TCHAR* cur;
cur = temp;
TRACE(L"cur_text = %s\n", cur);
int j;
CSize size;
while(*cur != '\0')
{
j=1;
do
{
if(cur[j-1] == '\r' || cur[j-1] == '\0') break;
size = pDC->GetTextExtent(cur,j);
if(size.cx >= abs(width))
{
textHeight +=size.cy;//返回文本显示的高度
break;
}
j++;
}while(TRUE);
if(j == 1) break;
j--;
if(cur[j] == '\0') break;
if(cur[j] != '\r' && !(cur[j] & 0x80))
{
memmove(&cur[j+1],&cur[j],j+1);
cur[j] = '\n';

}
cur += j+1;
TRACE(L"cur_text = %s\n", temp);
}
return temp;
memory_xj 2004-10-14
  • 打赏
  • 举报
回复
用DrawText(...,DT_WORDBREAK)总是不如意。还是GetTextExtentPoint32();按CRect的宽度将字符串分割成一个个字符串,再一行行TextOut()写出来比较好。
golgo 2004-10-14
  • 打赏
  • 举报
回复
怎样得到该换行的地方呢??有没有详细点的代码啊?
lixiaosan 2004-10-14
  • 打赏
  • 举报
回复
CPaintDC dc(this);

CString str = "1231\r\n23231";
dc.SetBkMode(TRANSPARENT);

dc.DrawText(str, CRect(50,50,20,20), DT_NOCLIP);
token_lys 2004-10-14
  • 打赏
  • 举报
回复
Drawtext换行不能把一个单词切分成两部分,保证每个单词都完整在一行上。
快乐鹦鹉 2004-10-14
  • 打赏
  • 举报
回复
英文中间有空格的话,能正常换行吧?

15,979

社区成员

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

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