主窗口发出自定义消息成功后,子窗口并没有收到信息,这是为什么呢?情况是这样的,我把自定义消息放在了winuser.h中,在主窗口函数中void CTabControlDlg::OnBnClickedButtonChinese()
{
 UpdateUI(m_hWnd);
}
void CTabControlDlg::UpdateUI(HWND hParentWnd)
 {
    //查找第一个子窗口
    HWND hWnd=::GetWindow(hParentWnd,GW_CHILD);
    while(hWnd)
    {
        //给子窗口发送自定义消息
        ::PostMessage(hWnd,MY_UPDATEUI,NULL,NULL);
        //递归
        UpdateUI(hWnd);
        //查找下一个子窗口
        hWnd=::GetWindow(hWnd,GW_HWNDNEXT);
    }
 }
在子窗口中如下
//CConfigDlg中的消息映射
 BEGIN_MESSAGE_MAP(CConfigDlg, CDialog)
    ON_MESSAGE(MY_UPDATEUI, OnUpdateUI)
END_MESSAGE_MAP()
LRESULT CConfigDlg::OnUpdateUI(WPARAM wParam,LPARAM lParam) 

    AfxMessage(_T("CConfigDlg::OnUpdateUI"));
    return   0; 

这个子窗口是通过在主窗口上右击出来一个选项,选择第一个以后出来的界面,为什么他没哟收到主界面的消息呢?希望有牛人指点啊界面mfc

解决方案 »

  1.   

    我把自定义消息放在了winuser.h中
    别在库文件里修改发送消息没响应多半是没找对窗口,你确定那个窗口是个子窗口而不是popup窗口?
      

  2.   

    1. 你要确定是否跨进程了, 跨进程的自定义消息, 需要注册.
    2. 如要未跨进行, 你确定你的了窗口句柄正确了吗,
     最好是在
     //给子窗口发送自定义消息
            ::PostMessage(hWnd,MY_UPDATEUI,NULL,NULL);
    之前, 看是是否是你想要的子窗口.还有, 提醒一句, winuser.h是系统文件, 最好不要随便去修改它. 你自定义的消息, 放到自己 的工程中的文件中, 不应该去修改系统文件.
      

  3.   


    那如果是popup该怎么让他收到消息呢?
      

  4.   

    如果是同一个进程可以直接保存这个popup窗口的句柄
      

  5.   


    能不能写段代码让我看看,就比如我给出的那段代码中,CConfigDlg是需要弹出来的窗口,他怎么收到消息呢,在一个线程内和不在一个线程内,您看能不能都给举个例子啊
      

  6.   

    发消息/响应消息对于任何窗口都是一样的,我在1楼说的意思是如果是个popup窗口,GetWindow(hParentWnd,GW_CHILD);这样枚举是枚举不到的。如果是在一个进程内就是说这个popup是你自己创建的,你自己知道这个窗口句柄,那在创建的时候就保存起来。代码就免了吧没什么好写的
      

  7.   


    DoModal出来的窗口, 你是没有机会去保存其窗口句柄的. 因为其句柄只有在DoModal的时候才创建出来的.
    如果窗口也是你自定义的, 那么你可以以窗口名来搜索窗口, 然后向其发送消息.FindWindow函数 ,具体说明看MSDN.
      

  8.   


    DoModal出来的窗口, 你是没有机会去保存其窗口句柄的. 因为其句柄只有在DoModal的时候才创建出来的.
    如果窗口也是你自定义的, 那么你可以以窗口名来搜索窗口, 然后向其发送消息.FindWindow函数 ,具体说明看MSDN.
    DoModal出来的窗口外部不能直接保存,可以在这个窗口本身去保存,比如在窗口的OninitDialog里把自身的窗口句柄发消息给主对话框,甚至用个全局变量都可以。FindWindow在同一进程内还是不太好,也没这个必要
      

  9.   


    DoModal出来的窗口, 你是没有机会去保存其窗口句柄的. 因为其句柄只有在DoModal的时候才创建出来的.
    如果窗口也是你自定义的, 那么你可以以窗口名来搜索窗口, 然后向其发送消息.FindWindow函数 ,具体说明看MSDN.
    DoModal出来的窗口外部不能直接保存,可以在这个窗口本身去保存,比如在窗口的OninitDialog里把自身的窗口句柄发消息给主对话框,甚至用个全局变量都可以。FindWindow在同一进程内还是不太好,也没这个必要我用了各种函数啊,可是主函数上只要一点击控件,程序就中断啊,就是在popup类型的窗口处保存自己的句柄,这是为什么呢