在學習MFC總結了筆記,并分享出來。
07-MFC_19day
一、基于對話框程式設計
(1)基于對話框程式設計
對話框是一種特殊類型的視窗,絕大多數Windows程式都通過對話框與使用者進行互動。在Visual C++中,對話框既可以單獨組成一個簡單的應用程式,又可以成為文檔/視圖結構程式的資源。
建立基于對話框的 MFC 應用程式架構
程式的建立過程:
》選擇“檔案 | 建立 | 項目”菜單;
》在“建立項目”對話框中,選擇“ MFC 應用程式 ”,輸入工程名稱,選擇“确定”。
》選擇“ 基于對話框”,即建立基于對話框的應用程式,選擇“完成”。
(2)對話框應用程式架構介紹
1)資源視圖
用 AppWizard 建立基于對話框的應用程式架構(假定工程名為 Dialog )後,項目工作區上增加了一個“資源視圖”頁籤。
或者,通過視圖找到“資源視圖”頁籤:
在 MFC中,與使用者進行互動的對話框界面被認為是一種資源。展開“Dialog”,可以看到有一個ID為IDD_ DIALOG _DIALOG(中間部分(DIALOG)與項目名稱相同)的資源,對應中間的對話框設計界面。不管在何時,隻要輕按兩下對話框資源的ID,對話框設計界面就會顯示在中間。
2)類視圖
在類視圖中,可以看到生成了3 個類:CAboutDlg、CDialogApp和CDialogDlg。
》CAboutDlg:對應生成的版本資訊對話框。
》CDialogApp:應用程式類,從 CWinApp 繼承過來,封裝了初始化、運作、終止該程式的代碼。
》CDialogDlg:對話框類,從CdialogEx繼承過來的,在程式運作時看到的對話框就是它的一個具體對象。
>DoDataExchange函數:該函數主要完成對話框資料的交換和校驗。
>OnInitDialog函數:相當于對對話框進行初始化處理。
1、模态對話框建立
當模态對話框顯示時,程式會暫停執行,直到關閉這個模态對話框之後,才能執行程式中的其他任務。
1)通過工具箱在界面上放一個Button,輕按兩下此按鈕即可跳轉到按鈕處理函數:
1 //按鈕處理函數
2 void CDialogDlg::OnBnClickedButton1()
3 {
4 // TODO: 在此添加控件通知處理程式代碼
5 }
2)資源視圖 -> Dialog -> 右擊 -> 插入 Dialog:
3)修改對話框ID:
4)點選對話框模闆 -> 右擊 -> 添加類:
5)類視圖中多了一個自定義類:
6)按鈕處理函數建立對話框,以模态方式運作。
實作模态對話框的建立需要調用CDialog類的成員函數CDialog::DoModel,該函數的功能就是建立并顯示一個對話框:
1 //啟動模态對話框按鈕2 void CDialogDlg::OnBnClickedButton1()
3 {
4 //需要包含頭檔案:#include "DlgExec.h"
5 CDlgExec dlg;
6 dlg.DoModal(); //以模态方式運作
7 }
2、非模态對話框建立
當非模态對話框顯示時,運作轉而執行程式中的其他任務,而不用關閉這個對話框。
圖形界面操作過程和模态對話框一樣,隻是,非模态對話框實作方式不一樣,先建立(CDialog::Create)一次,然後再顯示(CWnd::ShowWindow)。
1)主對話框.h類中聲明對話框對象:
2)建立對話框放在主對話框類的構造函數或OnCreate()函數,目的隻建立一次對話框:
1 //主對話框構造函數2 CDialogDlg::CDialogDlg(CWnd* pParent /*=NULL*/)3 : CDialogEx(CDialogDlg::IDD, pParent)
4 {
5 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
6
7 m_dlg.Create(IDD_DIALOG_SHOW); //IDD_DIALOG_SHOW為對話框ID
8 }
3)按鈕處理函數顯示對話框:
1 //啟動非模态對話框按鈕2 void CDialogDlg::OnBnClickedButton2()3 {
4 // TODO: 在此添加控件通知處理程式代碼
5
6 m_dlg.ShowWindow(SW_SHOWNORMAL); //顯示非模态對話框
7 }
二、常用控件
1、StaticText靜态文本使用
(1)靜态文本框
靜态文本框是最簡單的控件,它主要用來顯示文本資訊,不能接受使用者輸入,一般不需要連接配接變量,也不需要處理消息。
靜态文本框的重要屬性有:
》ID:所有靜态文本框的預設ID都是IDC_STATIC,靜态ID,不響應任何消息(事件)
》Caption:修改顯示的内容
常用接口:
接口 功能
CWnd::SetWindowText 設定控件内容
CWnd::GetWindowText 擷取控件内容
CStatic::SetBitmap 設定位圖(字尾為bmp的圖檔)
關聯控件變量:
由于XXX_STATIC靜态ID是不能關聯變量,故需把ID修改後,再關聯變量:
在主對話框類OnInitDialog()中,完成相應接口測試:
1 //設定靜态控件内容為Tom 2 m_label.SetWindowText(TEXT("Tom")); 3
4 //擷取靜态控件的内容
5 CString str;
6 m_label.GetWindowText(str);
7 MessageBox(str);
8
9 //設定靜态控件視窗風格為位圖居中顯示
10 m_label.ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE);
11
12 //通過路徑擷取bitmap句柄
13 #define HBMP(filepath,width,height) (HBITMAP)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)
14
15 //靜态控件設定bitmap
16 m_label.SetBitmap(HBMP(TEXT("./1.bmp"), 300, 250));
更改為顯示完整圖像
1 //設定靜态控件視窗風格為位圖居中顯示 2 m_Img.ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE); 3
4 //通過路徑擷取bitmap句柄
5 #define HBMP(filepath,width,height) (HBITMAP)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)
6
7 //擷取控件寬度和高度,設定到圖檔中
8 CRect rect;
9 m_Img.GetWindowRect(rect);
10
11 //靜态控件設定bitmap
12 m_Img.SetBitmap(HBMP(TEXT("./1.bmp"), rect.Width(), rect.Height()));
(2)普通按鈕
按鈕是最常見的、應用最廣泛的一種控件。在程式執行期間,當單擊某個按鈕後就會執行相應的消息處理函數。
按鈕的主要屬性是Caption,來設定在按鈕上顯示的文本。
指令按鈕處理的最多的消息是:BN_CLICKED,輕按兩下按鈕即可跳轉到處理函數。或者,通過按鈕屬性 -> 控制事件 -> 選擇所需事件,
常用接口:
接口 功能
CWnd::SetWindowText 設定控件内容
CWnd::GetWindowText 擷取控件内容
CWnd::EnableWindow 設定控件是否變灰
1)關聯控件變量:添加變量(變量名:m_button)
2)添加處理函數:
1 //擷取按鈕的内容 2 CString str; 3 m_button.GetWindowText(str);
4 MessageBox(str);
5
6 //設定按鈕内容
7 m_button.SetWindowText(TEXT("^_^"));
8
9 //設定按鈕狀态為灰色
10 m_button.EnableWindow(FALSE);
11 m_button.EnableWindow(TRUE);
總結