好久沒寫對話框程序了都忘光了總結下

 首先是創建模態對話框和非模態對話框

模態對話框:CDialog  dlg;

                       dlg.DoModal();

非模態對話框:CDialog *dlg;

                         dlg->Create(IDC_Dialog1,this);

                         dlg->ShowWindow(SW_SHOW);

如何給EDIT框一個單擊事件:

首先建立類嚮導裏插入PreTranslateMessage(MSG* pMsg) 函數

BOOL CKeyboardDlg::PreTranslateMessage(MSG* pMsg)

{

CWnd   *   pWnd1   =   GetDlgItem(IDC_EDIT1);
if(GetFocus()==pWnd1)// 
 if(pMsg-> message   ==   WM_LBUTTONDOWN ) 
 { 
   
  m_key.Create(IDD_DIALOG1,this);
  m_key.ShowWindow(SW_SHOW);
   
 }

return CDialog::PreTranslateMessage(pMsg);

}

 

當EDIT框獲得光標時候彈出對話框時我們需要注意的東西

當彈出對話框後其實光標還是在編輯框裏面,只是當前活動窗口變成了子窗口,等你一關閉子窗口後會又回到當前的編輯框裏,相當於形成了一個死循環,

所以我們一定要在關閉子對話框的時候同時不要把光標落在當前的編輯框裏(不能用 ::DestroyCaret(); 銷燬光標,那個只是銷燬了光標,實際上還是

在當前編輯框裏),要用SetFocus()把它移動到其他的控件上,不能在EDIT的OnSetfocus裏設置,必須得在關閉子對話框的函數裏把活動控件移到其他

控件上。

 

 

子對話框如何調用父對話框函數

在子對話框中先添加父對話框的頭文件

然後定義:CDialog *dlg=(CDialog *)GetParent();就可以調用了。

 

如何不讓對話框程序不一按回車鍵和ESC鍵就退出程序:

原因:回車鍵和ESC鍵默認調用的是程序的原有的OnOK();

所以直接重載下OnOK();就可以了,重載的方法,重新定義一個函數名一樣的函數。

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