前提:一个窗口,其中有两个按钮,编号为A,B,每个按钮都可以打开各自的模式对话框,编号DA,DB。
要求:
1.在按下A,打开DA以后,在DA中有一个按钮C,按下C时首先关闭DA,并自动打开DB。(一定要关闭DA)
2.在按下B,打开DB以后,在DB中有一个按钮D, 按下D时首先关闭DB,并自动打开DA.(类似上面)
要求:
1.在按下A,打开DA以后,在DA中有一个按钮C,按下C时首先关闭DA,并自动打开DB。(一定要关闭DA)
2.在按下B,打开DB以后,在DB中有一个按钮D, 按下D时首先关闭DB,并自动打开DA.(类似上面)
按下C时,先关闭DA,再PostMessage给主窗口通知它打开DB,
按下D时,先关闭DB,再PostMessage给主窗口通知它打开DA,
打开DB:DB dlg;
dlg.Domodal();
如果模式对话框都关闭了,那么PostMessage还会执行吗?
{
HWND hParent = ::GetParent(m_hWnd);//如果那个窗口是父窗口的话,或者你可以用别的途径传递进来
EndDialog(IDOK);
::PostMessage(hParent, UM_OPENDB, NULL, NULL);
}DB同样处理如果模式对话框都关闭了,那么PostMessage还会执行吗?
PostMessage关键看接受消息的窗口是否有效,发送者是没有关系的,即使不是窗口,也可以给任意窗口发消息
{
// TODO: Add your control notification handler code here
SendMessage(WM_CLOSE);
HWND hParent = ::GetParent(m_hWnd);//如果那个窗口是父窗口的话,或者你可以用别的途径传递进来
EndDialog(IDOK);
::PostMessage(hParent,IDC_BUTTON_MAIN_F4, NULL, NULL);
}
这是我实现的代码,但是并没有成功。
即便是下面这样也还是不能打开新的窗口,关闭窗口是正常的。
void CCDCDLG::OnButtonCdcF9()
{
// TODO: Add your control notification handler code here
HWND hParent = ::GetParent(m_hWnd);//如果那个窗口是父窗口的话,或者你可以用别的途径传递进来
EndDialog(IDOK);
::PostMessage(hParent,IDC_BUTTON_MAIN_F4, NULL, NULL);
SendMessage(WM_CLOSE);
}
改成
::PostMessage(hParent,WM_COMMAND, IDC_BUTTON_MAIN_F4, NULL);另外都EndDialog了就不用SendMessage(WM_CLOSE);了