大二上課件面向?qū)ο骳 ch_第1頁
大二上課件面向?qū)ο骳 ch_第2頁
大二上課件面向?qū)ο骳 ch_第3頁
大二上課件面向?qū)ο骳 ch_第4頁
大二上課件面向?qū)ο骳 ch_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第七章 基于MFC的Windows程序設(shè)計(jì)吳良杰Harbin Engineering University2MFC還很好地保持了程序的向下兼容性是用來編寫Windows應(yīng)用程序的C+類集以層次結(jié)構(gòu)組織封裝了大部分API函數(shù)提供了圖形環(huán)境下應(yīng)用程序的框架提供了創(chuàng)建應(yīng)用程序的組件提供了大量的基類供程序員根據(jù)不同的應(yīng)用環(huán)境進(jìn)行擴(kuò)充允許在編程過程中自定義和擴(kuò)展應(yīng)用程序中的類較好的移植性,可移植于眾多的平臺(tái)MFCMFC類的組織結(jié)構(gòu)MFC庫中的類按層次關(guān)系劃分類:(1)根類:CObject(2)應(yīng)用程序體系結(jié)構(gòu)類(3)窗口、對話框和控件類(4)繪圖和打印類(5)簡單數(shù)據(jù)類型類(6)數(shù)組、列表和映射類(7)

2、文件和數(shù)據(jù)庫類(8)Internet和網(wǎng)絡(luò)工作類(9)OLE類(10)調(diào)試和異常類MFC類的組織結(jié)構(gòu)簡單數(shù)據(jù)類型類MFC類的組織結(jié)構(gòu)5文件和數(shù)據(jù)庫類文件I/O類DAO類ODBC類Internet和網(wǎng)絡(luò)工作類LSAPI類Windows Socket類Win32 Internet類MFC應(yīng)用程序框架類型MFC應(yīng)用程序框架類型MFC AppWizard: 快速、高效、自動(dòng)地生成一些常用的標(biāo)準(zhǔn)程序結(jié)構(gòu)和編程風(fēng)格。最常用、最基本的三種應(yīng)用程序類型: 單文檔、多文檔和基于對話框的應(yīng)用程序。單文檔應(yīng)用程序:每次只能打開和處理一個(gè)文檔對話框的程序: 沒有菜單、工具欄及狀態(tài)欄,也不能處理文檔,但它的好處是速度快

3、,代碼少,程序員所花費(fèi)的開發(fā)和調(diào)試時(shí)間短。多文檔應(yīng)用程序,能允許同時(shí)打開和處理多個(gè)文檔。與單文檔應(yīng)用程序相比,增加了許多功能,因而需要大量額外的編程工作。創(chuàng)建一個(gè)應(yīng)用程序框架創(chuàng)建工程 工程類型: MFC AppWizard(exe)選擇程序類型 單文檔編譯并運(yùn)行 顯示一個(gè)用戶程序窗口向應(yīng)用程序中添加并使用對話框資源與資源標(biāo)識 項(xiàng)目工作區(qū)窗口切換到“ResourceView”頁面。資源分類:(1) 快捷鍵列表(Accelerator):(2) 對話框(Dialog):(3) 圖標(biāo)(Icon):(4) 菜單(Menu):(5) 字串表(String Table)(6) 工具欄按鈕(Toolbar)

4、:(7) 版本信息(Version):向應(yīng)用程序中添加并使用對話框資源標(biāo)識符 每一個(gè)資源類別下都有一個(gè)或多個(gè)相關(guān)資源,每一個(gè)資源均是由標(biāo)識符來定義的。當(dāng)添加或創(chuàng)建一個(gè)新的資源或資源對象時(shí),系統(tǒng)會(huì)為其提供默認(rèn)的名稱,如IDR_MAINFRAME等。用戶可重新命名,但要按一定的規(guī)則來進(jìn)行。一般地,要遵循下列規(guī)則: (1)在標(biāo)識符名稱中允許使用字母az、AZ、09以及下劃線。 (2)標(biāo)識符名稱不區(qū)分大小寫字母,如new_idd與New_Idd是相同的標(biāo)識符。 (3) 不能以數(shù)字開頭,如8BIT是不合法的標(biāo)識符名。 (4)字符個(gè)數(shù)不得超過247個(gè)。向應(yīng)用程序中添加并使用對話框添加對話框資源(1)選擇”

