对话框分为模态对话框和非模态对话框
模态对话框是指当其显示时,程序会暂停执行,知道关闭这个模态对话框,才能继续执行程序中其他任务。创建模态对话框直接使用CDialog的成员函数DoModel。
CTestDlg dlg;
dlg.Domodel();
非模态对话框就是当其显示时,允许转而执行程序中其他任务,而不用关闭这个对话框。创建非模态对话框需要利用CDialog类的Create成员函数。
virtual BOOL Create(
LPCTSTR lpszTemplateName,
CWnd* pParentWnd = NULL);
virtual BOOL Create(
UINT nIDTemplate,
CWnd* pParentWnd = NULL);
创建非模态对话框需要注意
CTestDlg dlg;
dlg.Create(IDD_DIALOG1,this);
dlg.ShowWindow(SW_SHOW);
其中dlg是局部变量,所在函数返回之后即被销毁了。因此,需要将其定义为全局变量或者定义一个全局指针pDlg:
CTestDlg *pDlg=new
CTestDlg;;
pDlg->Create(IDD_DIALOG1,this);
pDlg->ShowWindow(SW_SHOW);
除此之外,非模态对话框的OnOk和OnCancel都必须重写来销毁对话框,因为其基类虚函数只是将其隐藏起来并未销毁。重写的OnOk和OnCancel函数中应该调用DestroyWindow函数来完成销毁对话框的工作,同时注意不要再调用基类的OnOk和OnCancel函数。
静态文本框
静态文本框主要用来起标签作用,其控件ID同一为ID_STATIC,当你想要动态改变文本框控件的显示内容时,首先需要更改它的ID号:ID_STRING,然后在代码中加入
CSring str(L"");
GetDlgItem(ID_STRING)->SetWindowText(str);
若还想通过静态文本框发送消息,则还需要将文本框属性中的Notify选中,这样窗口才能接受静态文本框发送的消息。