1. 程式人生 > >03_MFC知識點總結(二)

03_MFC知識點總結(二)

一、對話方塊


1)模態對話方塊
    a)資源檢視->Dialog->右擊->插入Dialog
    b)建立對話方塊物件 CDialog
    c)以模態方式執行 CDialog::DoModal
2)非模態對話方塊
    a)資源檢視->Dialog->右擊->插入Dialog
    b)建立對話方塊物件,需要在.h的地方宣告成員變數 CDialog
    c)建立對話方塊(在建構函式或OnCreate(),目的只建立一次)CDialog::Create
3)自定義對話方塊(重要)
    a)資源檢視->Dialog->右擊->插入Dialog
    b)點選對話方塊模本->右擊->新增類
    c)多出來一個自定義的類, .h類中有個列舉和對話方塊關聯 enum{IDD=IDD_DIALOG2}

 

二、基於對話方塊(控制元件)程式設計


1)基於對話方塊應用程式框架
    a)應用程式類:繼承於CWinApp
        InitInstance():程式的入口地址
    b)對話方塊類:繼承於CDialog
        OnInitDialog():對話方塊的初始化工作
        DoDataExchange():控制元件和變數的關聯和交換
        
三、常用的控制元件


1)靜態控制元件CStatic(Qt中的標籤QLable)
    顯示一些文字資訊
    a)Caption:修改顯示的內容
    b)ID:XXX_STATIC,靜態ID,不響應任何訊息(事件)
    
2)按鈕 CButton
    a)Caption:修改顯示的內容
    b)處理訊息 BN_CLICKED,使用者點選按鈕自動觸發:
        1)屬性->控制事件->選擇所需要事件
        2)雙擊按鈕,自動生成訊息處理函式
3)逃跑按鈕(類似於Qt提升)
    a)自定義按鈕類,繼承於CButton
    選擇類檢視最開始的資料夾->右擊->右擊->新增類->MFC->MFC類
        1)處理滑鼠移動訊息 WM_MOUSEMOVE
        2)獲取父視窗指標 CWnd::GetParent
        3)獲取父視窗客戶區域的範圍 CWnd::GetClientRect
        4)獲取按鈕的範圍 CWnd::GetWindowRect
        5)產生隨機座標 rand()%wc
        6)移動按鈕的位置 CWnd::MoveWindow
        
    b)變數關聯
    選中按鈕->右擊->新增變數->變數型別:MyButton->變數:button
    最終,button和我們所選中的按鈕關聯成功,操作button,相當於操作ui上的按鈕(Qt的提升)
    c)為按鈕設定點陣圖
        1)按鈕屬性:Bitmap -> True
        2)在對話方塊類中 OnInitDialog()做如下處理
            a)建立點陣圖模板
            b)建立點陣圖物件 CBitmap
            c)載入點陣圖資源 CBitmap::LoadBitmap
            
4)編輯框CEdit
    a)關聯類別:Value,Control
        1)Value:標準普通函式資料型別 CString str;
            關聯變數和控制元件資料的互動更新
            a)把編輯區的內容更新到 str中 UpdateData(TRUE);
            b)把str的內容更新到編輯區中 UpdateData(FALSE);
        
        2)Control:控制元件型別
            控制元件型別的物件即為ui上的控制元件
    
    b)常用屬性設定
        1)Number -> TRUE 只能輸入數字
        2)Password -> True 密碼模式
        3)Want return -> True 接收回車鍵,自動換行,只有在多行模式下,才能換行
        4)Multiline -> True 多行模式
        5)Auto VScroll -> True
            Vertical Scroll ->True 當垂直方式字元太多,自動出現滾動條
        6)Read Only -> True 只讀
        
    c)複製小案例
    關聯 Control:控制型別,只能關聯一次
        1)獲取編輯區內容 CWnd::GetWindowText
        2)設定編輯區內容 CWnd::SetWindowText
        3)關閉對話方塊視窗
            CDialog::OnOk();
            CDialog::OnCancel();

5)單選框、複選框(特殊的CButton,沒有單選框,複選框型別)
    a)單選框
        1)屬性設定:順序排放 Ctrl+D檢視
        2)同組第一個按鈕 Group 設定為 TRUE
        3)初始化單選框 CWnd::CheckRadioButton
        4)按鈕是否按下 CWnd::IsDialogButtonChecked
        
    b)複選框
        1)常關聯變數 BOOL UpdateData(TRUE) UpdateData(FALSE);
        2)設定按鈕選擇狀態 CButton::SetCheck
        3)獲取按鈕選擇狀態 CButton::GetCheck
        