5、插入”|”資源”菜單,或快捷鍵Ctrl+R 打開打開“插入資源”對話框。(2)選中“Dialog”,單擊新建按鈕 自動(dòng)為當(dāng)前應(yīng)用程序添加一個(gè)對話框資源。設(shè)置對話框?qū)傩?在對話框模板處右擊鼠標(biāo),從彈出的快捷菜單中選擇“屬性”菜單項(xiàng)。 將對話框ID 改成IDD_DIALOG_FIRST; 將對話框標(biāo)題改為“我的第一個(gè)對話框”向應(yīng)用程序中添加并使用對話框添加和布局控件 在控件工具欄中單擊某控件;在對話框指定位置單擊鼠標(biāo)左鍵,則此控件被添加到對話框的相應(yīng)位置,再拖動(dòng)選擇框可改變控件的大小和位置??丶倪x取 選取單個(gè)控件 用鼠標(biāo)直接選取多個(gè)控件的選取 先按住Shift鍵不放,然后用鼠標(biāo)選取控件向應(yīng)用程序

6、中添加并使用對話框操作示例 : 添加一個(gè)靜態(tài)文本控件 修改控件屬性:右擊|屬性 修改ID:IDC_STATIC_1向應(yīng)用程序中添加并使用對話框創(chuàng)建對話框類 在對話框資源模板的空白區(qū)域內(nèi)雙擊鼠標(biāo); 單擊OK按鈕,彈出New Class對話框; 輸入對話框類名:CFirstDlg (以C開始) 單擊OK按鈕。添加對話框代碼打開MFC ClassWizard對話框:查看|建立類向?qū)г凇癈lass name”列表中選擇CFirstDlg在IDs列表中選擇CFirstDlg,在Messages框中選擇WM_INITDIALOG消息。向應(yīng)用程序中添加并使用對話框添加對話框代碼打開MFC ClassWiza

7、rd對話框:查看|建立類向?qū)г凇癈lass name”列表中選擇CFirstDlg在IDs列表中選擇CFirstDlg,在Messages框中選擇WM_INITDIALOG消息單擊Add Function按鈕 或雙擊WM_INITDIALOG消息在Member functions列表框中選擇OnInitDialog函數(shù),單擊Edit Code按鈕 或直接在函數(shù)名雙擊鼠標(biāo)向應(yīng)用程序中添加并使用對話框輸出代碼:BOOL CFirstDlg:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization hereCStat

8、ic* pWnd = (CStatic*)GetDlgItem(IDC_STATIC_1);pWnd-SetWindowText (這是我的第一個(gè)對話框!);return TRUE; 向應(yīng)用程序中添加并使用對話框在程序中使用對話框(1)在項(xiàng)目工作區(qū)窗口中選擇ResourceView頁面,雙擊資源“Menu”項(xiàng)中的IDR_MAINFRAME, 在菜單的最后一項(xiàng),輸入新的菜單項(xiàng)。(2)在菜單的空位置上雙擊鼠標(biāo)左鍵, 在其屬性對話框,在標(biāo)題框中輸入“測試(&T)”;(3)選中“保存可見”(Keep Visible)按鈕, 單擊“測試”菜單項(xiàng)下方的空位置,在屬性對話框中,輸入標(biāo)題“對話框(&D)”,在

9、ID框輸入該菜單項(xiàng)的資源標(biāo)識:ID_TEST_DLG,關(guān)閉屬性對話框向應(yīng)用程序中添加并使用對話框(4) 用鼠標(biāo)將新添加的菜單項(xiàng)拖到“查看”和“幫助”菜單項(xiàng)之間。(5)選擇“查看”|“建立類向?qū)А辈藛蚊罨虬碈trl+W快捷鍵, 自動(dòng)切換到Message Maps頁面 從“Class name”列表中選擇CMainFrame, 在IDs列表中選擇ID_TEST_DLG, 在Messages框中選擇COMMAND消息。(6)單擊Add Function按鈕或雙擊COMMAND消息,向應(yīng)用程序中添加并使用對話框(7)單擊OK按鈕, 在“Member functions”列表中將列出新增加的成員函數(shù)。

10、 選擇此函數(shù),單擊Edit Code按鈕(或直接在函數(shù)名雙擊鼠標(biāo)), 在此成員函數(shù)中添加下列代碼: void CMainFrame:OnTestDlg() CFirstDlg dlg;/ 定義對話框類對象dlg.DoModal();/ 顯示對話框向應(yīng)用程序中添加并使用對話框(8)在OnTestDlg函數(shù)的實(shí)現(xiàn)文件MainFrm.cpp的前面添加CFirstDlg類的包含語句,即:#include Ex_SDI.h#include MainFrm.h#include FirstDlg.h(9)編譯并運(yùn)行。 選擇“測試”|“對話框”菜單項(xiàng),這個(gè)對話框就是剛才添加的對話框 向應(yīng)用程序中添加并使用對話

