MFC對(duì)話框與組件控件編程.ppt_第1頁
MFC對(duì)話框與組件控件編程.ppt_第2頁
MFC對(duì)話框與組件控件編程.ppt_第3頁
MFC對(duì)話框與組件控件編程.ppt_第4頁
MFC對(duì)話框與組件控件編程.ppt_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、,1,MFC對(duì)話框與組件控件編程,2,1、對(duì)話框編程 2、組件和ActiveX控件的使用,3,1、對(duì)話框編程,工程中加入有模式對(duì)話框 標(biāo)準(zhǔn)控件常用控件 工程中加入無模式對(duì)話框 對(duì)話框中的數(shù)據(jù)交換 使用標(biāo)準(zhǔn)對(duì)話框,4,工程中加入有模式對(duì)話框,對(duì)話框是基于資源的,資源指定其包含的元素和布局。 對(duì)話框包含最基本的窗口元素:控件 一個(gè)從CDialog類派生的MFC類完成和對(duì)話框界面的聯(lián)系,5,有模式對(duì)話框:對(duì)話框關(guān)閉之前,用戶無法在該程序的其它窗口中工作,如記事本中的字體對(duì)話框。 無模式對(duì)話框:對(duì)話框關(guān)閉前,用戶可在其它窗口工作(但對(duì)話框在最頂端),如記事本中的替換對(duì)話框。,6,設(shè)計(jì)對(duì)話框模板 在資源

2、編輯器中插入對(duì)話框模板 在模板中添加所需控件 設(shè)置控件的各種屬性 設(shè)計(jì)對(duì)話框模板時(shí)經(jīng)常使用的工具(如圖釘按鈕,對(duì)齊,統(tǒng)一大?。?guī)劃對(duì)話框中的各種元素,使之美觀大方,使用方便,7,生成對(duì)話框類: ClassWizard生成對(duì)話框類派生類 添加數(shù)據(jù)成員,與控件進(jìn)行交互操作: 用ClassWizard定義一個(gè)與控件相關(guān)聯(lián)的成員變量(可為一控件對(duì)象,也可為一數(shù)據(jù)量),可在構(gòu)造函數(shù)中或OnInnitDialog函數(shù)中進(jìn)行初始化 在程序運(yùn)行中創(chuàng)建一個(gè)MFC控件的窗口對(duì)象,使用GetDlgItem方法為對(duì)話框的控件獲取一個(gè)指向CWnd對(duì)象的指針 接收來自控件的BN_CLICKED等各種消息:用ClassW

3、izard添加消息映射,8,工程中加入有模式對(duì)話框步驟: 使用對(duì)話框編輯器創(chuàng)建對(duì)話框資源,并用ClassWizard生成派生對(duì)話框類,添加數(shù)據(jù)成員和消息映射 特殊控件初始化:程序控制 在視圖中編寫代碼,激活對(duì)話框?qū)ο?CTestDialog dlg; if(dlg.DoModal( )IDOK) (注:在文件頭加上對(duì)話框的頭文件),9,有模式對(duì)話框的運(yùn)行過程: 先創(chuàng)建對(duì)話框類實(shí)例:僅僅是一個(gè)類對(duì)象 調(diào)用DoModal函數(shù) disable原窗口,使原窗口無法接收用戶輸入 創(chuàng)建基于對(duì)話框模板的窗口 建立自己的窗口過程:可進(jìn)行消息處理 WM_INITDIALOG消息觸發(fā)調(diào)用OnInitDialog,