6)列表框CListBox
    a)給列表框新增一個字串 CListBox::AddString
    b)選中列表框某一項,自動觸發事件:LBN_SELECHANGE
        1)獲取當前選中項 CListBox::GetCurSel
        2)獲取指定位置的內容 CListBox::GetText
    
    c)刪除指定位置的字串 CListBox::DeleteString
    d)在指定位置插入字串 CListBox::InsertString
    
7)組合框(下拉框)CComboBox
    a)獲取內容:CComboBox::GetLBText
        其它介面和CListBox的用法幾乎一樣
    b)屬性設定
        1)data: 設定內容,不同內容間同英文 的分號“;”分離
        2)type
        
8)滾動條 CScrollBar
    a)設定給定滾動條的最小和最大位置:CScrollBar::SetScrollRange
    b)獲取一個滾動框的當前位置:CScrollBar::GetScrollPos
    c)設定一個滾動條的當前位置:CScrollBar::SetScrollPos
    d)處理滾動條的事件,不是在滾動控制元件本身處理,是在滾動條所屬的父視窗處理(對話方塊類)處理訊號:WM_HSCROLL
    e)滾動條位置關係
        switch (nSBCode) //判斷滾動條的哪一部分
        {
        case SB_THUMBPOSITION: //滑塊的位置
            break;
        case SB_LINELEFT: //向左的箭頭
            break;
        case SB_LINERIGHT: //向右的箭頭
            break;
        case SB_PAGELEFT: //箭頭和滑塊之間左邊
            break;
        case SB_PAGERIGHT://箭頭和滑塊之間右邊
            break;
        default:
            break;
        }


9)微調(旋轉)按鈕 SpinControl的使用
    a)屬性設定
        Aauto Buddy -> True
        Set buddy integer -> True
    b)微調 (旋轉)按鈕的順序比夥伴大1(Ctrl+D檢視)


10)列表檢視控制元件 CListCtrl
    a)屬性設定 view -> Report(報表方式)
    b)常用介面
        1)設定列表風格 CListCtrl::SetExtendedStyle
            LVS_EX_FULLROWSELECT:選擇整行
            LVS_EX_GRIDLINES:網格方式
            具體有哪些風格,可以通過MSDN檢視
            
        2)獲取列表風格 CListCtrl::SetExtendedStyle
            具體有哪些風格,可以通過MSDN檢視
        
        3)插入某列 CListCtrl::InsertColumn
        
11)樹檢視控制元件 CTreeCtrl
    a)常用屬性設定
        has button -> true
        has line -> true
        line at root ->true
    b)寫程式碼流程
        1}載入自定義圖示
            a)獲取應用程式物件指標 AfxGetApp()
            b)載入自定義圖示 CWndApp::LoadIcon
        2)建立圖示列表
            a).檔案中定義圖形列表(CImageList)物件
            b)建立影象列表 CImageList::Create
            c)影象列表追加圖示 CImageList::Add
        4)設定圖形狀態列表 CTreeCtrl::SetImageList
        5)插入節點 CTreeCtrl::InsertItem
        6)設定預設選中項 CTreeCtrl::SelectItem


12)標籤控制元件CTabCtrl
    1)在ui工具箱拖放 Tab Control
    2)把TabSheet.h和TabSheet.cpp放在專案檔案同級目錄,並且新增到工程目錄中
    3)給ui上 Tab Ctontrol 關聯Control型別(CTabSheet)
    4)CTabSheet物件新增對話方塊
        a)資源檢視 -> Dialog -> 右擊 -> 新增類
        b)設定相應屬性:
            Style -> Child(子視窗)
            Border -> None(無邊框)
        c)自定義類:點選對話方塊模板 -> 右擊 -> 新增類
        d)主對話方塊類中,自定義類物件
        e)主對話方塊中 OnInitDialog() 做初始化工作
        f)CTabSheet新增對話方塊 CTabSheet::AddPage()
            tmp.AddPage(_T("系統管理"),&t1,tab1);
                tmp:為CTabSheet物件
                t1:需要新增對話方塊物件
                tab1:對話方塊ID
        g)顯示對話方塊:CTabSheet::Show()