我想用mfc 写一个小程序,可以显示键盘的消息,就是在接受WM_KEYDOWN,WM_CHAR,WM_KEYUP,可以在视图中显示是哪一种键盘消息,和它的3个参数,
比如我按下一个k键,会显示WM_KEYDOWN 75 1 37
同理,释放也是如此;
我将所有的要显示的数据放入m_strLog中,然后在OnDram中调用pDC->TextOut(0,0,m_strLog);来显示,可以实现所需功能,但是他不会在一行满后到下一行计入;本人尝试用文本框或是编辑框控件来显示m_strLog中的数据,
我用对话框作为基础,在对话框中嵌入文本框或是编辑框,编辑框设置为只读,但是无法实现所需功能,
我在消息处理函数OnKeyDown()中嵌入AfxMessageBox(m_strLog);但是在调试的时候没有响应该消息,也就是我按键盘的按键的时候不处理该消息哪位可否提点下,或是实现该功能,提供下完整工程,谢谢啦

解决方案 »

  1.   

    想获取键盘按键两种方法:
    1.通过WM_CHAR消息获取字符
    2.用回调钩子
    均可
      

  2.   

    我是在当前窗口,没必要用钩子,我要获取的是三种键盘消息,可以在当前程序中的消息处理函数中对m_strLog记录,
      

  3.   

    static irow = 0;pDC->TextOut(20*irow++,0,m_strLog);
      

  4.   

    定义一个静态的irow啥意思,还是不行,不会换行
      

  5.   

    错了,应该
    static irow = 0; pDC->TextOut(0,20*irow++,m_strLog);
      

  6.   

    也可以定义一个成员变量m_iRow,在OnKeyDown()中增加这个变量的值,然后在OnDraw中根据m_iRow来显示数据
      

  7.   

    m_strLog中存放了所有的数据,而不是一次消息的数据,即是从程序运行到结束的所有键盘数据,而不是一次按键消息的数据
      

  8.   

    每次都消息数据我用了m_strTemp来存放,
    再用m_strLog+=m_strTemp来合并
      

  9.   

    CString strTemp;
    strTemp = "sdfasdf\n";
    CString strNext;
    strNext = "asdfadf\n";
    strTemp += strNext ;
    手边没vc没测试,你试试看
      

  10.   

    你想换行,在每次写入m_strLog后添加一个\n
      

  11.   

    我手边没有vc没法测试,不过我想换行用\n应该可以,如果不行的话用做个函数计算字符数最后用TextOut中第一个参数进行换行也可以
      

  12.   

    如果用一个list来存放每条消息,然后在OnDram里显示,这样可以实现,但是觉应该可以用更简单的方法,
    为什么不能用静态文本控件或是只读的文本编辑框用作显示是呢
      

  13.   

    list来存放所有的消息,结点是一个消息数据CString
      

  14.   

    我手边没有vc,这样吧,你把你的问题描述发到我的电子信箱,我周一晚上才能接收,周二我给你做一个程序发到你信箱,我们公司上不了网,周二晚上我给你发过来,周三你查收,我的emal: [email protected]
      

  15.   

    想要换行,可以用"\r\n",至于为什么多了个\r,我也不清楚,反正我试过单独\n是不能实现换行的
    例如:CString csStr = "abc\r\nefg";
    显示结果为:
    abc
    efg