(1)模態對話框和非模態對話框的創建
(2)對話框常用回調函數
對話框是一個窗口,窗口的回調函數,有WM_CREATE(),WM_INITDIALOG PreSubclassWindows等,
窗口關閉的回調函數有WM_cLOSE,WM_DESTROY,(後面兩個對話框特有的)OnOK(),OnCancel()
WM_CREATE()是所有窗口創建的回調消息,函數是OnCreate(),可以在窗口創建還沒有顯示的時候,修改父窗口
的屬性或者創建內部子窗口,
WM_INITDIALOG對話框專用消息,初始對話框內部組件,對應的消息處理函數是OnInitDialog,在這個函數內部
實現所有控件創建完畢。(這個消息處理函數已經添加上)
(3)對話框關閉的時候可能的回調有
當用戶單擊系統菜單項,或者最大化,最小化,還原關閉按鈕,窗口將會接收到系統命令消息WM_SYSCOMMAND,調用函數是
CW百度::OnSysCommand(),當單擊“關閉”按鈕,窗口首先會收到WM_SYSCOMMAND消息。
WM_CLOSE消息是WM_SYSCOMMAND()消息在接受SC_CLOSE消息的分支消息,或者說是專門處理關閉命令消息。使用OnClose()
函數進行處理更加容易。
當單擊對話框中的IDOK IDCANCEL按鈕發出WM_COMMAND消息,或者按鈕esc和enter鍵的時候,會調用OnOK()和OnCancel()函數
(也需這兩個函數已經不用,換成單擊按鈕了)--
void CmodelDialogDlg::OnBnClickedOk()//單擊確定按鈕
WM_DESTROY消息映射函數是OnDestroy()函數,是最晚調用的回調函數,上面的回調發生在對話框消失之前,並且可以取消關閉對話框,
OnDestroy()調用的時候對話框窗口已經消失了,只能做一些清理工作.
所以關閉調用順序是WM_SYSCOMMAND(SC_CLOSE)--調用函數CDialog::OnSysCommand()
WM_CLOSE---CDialog::OnClose()
wm_command IDCANCEL
WM_DESTROY--OnDestroy()
void CmodelDialogDlg::OnBnClickedAbout()//模態對話框處理函數
{
// TODO: 在此添加控件通知處理程序代碼
CAboutDialog dlg;
dlg.DoModal();
}
void CmodelDialogDlg::OnBnClickedChat()//聊天對話,非模態調用
{
// TODO: 在此添加控件通知處理程序代碼
CChatDlg *pDlg = new CChatDlg;
pDlg->Create(IDD_CHATDLG);
pDlg->ShowWindow(SW_SHOW);
}
int CmodelDialogDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)//這是主對話框創建前調用的函數
{
if (CDialogEx::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您專用的創建代碼
SetWindowTextW(_T("在OnCreate()函數中修改窗口的屬性--窗口標題"));
return 0;
}
void CmodelDialogDlg::OnClose()//窗口關閉的處理消息
{
// TODO: 在此添加消息處理程序代碼和/或調用默認值
//註釋掉父類的處理函數,使窗口最小話而不關閉
ShowWindow(SW_MINIMIZE);
//CDialogEx::OnClose();
}
void CmodelDialogDlg::OnBnClickedOk()//單擊確定按鈕
{
// TODO: 在此添加控件通知處理程序代碼
if (AfxMessageBox(_T("你確定要退出嗎"), MB_YESNO == IDYES))
CDialogEx::OnOK();
}