小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

MFC對話框編程要點

 ShangShujie 2008-07-19
MFC 對話框編程要點
 
(一)對話框基本要點和生命周期
        MFC對話框支持WYSIWYG編程模式,即What you see is what you get.。其類型分為模式對話框和非模式對話框
        對話框由一個rc資源文件描述外觀;與一個cpp類相連接(通過ID);對話框內的控件使用基于ID的變量映射來通訊。
        模式對話框對象被定義后,通過調用DoModal()函數(shù)來顯示對話框并進行相關操作,此函數(shù)當對話框被關閉時返回。其返回值標明了對話框是點擊OK退出(1),還是被Cancel(2)。
   
        非模式對話框需要與某個View相關聯(lián),以便對話框退出時發(fā)送消息給對應的View進行必要的處理。
   
        對話框顯示前,系統(tǒng)會調用OnInitDialog()函數(shù),在這個函數(shù)中你可以設置一些控件屬性,進行一些初始化工作。比如,設置滾動條的最大最小值,設置List列表的初始值等。其方法是將控件ID作為參數(shù),調用GetDlgItem函數(shù)獲得控件的對象的指針(指針類型是CWnd*)然后使用對象提供的函數(shù)進行操作。
        ID對于一個組件來說非常重要,通過向導,我們可以將一個變量和一個組件進行關聯(lián)(映射)來實現(xiàn)數(shù)據(jù)交換,而這種綁定的關鍵就是將一個組件的ID與成員變量關聯(lián)。
 
(二)數(shù)據(jù)交換機制
        UpdateData(BOOL b)函數(shù)可以進行變量和組件內容的交換,當UpdateData函數(shù)的參數(shù)為TRUE時,數(shù)據(jù)從對話框控件傳遞給數(shù)據(jù)成員;參數(shù)為FALSE時,數(shù)據(jù)從數(shù)據(jù)成員傳遞至對話框成員。數(shù)據(jù)交換的實現(xiàn)是通過調用 CDialog::DoDataExchange函數(shù)。
        當我們想改變獲得到個別控件中的數(shù)據(jù)時,可以使用GetDlgItem函數(shù)得到對應控件的指針,對指針進行操作。
 
(三)特殊的Radio Button
        Radio Button控件是分組的,同一組的Radio Button只能有一個被選中。這個機制的實現(xiàn)依賴于TAB順序,在資源視圖下按Ctrl-D鍵將顯示對話框的TAB焦點順序。舉一個例子來說明:
        Radio1,Radio2,Radio3是三個不同的Radio Button控件,其焦點順序為1,2,3。為了實現(xiàn)分組Radio1的Group屬性應該為TRUE,其余兩個為FALSE。如果又有兩個 Radio4,Radio5焦點順序為6,7。則Radio4的Group屬性應為TRUE,Radio4,Radio5被分為一組。
        需要注意的是,Radio以Group屬性來分組,為了結束前一個組,你應該將焦點順序為4,8的控件的Group屬性設為TRUE,否則編譯器會產(chǎn)生一個警告。
 
(四)一些技巧
        通過向導,我們可以將一個類成員變量和控件關聯(lián)以進行數(shù)據(jù)交換,例如將一個CString類型的變量和Edit控件關聯(lián)。將一個int變量和一組Radio Button關聯(lián)。但是,人總有犯錯的時候,當我們修改或需要刪除這種關聯(lián)時,麻煩就來了。
        在我的使用過程中沒有發(fā)現(xiàn)VS2005提供了刪除“已被關聯(lián)的控件成員變量”的向導,所以我使用的是比較麻煩的手動刪除。
1、 對話框頭文件中刪除成員變量的定義
2、 對話框cpp文件中刪除構造函數(shù)初始化列表中的對應變量的初始化
3、 對話框cpp文件中刪除DoDataExchange函數(shù)中的對應語句(根據(jù)變量名)
此時,在class view中的向導中,已經(jīng)可以重新設定控件所關聯(lián)的成員變量了。
 
        登錄框的制作:
        在顯示主窗口之前顯示一個模式對話框來提示用戶登錄是一個常用的功能。只需要在PreCreateWindow函數(shù)中加入顯示對話框的代碼就可以完成這個功能。
 
        有些時候,我們可能需要從一個控件對象來得到它的ID。比如,你的對話框中有好幾個滾動條,那么這些滾動條的事件都在OnHScroll ,OnVScroll中被響應。如何區(qū)分是哪個滾動條就需要確定ID。
        在這兩個函數(shù)的參數(shù)中有一個CScrollBar* pScrollBar指針,我們可以通過調用
pScrollBar->GetDlgCtrlID()來獲得ID,ID是一個整數(shù)。
        在對話框編程中往往需要改變某個控件的文字,比如Edit控件和static text控件。此時使用SetDlgItemText(int nID, LPCTSTR lpzString)函數(shù)比較方便。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多