我刚学MFC,正在进行文本编程
我已经在View类的OnChar函数中有以下的代码实现主窗口的字符输入
CClientDC dc(this);
    CFont *pOldFont=dc.SelectObject(&m_font);
  TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
if( 0x0d == nChar) 
{   m_strArray.Add(m_strLine);
m_strLine.Empty();
m_ptOrigin.y += tm.tmHeight;
}
else if( 0x08 == nChar)
{
COLORREF clr = dc.SetTextColor(dc.GetBkColor());
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
m_strLine = m_strLine.Left(m_strLine.GetLength() - 1);
dc.SetTextColor(clr);
}
else
{
m_strLine += char(nChar);

}

CSize sz = dc.GetTextExtent(m_strLine);
CPoint pt;
pt.x = m_ptOrigin.x + sz.cx;
pt.y = m_ptOrigin.y;
SetCaretPos(pt);
dc.SetTextColor(m_clr);
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
dc.SelectObject(pOldFont);
但是当窗口的大小变化之后,输入的字符都没有了,那我在OnDraw函数中应该添加怎样的代码?  

解决方案 »

  1.   

    当窗口的大小变话是就会刷新窗口的
    把上面的代码封装成一个函数,函数的参数是OnChar里面的nChar,然后在OnDraw里面调用这个函数就可以了
      

  2.   

    每次改变窗口大小是将变化的参数传入你自己写的函数就可以了(在OnDraw中操作)
      

  3.   

    在你的Viewer类中定义一个是字符串数组用来保存文本,OnChar就字符串到这个数组中,真正在屏幕上输出文本功能写在OnDraw函数里,OnDraw函数通过循环输出字符串数组的内容
    CYourViewer::OnDraw(CDC* pDC)
    {
      int nSize = m_strArray.GetSize();
       for(int i=0;i<nSize;i++)
       {
          string curStr = m_strArray.GetAt(i);
          //逐条字符串输出
       }
    }
      

  4.   

    建议你将产生的字符都存在一个字符数组中然后再OnDraw()里一并输出