4、進(jìn)行一些對(duì)話框初始化工作 CWnd:UpdateData(FALSE) DoDataExchage,10,有模式對(duì)話框的運(yùn)行過程: 用戶輸入數(shù)據(jù)或進(jìn)行其他消息處理操作 用戶單擊OK按鈕 OnOK UpdateData(TRUE)從控件傳到數(shù)據(jù)成員 DoDataExchage Cdialog:EndDialog(IDOK),11,處理關(guān)于在使用對(duì)話框時(shí)Enter鍵和Escape鍵的處理: 在使用對(duì)話框是你會(huì)發(fā)現(xiàn)當(dāng)你按下Enter鍵或Escape鍵都會(huì)退出對(duì)話框,這是因?yàn)镋nter鍵會(huì)引起CDialog:OnOK()的調(diào)用,而Escape鍵會(huì)引起CDialog:OnCancel()的調(diào)用。而這兩個(gè)

5、調(diào)用都會(huì)引起對(duì)話框的退出。 在MFC中這兩個(gè)成員函數(shù)都是虛擬函數(shù),所以我們需要進(jìn)行重載,如果我們不希望退出對(duì)話框那么我們可以在函數(shù)中什么都不做。如果需要進(jìn)行檢查則可以添加檢查代碼,然后調(diào)用父類的OnOK()或OnCancel()。,12,在對(duì)話框中繪圖:重載OnPaint函數(shù) void CTestDialog:OnPaint() CPaintDC dc(this); COLORREF color=RGB(255,0,0); CPen pen(PS_SOLID,10, color); CPen* pOldPen=dc.SelectObject( ,13,標(biāo)準(zhǔn)控件常用控件,信息顯示控件:如靜態(tài)文本

6、、圖形、樹狀、列表框等,用于向用戶顯示數(shù)據(jù) 信息請(qǐng)求控件:按鈕、樹狀、列表框等,使用戶能從應(yīng)用程序中獲取信息 信息修改控件:編輯框、單選按鈕、復(fù)選框等,使用戶能夠修改應(yīng)用程序的數(shù)據(jù),14,標(biāo)準(zhǔn)控件(基本控件): 圖形控件 靜態(tài)文本編輯框 分組框 按鈕復(fù)選框 單選按鈕 組合框列表框 橫向滾動(dòng)條 縱向滾動(dòng)條,15,常用控件: 微調(diào)控件進(jìn)程指示器滑塊 熱鍵 列表控件 樹狀控件 選項(xiàng)卡控件 動(dòng)畫控件 月歷 多信息文本編輯控件IP地址控件 日期/時(shí)間調(diào)節(jié)器擴(kuò)展組合框,16,標(biāo)準(zhǔn)控件和常用控件在MFC中都有對(duì)應(yīng)的類,從CWnd類派生出來的,都具有窗口的屬性,17,控件不但可以在對(duì)話框模板中設(shè)計(jì)并顯示,也可

7、以脫離對(duì)話框存在 簡單的控件直接在對(duì)話框中設(shè)計(jì)并簡單映射成員變量和消息即可很好的使用 復(fù)雜的控件可以由GetDlgItem返回指向控件的類指針,通過該指針可以對(duì)該控件進(jìn)行程序運(yùn)行時(shí)操作 也可以通過這種方法運(yùn)行時(shí)增加控件,18,通用窗口(CWnd)的一些用法 改變窗口狀態(tài): EnableWindowIsWindowEnabled設(shè)置查詢窗口的禁止/允許狀態(tài) ModifyStyleModifyStyleEx 修改窗口風(fēng)格 IsWindowVisible 可以檢查窗口是否被顯示 ShowWindow; (SW_HIDE,SW_SHOW等) 改變窗口位置 MoveWindow/GetWindowRec

8、t/IsIconic/SetWindowPos 使窗口失效,印發(fā)重繪 Invalidate/InvalidateRect,19,通用窗口的一些用法 窗口查找: FindWindow/IsChild/GetParent/GetDlgItem/ GetDlgCtrlID/WindowFromPoint 可以利用重載來添加消息處理的虛函數(shù) OnCreate/OnDestroy;窗口被創(chuàng)建/銷毀時(shí)被調(diào)用 OnGetMinMaxInfo需要得到窗口尺寸時(shí)被調(diào)用 OnSize窗口改變大小后被調(diào)用 OnMove窗口被移動(dòng)后時(shí)被調(diào)用 OnPaint( ); OnChar/OnKeyDown/OnKeyUp鍵盤

9、字符消息 OnLButtonDown/OnRButtonDown/OnLButtonUp/OnRButtonUp/OnLButtonDblClk/OnRButtonDblClk/OnMouseMove鼠標(biāo)消息,20,工程中加入無模式對(duì)話框,工程中加入無模式對(duì)話框步驟: 1)利用資源編輯器和ClassWizard創(chuàng)建對(duì)話框模板和對(duì)話框類 2)調(diào)用CDialog的缺省構(gòu)造函數(shù)構(gòu)造對(duì)象,可以將父窗口指針保存,用于發(fā)送消息 3)調(diào)用CDialog:Create(IDD)創(chuàng)建對(duì)話框窗口 if(pDlg-m_hWnd=NULL) pDlg-Create(IDD_TESTDIALOG); pDlg-Show

