如何建立非模态对话框
1、重写对话框的构造函数,使对话框跟某个视图相关联。如:CXXDlg(CView *pView);
2、在对话框类中增加Create()函数用于创建对话框,作用相当于模态对话框的DoModal();
BOOL CXXDlg::Create()
{
returnCDialog::Create(CXXDlg::IDD);
}
3、在视图类的头文件中加入对话框类 class CXXDlg;,并定义该对话框类的指针CXXDlg *m_pXXDlg;
4、在视图类的构造函数中初始化对话框类的指针m_pXXDlg = new CXXDlg(this);
5、在需要弹出该非模态对话框的地方,先取视图类指针pView,然后用
if (!m_XXDlg->GetSafeHwnd()) //如果对话框不存在
{
pView->m_pXXDlg->Create();
pView-> m_pXXDlg ->ShowWindow(SW_SHOW);
}
6、此时已经能够弹出非模态对话框了,但是该对话框的位置需要进行调整,把它放到客户区得中间。
CRectRectDlg,RectClient;
m_XXDlg->GetWindowRect(&RectDlg);
GetClientRect(&RectClient);
intx=RectClient.left+(RectClient.Width()-RectDlg.Width())/2;
inty=RectDlg.top+(RectClient.Height()-RectDlg.Height())/2;
m_pXXDlg->MoveWindow(x,y,RectDlg.Width(),RectDlg.Height());
7、在对话框关闭的时候需要调用DestroyWindow();