首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么正确输出回车

2012-03-06 
如何正确输出回车?C/C++ codevoid CMy123View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {// TODO:

如何正确输出回车?

C/C++ code
void CMy123View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {    // TODO: Add your message handler code here and/or call default    CClientDC dc(this);    if(nChar == 0x0d)        cs_txt = '\n';    else        cs_txt += nChar;    dc.TextOut(0,0,cs_txt);    CView::OnChar(nChar, nRepCnt, nFlags);}

为什么当输入回车之后并不是换行输出 而是在原行 从头输出 就好像输入回车之后 字符串清空了
一样

[解决办法]
WM_CHAR(OnChar)消息用来处理字符键,而WM_KEYDOWN(OnKeyDown)、WM_KEYUP(OnKeyUp)、WM_SYSKEYDOWN(OnSysKeyDown)、WM_SYSKEYUP(OnSysKeyUp)等消息用来处理非字符键,如Enter(回车键)、F1-F12、Shift、Alt等。
[解决办法]
探讨
drawtext()应该用那个模式啊

dc.DrawText(cs_txt,cs_txt.GetLength(),cr,DT_LEFT);
我用的上面这个模式 只能输出两行 如果按第3个回车 那么还是从第二行输出
也就是说 无论多少个回车 最终只能在第2行输出了 究竟该用那个模式?

[解决办法]
探讨
引用:
textout不支持\r\n进行换行
只能用drawtext()


++

[解决办法]
CSize sizeWidth; //字串长度超过显示区域长度则换行
GetTextExtentPoint(m_hGDIMemDC, objDraw.strText, len, &sizeWidth);
if (sizeWidth.cx > objDraw.CurPicText.rectText.Width())
unAlign = DT_LEFT|DT_WORDBREAK|DT_EDITCONTROL;

if(objDraw.strText.Find(L"\n") != -1) //字串中有空格则换行
unAlign = DT_CENTER|DT_WORDBREAK|DT_EDITCONTROL;

热点排行