折射定律公式怎么推导:VC_MFC 非模态对话框的问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 05:40:16
单文档View中创建并显示非模态对话框后,
dlg->Create(IDD_XXXXX);
dlg->ShowWindow(SW_SHOW);
怎样判断是否按下ok按钮?我只知道模态是if(IDOK==dlg->DoModal())
那非模态呢??

非模态的判断需要通过消息的形式来和副窗口进行通信
消息自己自由定义,副窗口自定义处理消息的函数,下面是我的笔记,可以参考下。
创建无模态对话框
①首先一样的创建对话框资源,然后用Create和ShowWindow来显示对话框。模态对话框用DoModal()来显示。
CTestDialog *m_dialog;
m_dialog=new CTestDialog(this);//参数为父窗口指针
m_dialog.m_name=m_name;//初始化对话框的成员
m_dialog->Create(IDD_DIALOG1);
BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );//第二个参数为父窗口指针,默认为主窗口。
m_dialog->ShowWindow(SW_SHOW);
②销毁自身对象
可以在OnOK和OnCancel中调用DestroyWindow();该调用会引起OnDestroy()的调用。
然后重载OnDestroy()函数,在其中执行 delete this;来删除自身资源
可以在对话框类中定义一个消息,将自身对象传递给父窗口,由父窗口来删除对象如:
#define WM_DELETE_DLG WM_USER+5//注意:该项必须在对话框的头文件中定义
定义一个CWnd* m_pParent;并在构造函数中给他赋值m_pParent=pParent;
在需要的地方发送消息如:m_pParent->PostMessage(WM_DELETE_DLG,(WPARAM)this);
父窗口中定义处理函数afx_msg LONG OnDeleteDialog(WPARAM wp,LPARAM lp);
父窗口中添加消息映射 ON_MESSAGE(WM_DELETE_DLG,OnDeleteDialog);
父窗口在处理函数中执行 delete (CMyDialog*)wParam;
③实现对话框和父窗口的通信,通过自定义消息。
④无模式对话框特点:
在需要关闭时不能给对话框发送 WM_CLOSE消息 (模式对话框可以)
if( nIDEvent == 1){
        dlg.PostMessage(WM_CLOSE); //向对话框发送关闭消息
        KillTimer(1);}
而应该调用DestoryWindow函数
if( nIDEvent == 1){
        dlg.DestroyWindow(); //这样就没有问题了
        KillTimer(1);}