黃皮書第七章總結_對話方塊(咦)

來源:互聯網
上載者:User

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函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.