11、框添加和使用對話框 的過程1、添加對話框2、添加控件3、生成對話框類4、添加用戶代碼控件的使用控件的種類 控件的創(chuàng)建方法 在對話框模板中用編輯器指定控件,將對話框看作控件的父窗口。編程方式,即調(diào)用相應(yīng)控件類的成員函數(shù)Create來創(chuàng)建,并在Create函數(shù)指定控件的父窗口指針。靜態(tài)控件和按鈕靜態(tài)控件 用來顯示一個(gè)字符串、框、矩形、圖標(biāo)、位圖或增強(qiáng)的圖元文件。它可以被用來作為標(biāo)簽、框或用來分隔其它的控件。一般不接收用戶輸入,也不產(chǎn)生通知消息。靜態(tài)控件和按鈕按鈕 按鍵按鈕、單選按鈕、復(fù)選框按鈕按鈕的消息 常見只有兩個(gè):BN_CLICKED(單擊) BN_DOUBLE- CLICKED(雙擊) 按鈕

12、選中操作 void SetCheck( int nCheck );int GetCheck( ) const; void CheckRadioButton( int nIDFirstButton, int nIDLastButton, int nIDCheckButton );int GetCheckedRadioButton( int nIDFirstButton, int nIDLastButton );靜態(tài)控件和按鈕實(shí)例:制作問卷調(diào)查(1)創(chuàng)建一個(gè)默認(rèn)的基于對話框應(yīng)用程序。(2)標(biāo)題改為“上網(wǎng)問卷調(diào)查”。(3)刪除“TODO: 在這里設(shè)置對話控制。”控件, 向?qū)υ捒蛑刑砑咏M框(Group

13、)控件,然后調(diào)整其大小和位置。(4)右擊添加的組框控件,選擇“屬性”。 將Caption屬性內(nèi)容由“Static”改成“你的年齡”。靜態(tài)控件和按鈕(5)在組框內(nèi)添加4個(gè)單選按鈕。 ID屬性分別改成: IDC_AGE_L18、IDC_AGE_18T27、IDC_AGE_28T38、IDC_AGE_M38, 將 “標(biāo)題”Caption屬性內(nèi)容改成 “ 38”靜態(tài)控件和按鈕(6) 添加一個(gè)靜態(tài)文本, 標(biāo)題為“你使用的接入方式:”(7)添加4個(gè)單選按鈕, 標(biāo)題分別是 “FTTL或ADSL”、“單位LAN”、 “撥號56K”和“其他”, 將ID屬性改成: IDC_CM_FTTL、IDC_CM_LAN、

14、IDC_CM_56K、IDC_CM_OTHER。靜態(tài)控件和按鈕(8)添加一個(gè)組框 標(biāo)題為“你上網(wǎng)主要是”(9)添加四個(gè)復(fù)選框 標(biāo)題為“收發(fā)郵件”、“瀏覽資料” “聊天游戲”、“其他” ID為: IDC_DO_POP、IDC_DO_READ、 IDC_DO_GAME、IDC_DO_OTHER。靜態(tài)控件和按鈕(10)分別將二個(gè)問題中的第一個(gè)單選按鈕的 Group(組)屬性均選中。(11)工作區(qū)切換到ClassView頁面, 雙擊OnInitDialog函數(shù)名,添加代碼:靜態(tài)控件和按鈕BOOLCEx_ResearchDlg:OnInitDialog()CDialog:OnInitDialog();C

15、heckRadioButton(IDC_AGE_L18, IDC_AGE_M38, IDC_AGE_18T27);CheckRadioButton(IDC_CM_FTTL, IDC_CM_OTHER, IDC_CM_FTTL);CButton* pBtn = (CButton*)GetDlgItem(IDC_DO_POP);pBtn-SetCheck(1);return TRUE; 靜態(tài)控件和按鈕(12)用MFC ClassWizard在CEx_ResearchDlg中添加IDOK的BN_CLICKED消息映射,添加代碼。void CEx_ResearchDlg:OnOK() CString

16、str, strCtrl;str = 你的年齡:;UINT nID = GetCheckedRadioButton ( IDC_AGE_L18, IDC_AGE_M38);GetDlgItemText(nID, strCtrl);str = str + strCtrl;str = str + n你使用的接入方式:;nID = GetCheckedRadioButton ( IDC_CM_FTTL, IDC_CM_OTHER);GetDlgItemText(nID, strCtrl);str = str + strCtrl;str = str + n你上網(wǎng)主要是:n;UINT nCheckIDs

