这样一个情景:
我的对话框里面定义一个 CWnd 之类的变量
在一个函数里面,
调用 create()函数,比如:
m_childWnd.Create(_T("STATIC"), "Hi", WS_CHILD | WS_VISIBLE,
CRect(0, 0, 20, 20), this, 1234);然后把这个只窗口显示在对话框上。我的问题是:
怎么给这个子窗口分配事件呢。比如:单击,鼠标之类的求高手指点啊

解决方案 »

  1.   

    1234就是这个控件的ID
    命令消息通过这个ID和这个控件关联起来当然控件内部也可以处理这些消息
      

  2.   

    SetWindowLong,重写这个窗口的消息回调函数,指定处理类型为DWL_DLGPROC,不行就在父窗口的pretranslatemessage捕获消息,用pMsg->hwnd来判断是不是你的指定窗口
      

  3.   

    你创建了个STATIC控件,像单击、鼠标之类的还是交给父窗口来处理吧!比如,当鼠标在区域(0, 0, 20, 20)时,父窗口响应鼠标消息!!
      

  4.   

    可以使用 WM_NOTIFY 消息来处理子窗口的消息,消息映射用 ON_NOTIFY( wNotifyCode, id, memberFxn )。其中id既是子窗口的id。
      

  5.   

    我的问题是:
    怎么给这个子窗口分配事件呢。比如:单击,鼠标之类的
    ==============================================
    子窗口自己获得消息的,不用理它。楼主的问题貌似是:当这个子窗口被点击时,要通知父窗口吧?这个问题基本是通过WM_NOTIFY通知父窗口的。
      

  6.   

    你看我这样做是否正确
    1. 声明函数 afx_msg void OnTest();
    2. 这样祖册 ON_BN_CLICKED(1234, OnTest)
    3. 实现
    void CTest0702Dlg::OnTest()
    {
    MessageBox("this is on test click");
    }好像不管用啊
      

  7.   

    ON_NOTIFY(BN_CLICKED,1234, OnTest)
      

  8.   

    还是不行,不知道哪里出现问题了检查了一下,以为static不支持点击,我又把它该为按钮
    m_childWnd.Create(_T("BUTTON"), "Hi", WS_CHILD | WS_VISIBLE,
    CRect(0, 0, 50, 50), this, 1234);
    也没效果.