MFC對話框程序消息與回調函數總結

(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();
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章