我做的一个复合控件,当我把复合控件放在测试容器中的时候,发现不能响应键盘消息(比如WM_KEYDOWN),后来我用spy++来抓,发现也比们抓到键盘的消息,我想问一下,我想对复合控件响应键盘消息,我怎么来做????
或者说对其上面的static控件响应键盘消息???我如何来做???

解决方案 »

  1.   

    键盘消息是发给焦点控件的,你测试的时候焦点在哪个控件上?static控件默认是不会获得焦点的。
      

  2.   

    正常来说STATIC 控件没有焦点,是收不到WM_KEYDOWN的 所以WM_KEYDOWN 是父窗口接收的
      

  3.   

    如果窗口是活动的,焦点肯定在窗口或其子窗口或控件上,你可以用GetFocus来获取焦点窗口句柄。
      

  4.   

    在容器中测试的时候,从输出窗口里面看到这样的提示!
    TestCon: ColorFont Class: Control got focus
    TestCon: ColorFont Class: XOleControlSite::Release().
    TestCon: ColorFont Class: Control lost focus
    TestCon: ColorFont Class: XOleControlSite::Release().
    TestCon: ColorFont Class: XServiceProvider::Release()
    TestCon: ColorFont Class: XServiceProvider::Release()
    。。
      

  5.   

    我在OnPaint里面加了如下代码:
    HWND hwndFocus = NULL;
    hwndFocus = GetFocus();
    ATLTRACE(_T("hwndFocus:%d | Dialoghwnd:%d\n"),(UINT)hwndFocus,(UINT)m_hWnd);
    获得的结果如下:
    hwndFocus:0 | Dialoghwnd:2559248
    。。
    怎么回事????
      

  6.   

    在容器中测试的时候,从输出窗口里面看到这样的提示! 
    TestCon: ColorFont Class: Control got focus 
    TestCon: ColorFont Class: XOleControlSite::Release(). 
    TestCon: ColorFont Class: Control lost focus 
    TestCon: ColorFont Class: XOleControlSite::Release(). 
    TestCon: ColorFont Class: XServiceProvider::Release() 
    TestCon: ColorFont Class: XServiceProvider::Release() 
    。。
    这个里面是容器自己输出的!!!