10、Window(SW_SHOW);,21,無模式對(duì)話框也可由函數(shù)ShowWindow 顯示和隱藏,而不直接銷毀窗口: pDlg-ShowWindow(SW_SHOW); pDlg-ShowWindow(SW_HIDE);,22,自定義消息: #define WM_GOODBYE WM_USER+5 手工加入消息映射 可以通過向視圖發(fā)送用戶定義的消息處處理按鈕消息。 SendMessage(WM_GOODBYE) PostMessage(WM_GOODBYE) 觸發(fā)由消息映射定義的消息處理函數(shù)。 消息是誰發(fā)送誰接收。,23,對(duì)話框中的數(shù)據(jù)交換,標(biāo)準(zhǔn)DDX (動(dòng)態(tài)數(shù)據(jù)交換) DDX_Text(pDX

11、,IDC_EDIT1,m_number); UpdateData用于保持所有DDX關(guān)聯(lián)的同步 UpdateData(TRUE):數(shù)據(jù)從控件傳遞給相關(guān)聯(lián)的成員變量 UpdateData(FALSE):數(shù)據(jù)從成員變量傳遞給相關(guān)聯(lián)的控件,24,標(biāo)準(zhǔn)DDV (動(dòng)態(tài)數(shù)據(jù)驗(yàn)證) DDV_MinMaxInt(pDX,m_number,1,200); 在給控件添加成員變量時(shí)可設(shè)置改變量的大小范圍 也可在DoDataExchange中修改范圍 它只能簡單的設(shè)置,復(fù)雜的數(shù)據(jù)有效判斷需編程實(shí)現(xiàn),25,使用標(biāo)準(zhǔn)對(duì)話框,常用標(biāo)準(zhǔn)對(duì)話框 CColorDialog CFileDialog CFindReplaceDialo

12、g CPageSetupDialog CFontDialog CPrintDialog 等等,26,直接使用標(biāo)準(zhǔn)對(duì)話框類,如CFontDialog CFontDialog dlg; if(dlg.DoModal()=IDOK) LOGFONT lplf; dlg.GetCurrentFont( ,27,從標(biāo)準(zhǔn)對(duì)話框類中派生出新類 先從CDialog類派生出基于模板的對(duì)話框類,手工修改將基類變?yōu)镃FileDialog,并修改構(gòu)造函數(shù): m_ofn.Flags |= OFN_ENABLETEMPLATE; m_ofn.lpTemplateName=MAKEINTRESOURCE (IDD_SPEC

13、IALFILEDIALOG); 該類有CFileDialog的功能,也可加入自己定義的功能 控件由特殊的資源ID號(hào)得到,28,小結(jié),常用控件有那些?對(duì)應(yīng)MFC的哪一些類? 有模式對(duì)話框的創(chuàng)建使用? 無模式對(duì)話框的創(chuàng)建使用? 常用對(duì)話框有那些?,29,2、組件和ActiveX控件使用,組件和控件 組件使用 ActiveX控件使用,30,組件和控件,可重復(fù)使用的C+類: 代碼準(zhǔn)確,效率高 完整 封裝性好 使用方便 Component Gallery就是一些微軟所提供的可重復(fù)使用的C+類集,不一定是窗口,31,組件和控件,普通控件(標(biāo)準(zhǔn)控件和常用控件) 都是子窗口(經(jīng)常在對(duì)話框中使用) 通過MFC類

