如有这样一个类CAAA和一个对话框类CMyDlg,怎样在CAAA中发个消息给CMyDlg类?
MYApp.h:#define WM_MY_MESSAGE WM_USER+1
AAA.cpp:void CAAA::OnAAAmsgToDlg()
{
????
????//向对话框发送消息
????}
MyDlg.h:
afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam);MyDlg.cpp: ON_MESSAGE(WM_MY_MESSAGE,OnMyMessage)//映射消息
....
....
//消息处理函数
afx_msg LRESULT CMyDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
CString ch;
ch.Format("Message Param is%d,%d",wParam,lParam);
Sleep(2000);
AfxMessageBox(ch);
return 0;
}
MYApp.h:#define WM_MY_MESSAGE WM_USER+1
AAA.cpp:void CAAA::OnAAAmsgToDlg()
{
????
????//向对话框发送消息
????}
MyDlg.h:
afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam);MyDlg.cpp: ON_MESSAGE(WM_MY_MESSAGE,OnMyMessage)//映射消息
....
....
//消息处理函数
afx_msg LRESULT CMyDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
CString ch;
ch.Format("Message Param is%d,%d",wParam,lParam);
Sleep(2000);
AfxMessageBox(ch);
return 0;
}
pMyDlg->SendMessage(WM_MY_MESSAGE,wparam,lparam);
AAA.cpp:void CAAA::OnAAAmsgToDlg()
{
CMyDlg *pDlg=new CMyDlg;
pDlg->PostMessage(WM_MY_MESSAGE,0,0);//向对话框发送消息...
}
编译通过运行出错}
信息产业部电子第三十四所 黄基前 --------------------------------------------------------------------------------
---- 对于VC++初学者,可能会遇到这样一个问题:一个基于Dialog的MFC AppWizard应用程序,再Insert一个对话框,如何同时显示这两个对话框呢? ---- 其实这个问题很简单,想要在屏幕上同时显示两个对话框,并且这两个对话框都可以被激活,则至少第二个对话框应该为非模态对话框。启动非模态对话框的方法与启动一个普通窗口的步骤是一样的,即先调用窗口类的Create()函数创建一个窗口对象,再用ShowWindow()使之显示出来即可(值得注意的是:第二个对话框的对象不能为局部变量,否则在退出OnInitDialog时,该对象会被自动关闭,从而导致第二窗口也会关闭)。例如,下列的代码演示了如何在主对话框的OnInitDialog()中启动另一个非模态对话框。 CDialog2 Dlg2; //注意Dlg2不能为OnInitDialog的局部变量。
BOOL CDialog1::OnInitDialog()
{
CDialog::OnInitDialog();
Dlg2.Create(IDD_DIALOG2,this );
Dlg2.ShowWindow(SW_SHOW);
}---- 编译并运行,怎么样,结果是不是OK了?
所以就应该是
CMyDlg *pDlg=new CMyDlg;
pDlg->Create(...);
::SendMessage( pDlg->GetSafeHwnd(),...);
void CAAA::OnAAAmsgToDlg()
{
CMyDlg *pDlg=new CMyDlg;
pDlg->Create(IDD_MY_DIALOG, this);
pDlg->PostMessage(WM_MY_MESSAGE,0,0);//向对话框发送消息...
}
CPropertySheet ps;
CMyDlg dlg;
ps.AddPage(&dlg);
if(Create(CMyDlg::IDD, pParent))
{
ShowWindow(SW_SHOW);
}
2。把对话框的指针定义为全局变量CMyDlg *g_pDlg;
3。在使对话框弹出的函数中添加:
if(!g_pDlg)
g_pDlg = new CMyDlg(this);
4。记得在关闭对话框时添加:
delete this;
g_pDlg = NULL;
5。发送消息:
void CAAA::OnAAAmsgToDlg()
{
...
g_pDlg->PostMessage(WM_MY_MESSAGE,0,0);//向对话框发送消息...
}