1、模態對話方塊的對象可以是一個局部對象;其建立主要是一個DoModal()即可解決
2、非模態對話方塊的建立較為特殊
①、首先需要該對話方塊的對象是一個全域變數,否則會在函數執行完成之後被析構,導致對話方塊無法顯示
{也可以定義為指標變數,在堆上給這個對象分配記憶體;然後重載虛函數PostNCDestory()中加入delete this來析構,因為有一個局部函數析構以後,指標無法指向的問題,這種方法較為麻煩}
②、需要ShowWindow(SW_SHOW)出來
//-----------------------------------------分割線------------------------------------------------------------------------------------------------------------------------//
3、一個對話方塊就是一個類,我們可以在設計完對話方塊以後,雙擊該對話方塊,來建立這個對話方塊類
4、關於“動態添加按鈕”這個功能,代碼如下:
1 void CLuoDlg::OnBnClickedAdd() 2 { 3 // TODO: Add your control notification handler code here 4 if(!btn.m_hWnd) 5 { 6 btn.Create("BUTTON ME",BS_PUSHBUTTON,CRect(0,0,100,100),this,123); 7 btn.ShowWindow(SW_SHOWNORMAL); 8 } 9 else10 {11 btn.DestroyWindow();12 }13 }
這裡要注意學習的知識點在於:
①、用一個表單控制代碼來判斷。注意指明其對象,如本例中的btn.m_hWnd
②、按鈕的建立方式和Show出來的問題
//-----------------------------------------分割線------------------------------------------------------------------------------------------------------------------------//
5、對於靜態控制項,如果要編輯的話,① 要修改其ID ② 設定其Notify選項為TRUE
6、本例中比較重要的一個函數就是GetDlgItem(控制項ID)來擷取相關對話方塊上控制項的指標,同時要注意進一步領會API函數中的Get和Set的作用。一些範例程式碼如下:
1 void CLuoDlg::OnBnClickedAdd2() 2 { 3 // TODO: Add your control notification handler code here 4 //---------下面是第一種相加的方式-------------------------------- 5 char num1[10]; 6 char num2[10]; 7 char num3[10]; 8 int total,n1,n2,n3; 9 GetDlgItem(IDC_EDIT1)->GetWindowText(num1,10);10 GetDlgItem(IDC_EDIT2)->GetWindowText(num2,10);11 12 n1=atoi(num1);13 n2=atoi(num2);14 // total=n1+n2;15 16 itoa(total,num3,10);17 GetDlgItem(IDC_EDIT3)->SetWindowText(num3);18 19 //--------------下面是第二種方式--------------------------------20 char num1[10],num2[10],num3[10];21 int n3,n2,n1;22 GetDlgItemText(IDC_EDIT1,num1,10);23 GetDlgItemText(IDC_EDIT2,num2,10);24 25 n1=atoi(num1);26 n2=atoi(num2);27 28 n3=n1+n2;29 30 itoa(n3,num3,10);31 SetDlgItemText(IDC_EDIT3,num3);32 //----------下面是第三種方式 控制項綁定----------------33 UpdateData();34 m_num3=m_num1+m_num2;35 UpdateData(FALSE);36 }
//-------------------------------------------------------分割線---------------------------------------------------------------------------------------//
7、對於控制項焦點順序的移動問題。即斷行符號使得游標順序移動的功能,最簡要的一種方法總結如下:
在對話方塊中的“預設按鈕”(即是說這個按鈕的Default Button屬性為TRUE),中的單擊事件中,寫如下的代碼GetNextDlgTabItem(GetFocus())->SetFocus();,如下可見:
void CLuoDlg::OnBnClickedOk(){ // TODO: Add your control notification handler code here //CDialogEx::OnOK(); }
要注意,此時就算是刪掉了這個OK按鈕,程式中的焦點依舊會傳遞,因為它會調用那個虛擬OnOK函數