主窗口发出自定义消息成功后,子窗口并没有收到信息,这是为什么呢?情况是这样的,我把自定义消息放在了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
{
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
别在库文件里修改发送消息没响应多半是没找对窗口,你确定那个窗口是个子窗口而不是popup窗口?
2. 如要未跨进行, 你确定你的了窗口句柄正确了吗,
最好是在
//给子窗口发送自定义消息
::PostMessage(hWnd,MY_UPDATEUI,NULL,NULL);
之前, 看是是否是你想要的子窗口.还有, 提醒一句, winuser.h是系统文件, 最好不要随便去修改它. 你自定义的消息, 放到自己 的工程中的文件中, 不应该去修改系统文件.
那如果是popup该怎么让他收到消息呢?
能不能写段代码让我看看,就比如我给出的那段代码中,CConfigDlg是需要弹出来的窗口,他怎么收到消息呢,在一个线程内和不在一个线程内,您看能不能都给举个例子啊
DoModal出来的窗口, 你是没有机会去保存其窗口句柄的. 因为其句柄只有在DoModal的时候才创建出来的.
如果窗口也是你自定义的, 那么你可以以窗口名来搜索窗口, 然后向其发送消息.FindWindow函数 ,具体说明看MSDN.
DoModal出来的窗口, 你是没有机会去保存其窗口句柄的. 因为其句柄只有在DoModal的时候才创建出来的.
如果窗口也是你自定义的, 那么你可以以窗口名来搜索窗口, 然后向其发送消息.FindWindow函数 ,具体说明看MSDN.
DoModal出来的窗口外部不能直接保存,可以在这个窗口本身去保存,比如在窗口的OninitDialog里把自身的窗口句柄发消息给主对话框,甚至用个全局变量都可以。FindWindow在同一进程内还是不太好,也没这个必要
DoModal出来的窗口, 你是没有机会去保存其窗口句柄的. 因为其句柄只有在DoModal的时候才创建出来的.
如果窗口也是你自定义的, 那么你可以以窗口名来搜索窗口, 然后向其发送消息.FindWindow函数 ,具体说明看MSDN.
DoModal出来的窗口外部不能直接保存,可以在这个窗口本身去保存,比如在窗口的OninitDialog里把自身的窗口句柄发消息给主对话框,甚至用个全局变量都可以。FindWindow在同一进程内还是不太好,也没这个必要我用了各种函数啊,可是主函数上只要一点击控件,程序就中断啊,就是在popup类型的窗口处保存自己的句柄,这是为什么呢