关于子对话框的创建与销毁
生活随笔
收集整理的這篇文章主要介紹了
关于子对话框的创建与销毁
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.顯示對話框
1.1顯示模式對話框:
CDialogDemo dlg; dlg.DoModal();
1.2?顯示非模式對話框:
CDialogDemo *dlg=new CDialogDemo(this); dlg->Create(IDD_GENERAL_CONTROL); dlg->ShowWindow(SW_SHOW);2.銷毀對話框
1.CDialog::OnOK(); ? //確定按鈕按下 ? ? ? ? CDialog::OnCancel(); //取消按鈕被按下 2.CDialog::DestoryWindow();? 3.CDialog::EndDialog( IDD ); ?3.在模態對話框類中關閉自身對話框
可以在模態對話框類中通過PostMessage(WM_CLOSE)來關閉自身對話框。關閉MessageBox對話框后模態對話框隨之關閉。
參考代碼如下:
BOOL CImportDataPromptDialog::OnInitDialog() {CDialog::OnInitDialog();// TODO: Add extra initialization hereHANDLE hThread = StartImportDataThread();if (!hThread){LOG("啟動導入數據線程失敗")}return TRUE; // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE }DWORD WINAPI CImportDataPromptDialog::ImportDataThread(LPVOID Param){CImportDataPromptDialog* importDlg = (CImportDataPromptDialog*)Param;if (CImportLog::ExtractionXMLData(importDlg->m_sXmlFilePath, importDlg->m_sDBPath)){importDlg->MessageBox("導入數據成功","平臺", MB_ICONINFORMATION);importDlg->PostMessage(WM_CLOSE);}else{importDlg->MessageBox("導入數據失敗","平臺", MB_ICONEXCLAMATION);importDlg->PostMessage(WM_CLOSE);}return 0;}HANDLE CImportDataPromptDialog::StartImportDataThread(){LOG("啟動導入數據線程");CWinThread* hThread = AfxBeginThread((AFX_THREADPROC)CImportDataPromptDialog::ImportDataThread,(LPVOID)this);return (hThread->m_hThread);}4.幾個相關重要函數的詳細講解
4.1 CloseWindow
函數功能:該函數最小化指定的窗口,但并不銷毀該窗口。
函數原型:BOOL CloseWindow(HWND hWnd);
參數:hWnd:將要最小化的窗口的句柄。
返回值:如果函數成功,返回值為非零;如果函數失敗,返回值為零。若想獲得更多錯誤信息,請調用GetLastError函數。
備注:窗口尺寸被最小化成一個圖標,并移動到屏幕的圖標區域。系統顯示窗口的圖標而不顯示窗口,并在圖標下顯示窗口標題。應用程序必須使用DestroyWindow函數銷毀窗口。
4.2?DestroyWindow
函數功能:銷毀指定的窗口。這個函數通過發送WM_DESTROY 消息和 WM_NCDESTROY 消息使窗口無效并移除其鍵盤焦點。這個函數還銷毀窗口的菜單,清空線程的消息隊列,銷毀與窗口過程相關的定時器,解除窗口對剪貼板的擁有權,打斷剪貼板器的查看鏈。函數原型:BOOL DestroyWindow( HWND hWnd // handle to window to destroy);
hWnd :將被銷毀的窗口的句柄。
返回值:如果函數成功,返回值為非零:如果函數失敗,返回值為零。若想獲得更多錯誤信息,請調用GetLastError函數。
備注:一個線程不能使用本函數銷毀別的線程創建的窗口。如果這個窗口是一個不具有WS_EX_NOPARENTNOTIFY 樣式的子窗口,則銷毀窗口時將發WM_PARENTNOTIFY 消息給其父窗口。Windows CE: 本函數將不發送 WM_NCDESTROY 消息.
4.3?EndDialog
函數功能:該函數清除一個模態對話框,并使系統中止對對話框的任何處理。函數原型:BOOL EndDialog(HWND hDlg,int nResult);
參數:hDlg:表示要被清除的對話框窗口。NResult:指定從創建對話框函數返回到應用程序的值。
返回值:如果函數調用成功,則返回值為非零值;如果函數調用失敗則返回值為零。若想獲得錯誤信息請調用GetLastError函數。
備注:由DialogBox,DialogBoxParam、DialogBoxlndirect和DialogBoxlndirectParam函數創建的對話框一定要用EndDialog函數來清除。應用程序從對話框應用程序內部調用EndDialog函數,該函數不能為其他目的而供使用。對話框應用程序可以在任何時間調用EndDialog函數;甚至在WM_INITDIALOG消息處理過程中。如果應用程序在WM_INTDIALOG消息處理過程中調用該函數,則對話框在顯示和輸入焦點被設置之前對話框被清除。EndDialog函數并不立即清除對話框。而是設置一個標志,并且允許對話框應用程序把控制權返回系統。系統在試圖從應用程序隊列檢索下一個消息之前檢測標志。如果已經設置了標志則系統中止消息循環,清除對話框,且用nResUlt中的值作為從創建對話框的函數中返回的值。
總結
以上是生活随笔為你收集整理的关于子对话框的创建与销毁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 飞鸽传书原创代码测试
- 下一篇: 【比较】CWebBrowser2类Nav