backspace之后再输入字符就会把前面应该删掉却没掉的字符覆盖
void CKeyboardDemoView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if (('Z'>=nChar&&nChar>='A')||('z'>=char(nChar))&&(nChar>='a'))
MyString += char(nChar);
else
{
switch (nChar)

                case 0x08: 
                    
                    // Process a backspace. 
                    MyString.Delete(MyString.GetLength()-1,1); 
                    break; 
 
                case 0x0A: 
                    
                    // Process a linefeed. 
                     
                    break; 
 
                case 0x1B: 
                    
                    // Process an escape. 
                    
                    break; 
 
                case 0x09: 
                    
                    // Process a tab. 
                     
                    break; 
 
                case 0x0D: 
                    
                    // Process a carriage return. 
                     
                    break; 
 
                default: 
                    
                    // Process displayable characters. 
                     
                    break; 
            } 
}

解决方案 »

  1.   

    CDC *pDC = GetDC();
    pDC->TextOutW(0,0,MyString);
    CKeyboardDemoDoc *pDoc = GetDocument();
    pDoc->AddWord(char(nChar));
    pDoc->SetModifiedFlag();
    CView::OnChar(nChar, nRepCnt, nFlags);
    }
    这段刚才忘写了谢谢啦
      

  2.   

    没刷新显示当然了。
    UpdateData(FALSE);
    一下?
    看意思应该是这样。
      

  3.   

    我感觉也是没刷新的事, 因为把窗口最小化然后回来就好了
    可是加上updatedata那句也没行啊...
    另外把switch那段放onkeydown也不行
      

  4.   

    搞定啦
    把UpdateData(FALSE)改成Invalidate()就好了:)