14、對(duì)象操控 客戶程序負(fù)責(zé)創(chuàng)建控件的子窗口 控件向父窗口發(fā)送標(biāo)準(zhǔn)窗口消息(BN_CLICKED) 父窗口通過調(diào)用對(duì)應(yīng)控件的C+類的成員函數(shù)操作控件,32,ActiveX控件 屬性和方法 屬性具有符號(hào)名字(可以匹配到整型索引)和類型 方法與函數(shù)非常相似 不是向控件容器發(fā)送WM_通知消息,而是“觸發(fā)”事件入單擊事件 常用動(dòng)態(tài)連接庫存放,但其擴(kuò)展名是OCX ActiveX 控件實(shí)質(zhì)上也是一個(gè)DLL,只不過它需要滿足COM規(guī)范,并需要提供一些ActiveX控件所需要的接口,33,組件使用,加入組件: Project-AddtoProject-Components and Controls-Visual C

15、+ Components-Splash screen VC+ IDE將自動(dòng)加入一些代碼: 在CEx06aApp和CMainFrame類中 重新編譯連接即可 有時(shí)需要加入一些代碼或?qū)ζ渲械囊恍﹨?shù)代碼進(jìn)行修改滿足應(yīng)用程序的需要,34,ActiveX控件編程,ActiveX控件相當(dāng)于一個(gè)封裝完好的C+類 Property(屬性):相當(dāng)于C+類的成員變量 Method (方法) :相當(dāng)于C+類的成員函數(shù) Event (事件) :相當(dāng)于Windows控件發(fā)出的notification消息,送給父窗口,通常是對(duì)話框,35,安裝新ActiveX控件: 拷貝相關(guān)文件到系統(tǒng)目錄下(*.ocx,*.hlp,*.

16、lic) 運(yùn)行Regsvr32 注冊(cè) 將想要的控件加到項(xiàng)目中:AddtoProject得到控件的C+包裝類 在對(duì)話框模板中加入控件,設(shè)置屬性,加入事件函數(shù); 或者在某個(gè)類中手工加入控件類,控件資源號(hào),程序設(shè)置屬性,手工加入事件函數(shù),36,加入Windows Media Player控件: Project-Add to Project-Compotents and Controls-Registed ActiveX Control- Windows Media Player 在非對(duì)話框窗口中使用: 在類聲明一串口控件類實(shí)例,由View-Resouce Symbol添加一個(gè)新資源號(hào) 在查看類OnC

17、reate中創(chuàng)建控件并初始化: m_MediaPlayer.Create(My MediaPlay,WS_VISIBLE,CRect(0,0,400,350),this,ID_ADDMEDIAPLAYINVIEW); 接著可進(jìn)行初始化:相當(dāng)于在對(duì)話框模板中設(shè)置屬性,37,可通過該對(duì)象調(diào)用相關(guān)的函數(shù): m_MediaPlayer.Open(PathName),38,可手工加入事件映射(類似于消息映射),如不知道具體參數(shù),可參考ClassWizard: /View類頭文件中加入 afx_msg void OnEndOfStreamMediaplayer1(long Result); DECLARE_EVENTSINK_MAP() /View類實(shí)現(xiàn)文件中加入 BEGIN_EVENTSINK_MAP(CEx06aView, CView) ON_EVENT(CEx06aView, ID_ADDMEDIAPLAYINVIEW, 3002

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論