17、4 = IDC_DO_POP, IDC_DO_READ, IDC_DO_GAME, IDC_DO_OTHER;CButton* pBtn;for (int i=0; iGetCheck() ) pBtn-GetWindowText( strCtrl ); str = str + strCtrl; str = str + ; MessageBox( str );CDialog:OnOK();編輯框和旋轉(zhuǎn)按鈕控件 編輯框的屬性和通知消息編輯框和旋轉(zhuǎn)按鈕控件 編輯框的基本操作口令設(shè)置 輸入的字符都被一個(gè)口令字符代替顯示。 默認(rèn)的口令字符是“*”, 應(yīng)用程序可以用成員函數(shù) CEdit:SetPassw

18、ordChar 來定義自己的口令字符, 函數(shù)原型: void SetPasswordChar( TCHAR ch ); 參數(shù)ch表示設(shè)定的口令字符。 編輯框和旋轉(zhuǎn)按鈕控件 選擇文本 成員函數(shù)CEdit:SetSel: 確定編輯框內(nèi)文本的選擇范圍 CEdit:GetSel: 獲取編輯框中當(dāng)前被選擇文本的開始和結(jié)束位置。 CEdit:ReplaceSel: 替換當(dāng)前被選擇的文本。 編輯框和旋轉(zhuǎn)按鈕控件 設(shè)置編輯框的頁面邊距 函數(shù)CEdit:SetMargins實(shí)現(xiàn) 函數(shù)的原型: void SetMargins(UINT nLeft, UINT nRight ); nLeft、nRight:指定左、

19、右邊距的像素大小。獲取多行編輯框文本 使用編輯框CEdit類的相關(guān)成員函數(shù)來獲取文本 GetLineCount():獲取行數(shù) LineLength(行號):獲取某行的長度 GetLine(行號,str,nChars):獲取某行文本編輯框和旋轉(zhuǎn)按鈕控件 例如,顯示編輯框中第二行的文本內(nèi)容:char str100;if (m_Edit.GetLineCount()=2)int nChars;nChars = m_Edit.LineLength(m_Edit.LineIndex(1); m_Edit.GetLine(1,str,nChars);strnChars = 0;MessageBox(str

20、);編輯框和旋轉(zhuǎn)按鈕控件 旋轉(zhuǎn)按鈕控件編輯框和旋轉(zhuǎn)按鈕控件 旋轉(zhuǎn)按鈕控件的基本操作 設(shè)置基數(shù):SetBase( int nBase ); 獲取基數(shù): GetBase() 當(dāng)前位置:int SetPos( int nPos ); 范圍: void SetRange( int nLower, int nUpper ); 旋轉(zhuǎn)按鈕控件的通知消息 UDN_DELTAPOS:在當(dāng)控件的當(dāng)前數(shù)值將要改變時(shí)向其父窗口發(fā)送的消息。編輯框和旋轉(zhuǎn)按鈕控件 實(shí)例:用對話框輸入學(xué)生成績(1)創(chuàng)建一個(gè)默認(rèn)的單文檔應(yīng)用程序Ex_CtrlSDI。(2)添加一個(gè)新的對話框資源 ID號:IDD_INPUT 標(biāo)題:“學(xué)生成績輸入

21、”。 將OK和Cancel按鈕標(biāo)題改為: “確定”和“取消”。(3)將確定和取消移至對話框的下方,然后顯示對話框網(wǎng)格。(4)向?qū)υ捒蛱砑涌丶?,調(diào)整控件的位置,編輯框和旋轉(zhuǎn)按鈕控件 (4) 設(shè)置控件屬性編輯框和旋轉(zhuǎn)按鈕控件 (5)按快捷鍵Ctrl+D, 單擊對話框中的控件,重新設(shè)置控件的Tab鍵次序,以保證旋轉(zhuǎn)按鈕控件的Tab鍵次序在相對應(yīng)的編輯框(伙伴窗口)之后,如圖, 單擊對話框或按Enter鍵結(jié)束Tab Order 方式 編輯框和旋轉(zhuǎn)按鈕控件 (6)雙擊對話框模板空白處,為該對話框模板創(chuàng)建一個(gè)對話框類CInputDlg。(7)在ClassWizard的Member Variables頁面中

22、, 在Class name中選擇了CInputDlg, 選中所需的控件ID號, 雙擊鼠標(biāo)或單擊Add Variables按鈕。 依次為下列控件增加成員變量。 編輯框和旋轉(zhuǎn)按鈕控件 (8)Messsage Maps頁面中,為CInputDlg添加WM_INITDIALOG消息映射, 添加代碼:BOOL CInputDlg:OnInitDialog() CDialog:OnInitDialog();m_spinScore1.SetRange( 0, 100);m_spinScore2.SetRange( 0, 100 );m_spinScore3.SetRange( 0, 100 );return TRUE;編輯框和旋轉(zhuǎn)按鈕控件 (9)為CInputDlg增加IDC_SPIN_S1控件的UDN_DELTAPOS消息映射,添加代碼:void CInp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論