我做了一个控件,但不知如何才能够接收到底层传给窗口的信息,并处理之?

解决方案 »

  1.   

    譬如它有一个函数aa(HWND hWnd);
    我调用该函数后,在某情况下就会该窗口就会收到硬件发来的信息,你明了吗?
      

  2.   

    是啊,我是调用该函数绑定了控件的父窗口,然后重载控件父窗口的windowpro函数来解决问题的,但想想这有多笨啊?明明我这控件就有自己的句柄,但为什么不能用呢?
      

  3.   

    Greaitm(夜草) :仅作参考!控件的句柄和窗口的句柄好像还是有区别的!控件(ACTIVEX)我想是通过CoCreateInstance之类的建立的,返回值应该是一个HRESULT,在使用者这边好像变成了DWORD。这与窗口的句柄之间似乎要变换一下,可能要用SmartPtr之类的。
      

  4.   

    不是,控件有个成员变量 hWnd,是从CWnd里继承下来的
      

  5.   

    LRESULT CALLBACK AFX_EXPORT
    MyCallWndProc(HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CWnd * pWnd;
    pWnd=CWnd::FromHandlePermanent(hWnd);
    if (pWnd==NULL)
    {
    pWnd = new CMyCon();
    pWnd->Attach(hWnd);
    }
    ASSERT(pWnd->m_hWnd==hWnd);
    ASSERT(pWnd==CWnd::FromHandlePermanent(hWnd));
    LRESULT lResult=::AfxCallWndProc(pWnd,hWnd,Message,wParam,lParam);
    return lResult;
    }BOOL CMyCon::RegisterComponent(HINSTANCE hInstance)
    {
    WNDCLASS wc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hCursor = ::LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground = (HBRUSH)::GetStockObject(LTGRAY_BRUSH);
    wc.hIcon = 0;
    wc.hInstance = hInstance;
    wc.lpfnWndProc = MyCallWndProc;
    wc.lpszClassName ="WSWCOMPONENT";
    wc.lpszMenuName = NULL;
    wc.style = CS_GLOBALCLASS;
    return (::RegisterClass(&wc)!=0);
    }
      

  6.   

    OnCommand
    根据ID号判断即可