组件里有一个CEdit控件,一个CRichEdit控件,要做成一个聊天窗口类似的功能,在下面的CEdit控件里输入内容回车后,显示在上面的CRichEdit里。现在在获取CEdit控件的回车消息时遇到了困难。
我添加了一个空类CMyEdit,继承了CEdit,
#include <atlapp.h>
#include <atlctrls.h>class CMyEdit : public CEdit
{
};
想在这个类重载PreTranlateMessage,但是发现组件里不会响应这个函数,有什么其它方法能获取到回车消息么?后来想到用OnChar,但是通过WTL Helper添加的消息响应函数是这个样子的
LRESULT CMyEdit::OnChar(TCHAR ch, UINT cRepeat, UINT flags)
{
return 0;
}
如何通过ch来判断是回车键?返回值又如何定义的?还有一个问题,我用CMyEdit定义了一个变量m_wndEdit,想把这个变量与控件相关联起来,但是无论是用DDX的方式,还是GetDlgItem、SubClassWindow的方式,都会报错,是不是CMyEdit类写的不完整导致的?

解决方案 »

  1.   

    补充一下,网上看到了一个方法可以在组件内响应PreTranslateMessage的方法,但是要在组件外部也做处理,不想通过这种方式,尽量在组件内完成最好。
      

  2.   

    你试试不用控件。在create的时候调用CMyEdit::Create()创建试试没有用过wtl2.
    OnChar(TCHAR ch, UINT cRepeat, UINT flags)
    mfc下是比较
    ch == VK_RETURN 
    flags是表示是否还同时按下了shift,ctrl等键的。
      

  3.   

    如果可以触发OnChar,那使用ch == VK_RETURN 应该可以。 
      

  4.   

    VK_RETURN不是整型的么,可以直接与TCHAR做比较么?试了一下,好像OnChar也进不去。另外OnChar的返回值有什么作用?返回0,1有什么区别?
      

  5.   

    wtl和mfc的不一样...你看看wtl文档OnChar都进不去,那说明你的消息映射都还没有做好
      

  6.   

    呵呵,升星了。
    wtl没有文档~,这就是用wtl最痛苦的地方。
      

  7.   


    ^_^ 那你去 vckbase wtl 或者 codeproject wtl找找吧。没用过wtl,帮不了你。