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);
}
为什么当输入回车之后并不是换行输出 而是在原行 从头输出  就好像输入回车之后 字符串清空了
一样

解决方案 »

  1.   

    WM_CHAR(OnChar)消息用来处理字符键,而WM_KEYDOWN(OnKeyDown)、WM_KEYUP(OnKeyUp)、WM_SYSKEYDOWN(OnSysKeyDown)、WM_SYSKEYUP(OnSysKeyUp)等消息用来处理非字符键,如Enter(回车键)、F1-F12、Shift、Alt等。
      

  2.   

    textout不支持\r\n进行换行
    只能用drawtext()
      

  3.   

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

  4.   

    你的CR是怎么得到的?CR的高度太小了你就只能看到一两行了
      

  5.   

    cr的高度绝对不会小啊 CRect cr;
    GetClientRect(cr);
    获取客户区啊
      

  6.   


    UINT unAlign = DT_CENTER|DT_WORDBREAK|DT_EDITCONTROL;
    DrawText(m_hGDIMemDC, objDraw.strText, len, &rect, unAlign); 
      

  7.   

    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;