C++課程設(shè)計(jì)MFC市公開課獲獎?wù)n件_第1頁
C++課程設(shè)計(jì)MFC市公開課獲獎?wù)n件_第2頁
C++課程設(shè)計(jì)MFC市公開課獲獎?wù)n件_第3頁
C++課程設(shè)計(jì)MFC市公開課獲獎?wù)n件_第4頁
C++課程設(shè)計(jì)MFC市公開課獲獎?wù)n件_第5頁
已閱讀5頁,還剩143頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C+課程設(shè)計(jì)內(nèi)容及要求1第1頁第1頁主要內(nèi)容課程設(shè)計(jì)基本要求Windows 編程基礎(chǔ)什么是C+MFC什么是MFC編程MFC應(yīng)用程序開發(fā)流程單文檔【ClassView】面板登錄對話框與單文檔視圖聯(lián)接單文檔中菜單項(xiàng)與對話框聯(lián)接實(shí)例簡介2第2頁第2頁一、課程設(shè)計(jì)基本要求自學(xué)MFC(2學(xué)時)知識擴(kuò)充C+:理解并掌握MFC程序結(jié)構(gòu)、消息映射機(jī)制、MFC類庫中慣用類(對話框、各種慣用控件)。軟件開發(fā)基本知識結(jié)合設(shè)計(jì)任務(wù)清楚軟件開發(fā)基本流程、各個階段目的和主要工作。上機(jī)調(diào)試程序(30學(xué)時)其它(14學(xué)時)程序調(diào)試基本辦法和論文撰寫要求(2學(xué)時)掌握調(diào)試程序辦法與技巧。清楚論文組織結(jié)構(gòu)、格式編排等相關(guān)知識學(xué)生

2、資料查閱與自主學(xué)習(xí)(2學(xué)時)代碼編寫(10學(xué)時)3第3頁第3頁二、Windows 編程基礎(chǔ)Windows 編程就是基于Windows 應(yīng)用程序。2種主要Windows應(yīng)用程序基于對話框應(yīng)用程序基于文檔/視圖結(jié)構(gòu)應(yīng)用程序主要特點(diǎn)含有原則圖形用戶界面含有與硬件無關(guān)特性采用“消息傳遞,事件驅(qū)動”運(yùn)營機(jī)制,即依據(jù)Windows發(fā)送消息來處理用戶輸入編寫Windows應(yīng)用程序主要辦法(2種)使用Windows提供應(yīng)用程序接口(API)函數(shù)使用Microsoft提供微軟基礎(chǔ)類(MFC)4第4頁第4頁三、什么是C+MFCMFC(Microsoft Foundation Class Library,基礎(chǔ)類庫)

3、 是微軟提供用來編寫Windows應(yīng)用程序C+類庫;封裝了API(Windows接口函數(shù)),是Win API與C+結(jié)合。MFC大約有200多個類,封裝了Windows大部分編程對象以及與它們相關(guān)操作。即它由幾百個執(zhí)行文獻(xiàn)和源代碼文獻(xiàn)構(gòu)成。 注意C+和VC+區(qū)別C+是一個程序設(shè)計(jì)語言,是一個大家都認(rèn)可軟件編制通用規(guī)范,即C+是一套語法規(guī)則名字,類似漢語,英語。 VC+是一個軟件IDE(編譯、編輯、調(diào)試 )集成開發(fā)環(huán)境 MFC是一個非外掛式軟件包,類庫, MFC類是微軟為VC+專配。5第5頁第5頁四、什么是MFC編程MFC編程指就是使用VC+進(jìn)行開發(fā),并且是在使用VC+提供各種向?qū)闆r下MFC編程

4、。在VC+中能夠創(chuàng)建3類典型Windows應(yīng)用程序基于對話框應(yīng)用程序單文檔界面(SDI)應(yīng)用程序多文檔界面(MDI)應(yīng)用程序文檔/視圖文檔對象:用來保留數(shù)據(jù)。視圖對象:用來顯示和編輯數(shù)據(jù)。 6第6頁第6頁五、MFC應(yīng)用程序開發(fā)流程應(yīng)用程序編程基本環(huán)節(jié):(1)依據(jù)應(yīng)用程序特性在MFC AppWizardexe應(yīng)用程序中選擇適當(dāng)應(yīng)用程序框架。(2)利用資源編輯器編輯資源,如菜單等。(3)利用類向?qū)В–lassWizard)或手工添加類、組員變量、組員函數(shù)申明。(4)編寫詳細(xì)組員函數(shù)代碼。(5)編譯、鏈接程序檢查程序中是否存在語法錯誤。(6)調(diào)試應(yīng)用程序。7第7頁第7頁六、單文檔【ClassView

5、】面板CAboutDlg(關(guān)于對話框類)管理關(guān)于對話框。CFrameWnd( 框架窗口類)CWxling_27App(應(yīng)用程序類)用來處理消息。CWxling_27Doc (文檔類)MFC中數(shù)據(jù)是存儲在類文檔中。文檔類負(fù)責(zé)管理和維護(hù)數(shù)據(jù)本身。CWxling_27View(視圖類)結(jié)果顯示是在視圖類中。視圖類負(fù)責(zé)處理用戶鼠標(biāo)和鍵盤操作。8第8頁第8頁七、登錄對話框與單文檔視圖聯(lián)接新建單文檔工程:TEXT(注意此名由設(shè)計(jì)者自己任?。?;在ResourceView, 單擊Insert Dialog,插入一對話框IDD_DIALOG1(默認(rèn)ID號);右鍵選中新建對話框,利用類向?qū)Ы⒁粋€新類Create

6、 a new class,名稱為:Cdlg_login ;在MainFrm.cpp文獻(xiàn)前面,語句#include “MainFrm.h”后面添加新類頭文獻(xiàn):#include dlg_login.h 在FileView中點(diǎn)擊source files,雙擊MainFrm.cpp。找到:CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct),這是窗體框架創(chuàng)建函數(shù)。在該函數(shù)后面(在return 0 ;前面)加入語句(注意大小寫):Cdlg_login dlg; /定義一個登錄對話框?qū)ο骴lgdlg.DoModal(); /讓對話框?qū)ο笠杂心J叫问斤@示出來此

7、時對話框與單文檔聯(lián)接完畢。下載“格式工廠3.011”將自己照片轉(zhuǎn)換成BMP格式,通過插入Bitmap命令,將照片引入至資源中,并添加至對話框中。9第9頁第9頁七續(xù)、登錄對話框退出按鈕代碼/擬定按鈕void CDlg_login:OnOK() / TODO: Add extra validation herethis-UpdateData(true);if(this-m_name=wxl & this-m_paw=1234)CDialog:OnOK();else MessageBox(登錄有誤);ExitProcess(0); /退出/CDialog:OnOK();/取消按鈕void CDlg_

8、login:OnCancel() / TODO: Add extra cleanup hereExitProcess(0); /退出10第10頁第10頁八、單文檔中菜單項(xiàng)與對話框聯(lián)接新建單文檔工程:Ys1(注意此名由設(shè)計(jì)者自己任取);在ResourceView, 單擊Insert Dialog,插入一對話框IDD_DIALOG1(默認(rèn)ID號);右鍵選中新建對話框,利用類向?qū)Ы⒁粋€新類Create a new class,名稱為:Cdlg_jc(自己命名) ,如右圖1所表示;在/ Ys1View.cpp :文獻(xiàn)中語句#include Ys1View.h后面添加新類頭文獻(xiàn):#include dl

9、g_jc.h 編輯主菜單如圖2所表示:在主菜下通過“建立類向?qū)А泵?,從“Class name”組合框中選擇CYs1View,如圖3,4所表示,并在函數(shù)OnJc()編寫代碼下列:void CYs1View:OnJc() / TODO: Add your command handler code here Cdlg_jc jc; /定義一個求階層對話框?qū)ο骿cjc.DoModal(); /讓對話框?qū)ο笠杂心J叫问斤@示出來此時單文檔菜單項(xiàng)與對話框聯(lián)接完畢。11第11頁第11頁1.求階層按鈕代碼使用MFC進(jìn)行程序設(shè)計(jì)時,如輸出結(jié)果是單值,可用下列代碼作為模板:void Cdlg_jc:OnOK()

10、/ TODO: Add extra validation hereUpdateData(TRUE); /更新控件值 double i,jsz=1.0;for(i=1;i=m_srs;i+)jsz*=i; /求階乘 m_jsz.Format ( %f ,jsz); /將雙精度型轉(zhuǎn)換為字符,f 相應(yīng)浮點(diǎn)數(shù)/其中m_jsz為輸出編輯框組員變量名UpdateData(FALSE); /控件值更新編輯框顯示/CDialog:OnOK();12第12頁第12頁/續(xù)上for(i=a;i=b;i+) for(j=2;jTextOut(x,y,s); /在指定位置輸出文本 else pDC-TextOut(x,

11、y,s); /在指定位置輸出文本x=x+30; 2.求素?cái)?shù)按鈕代碼void Cdlg_zss:OnOK() / TODO: Add extra validation hereUpdateData(TRUE); /更新控件值 CDC *pDC=GetDC();/獲取視圖初始客戶區(qū)DC/DC表示設(shè)備環(huán)境int a=m_szqz;int b=m_szzz;int i,j,n=0;int x=70,y=220;CString s;if(bMoveTo(100,100);pDC-LineTo(300,500);15第15頁第15頁4.單文檔菜單項(xiàng)中畫矩形代碼菜單項(xiàng)“畫矩形”按鈕代碼:void CWxli

12、ng_28View:OnHjx() / TODO: Add your command handler code hereCClientDC dc(this);CPen pen; /定義畫筆/創(chuàng)建紅色3號粗細(xì)實(shí)線畫筆pen.CreatePen(PS_SOLID,3,RGB(255,0,0);CPen *oldpen=dc.SelectObject(&pen);CBrush brush; /定義畫刷/創(chuàng)建綠色畫刷brush.CreateHatchBrush(HS_CROSS,RGB(0,255,0);dc.SelectObject(&brush);dc.Rectangle(300,300,400,

13、500); /畫矩形16第16頁第16頁5.單文檔菜單項(xiàng)中畫橢圓代碼菜單項(xiàng)“畫橢圓”按鈕代碼:void CWxling_28View:OnHty() / TODO: Add your command handler code hereCClientDC dc(this);CPen pen; /設(shè)置畫筆pen.CreatePen(PS_SOLID,3,RGB(0,255,0);CPen *oldpen=dc.SelectObject(&pen);dc.Ellipse(300,100,600,300); /畫橢圓/*(int x1,int y1,int x2,int y2)(x1,y1)和(x2,

14、y2)表示所畫橢圓外切矩形左上角和右下角坐標(biāo)*/17第17頁第17頁6.單文檔菜單項(xiàng)中畫sin曲線代碼在/ Wxl_30View. cpp中加入頭文獻(xiàn): #include math.h“菜單項(xiàng)“畫sin曲線”按鈕代碼:void CWxl_30View:OnSin() / TODO: Add your command handler code hereCClientDC dc(this);CRect rect; /定義矩形對象GetClientRect(rect);int x0=rect.Width()/2;int y0=rect.Height()/2;dc.MoveTo(20,y0);dc.L

15、ineTo(rect.Width()-20,y0);dc.MoveTo(x0,20);dc.LineTo(x0,rect.Height()-20);double setp=3.14159/100;for(int i=-200;imessage = WM_KEYDOWN) /鍵盤消息 if(pMsg - wParam = VK_ESCAPE) /鍵盤上Esc鍵return TRUE; if(pMsg - wParam = VK_RETURN) /鍵盤上回車鍵return TRUE;return CDialog:PreTranslateMessage(pMsg);22第22頁第22頁8.常見問題處

16、理辦法建好MFC之后(基于對話框),然后點(diǎn)擊Insert-New Class彈出對話框之后,Class Type:MFC Class在Base Class:CRecordset類,點(diǎn)擊Ok時候,會彈出要你添加數(shù)據(jù)庫對話框你就能夠添加了。 (9)如何為MFC 應(yīng)用程序添加ODBC 功效? (1)在文獻(xiàn)Stdafx.h 文獻(xiàn)末尾添加下面一行: #include / MFC ODBC database classes (2)在文本模式下編輯RC 文獻(xiàn)(利用File-Open As text 方式) 在下面程序行(共有兩處) #include l.chsafxprint.rc / printing/p

17、rint preview resources 添加下一行: #include l.chsafxdb.rc / Database resources 23第23頁第23頁9.特殊效果(1)如何給MFC單文檔添加背景?為CTestView類添加一個變量CBrush m_brushBackground; /定義畫刷用于畫背景在CTestView結(jié)構(gòu)函數(shù)中加入下列代碼CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP1); /加載位圖m_brushBackground.CreatePatternBrush(&bmp); /創(chuàng)建位圖畫刷在OnDraw函數(shù)中畫出來代碼下列CRect

18、 rect;GetClientRect(rect); /取得客戶區(qū)域pDC-FillRect(rect,&m_brushBackground); /用背景畫刷填充區(qū)域?yàn)榱吮苊獗尘伴W爍,使顯示更完美,添加WM_ERASEBKGND消息處理函數(shù),并取消調(diào)用父類處理函數(shù),代碼下列BOOL CTestView:OnEraseBkgnd(CDC* pDC) return TRUE; 編譯運(yùn)營該程序!24第24頁第24頁9.特殊效果(2)在工程調(diào)用其它可執(zhí)行文獻(xiàn)(.EXE)在w1View.cpp :中加入頭文獻(xiàn):#include windows.h 在編輯好菜單項(xiàng)中編寫代碼下列void CW1View:O

19、nWord() / TODO: Add your command handler code hereWinExec(CLOCKYS.exe,NULL); /調(diào)用可執(zhí)行文獻(xiàn)注意:將可執(zhí)行文獻(xiàn)拷貝至本工程所在文獻(xiàn)夾下,不然要獲取文獻(xiàn)路徑。若要打開其它類型文獻(xiàn),見本片下面?zhèn)渥ⅰ?5第25頁第25頁9.特殊效果(3)在工程調(diào)用其它任意文獻(xiàn)菜單項(xiàng)按鈕代碼void CW12View:OnYy() / TODO: Add your command handler code hereCString path; /返回文獻(xiàn)所在路徑,含該文獻(xiàn)名GetModuleFileName(NULL, /要獲取文獻(xiàn)名模塊句柄

20、(見備注),null表示當(dāng)前模塊 path.GetBufferSetLength(MAX_PATH+1), /存儲取得文獻(xiàn)名MAX_PATH /存儲取得文獻(xiàn)名參數(shù)長度); path.ReleaseBuffer(); /字符串緩沖區(qū)長度鎖定解除 int pos = path.ReverseFind(); /從后向前查找 path = path.Left(pos)path = path.Left(pos); /取左,參數(shù)為字符串個數(shù)/MessageBox(path); /調(diào)試程序時用來顯示查找到當(dāng)前運(yùn)營程序所在目錄 ShellExecute(NULL,open,path+年C+課程設(shè)計(jì)任務(wù)書wxl

21、.doc,NULL,NULL, SW_SHOWNORMAL);26第26頁第26頁9.特殊效果(4)僅修改工程中某個對話框圖標(biāo)對相應(yīng)對話框添加初始化函數(shù)OnInitDialog(),并添加下列代碼:BOOL Cdlg_login:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization hereHICON m_hIcon;/IDR_ICON1為圖標(biāo)資源名 m_hIcon = AfxGetApp()-LoadIcon(IDI_ICON1);SetIcon(m_hIcon, TRUE); / Set big ico

22、nSetIcon(m_hIcon, FALSE); / Set small iconreturn TRUE; / return TRUE unless you set the focus to a control/ EXCEPTION: OCX Property Pages should return FALSE27第27頁第27頁9.特殊效果如何去掉單文檔界面中主框架“無標(biāo)題”?修改IDR_MAINFRAME字符串資源中第2個參數(shù)(共有7個參數(shù)),分別以n結(jié)束,即下列格式:nnnnnnn例,將主框架標(biāo)題改為”我應(yīng)用程序”28第28頁第28頁在程序中使用對話框 (4) 用鼠標(biāo)將新添加菜單項(xiàng)拖到

23、“查看”和“幫助”菜單項(xiàng) 之間,結(jié)果如圖所表示。 菜單項(xiàng)“對話框”拖放后位置(5) 選擇“查看”“建立類向?qū)А辈藛蚊罨蛑苯影碈trl+W快捷鍵,則出現(xiàn)MFC ClassWizard對話框,該對話框會自動切換到Message Maps頁面。(6) 從“Class name”組合框中選擇CMainFrame,在Object Ids列表中選擇ID_TEST_DLG,然后在Messages框中選擇COMMAND消息。 29第29頁第29頁在程序中使用對話框 (7) 單擊Add Function按鈕或雙擊COMMAND消息,出現(xiàn)“Add Member Function”對話框以輸入組員函數(shù)名稱。系統(tǒng)默

24、認(rèn)函數(shù)名為OnTestDlg,如圖所表示。該函數(shù)是對菜單項(xiàng)ID_TEST_DLG映射,也就是說,當(dāng)在應(yīng)用程序運(yùn)營時,用戶選擇“對話框”,則該函數(shù)OnTestDlg被調(diào)用,執(zhí)行函數(shù)中代碼。 30第30頁第30頁在程序中使用對話框 單擊OK按鈕,在ClassWizard“Member functions”列表中將列出新增長組員函數(shù)。選擇此函數(shù),單擊Edit Code按鈕(或直接在函數(shù)名雙擊鼠標(biāo)),在此組員函數(shù)中添加下列代碼:void CMainFrame:OnTestDlg() CFirstDlg dlg;/ 定義對話框類對象 dlg.DoModal();/ 顯示對話框 代碼中,DoModal是C

25、Dialog基類組員函數(shù),它是用來顯示和終止模式對話框。31第31頁第31頁在程序中使用對話框 在OnTestDlg函數(shù)實(shí)現(xiàn)文獻(xiàn)MainFrm.cpp前面添加CFirstDlg類頭文獻(xiàn)包括,即:#include Ex_SDI.h#include MainFrm.h#include FirstDlg.h“(10) 編譯并運(yùn)營。在應(yīng)用程序菜單上,選擇“測試” “對話框”菜單項(xiàng),將出現(xiàn)如圖對話框,這個對話框就是剛才添加對話框。 32第32頁第32頁幾種常見幾何圖形繪制。利用MFC AppWizard建立一個SDI應(yīng)用程序,在OnDraw()函數(shù)中添加下列程序代碼: void CMyGraphView

26、:OnDraw(CDC* pDC)CTexthtDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here for(int xPos=20;xPosSetPixel(xPos,30,RGB(0,0,0); / 繪制像素點(diǎn) POINT polylpt5=10,100,50,60,120,80,80,150,30,130; pDC-Polyline(polylpt,5); / 繪制4條折線 POINT polybpt4=150,160,220,60,300,180, 330,20;

27、pDC-PolyBezier(polybpt,4); / 繪制貝塞爾曲線 CBrush *pBrhOld; pBrhOld=(CBrush*)pDC-SelectStockObject( LTGRAY_BRUSH); / 使用淺灰色堆畫刷 pDC-RoundRect(400,30,550,100,20,20); / 繪制圓角矩形 pDC-Arc(20,200,200,300,200,250,20,200); / 繪制橢圓弧 pDC-Pie(220,200,400,380,380,270,240,220); / 繪制扇形 pDC-Chord(420,120,540,240,520,160,420

28、,180); / 繪制弦形 POINT polygpt5=450,200,530,220,560,300,480,320,430,280; pDC-Polygon(polygpt,5); / 繪制五邊形 pDC-SelectObject(pBrhOld); / 恢復(fù)系統(tǒng)默認(rèn)畫刷33第33頁第33頁繪制效果34第34頁第34頁九、實(shí)例簡介實(shí)例1靜態(tài)控件使用實(shí)例2編輯框應(yīng)用實(shí)例3單選鈕應(yīng)用程序?qū)嵗?簡易時鐘應(yīng)用程序?qū)嵗?計(jì)算器應(yīng)用程序?qū)嵗?調(diào)用自定義對話框?qū)嵗?數(shù)據(jù)庫編程實(shí)例返回目錄35第35頁第35頁實(shí)例1靜態(tài)控件使用創(chuàng)建環(huán)節(jié):建立基于對話框MFC應(yīng)用程序框架;設(shè)置對話放置控件;在菜單或工具欄空

29、白處,單擊右鍵,彈出控件工具欄,再選擇所需控件;設(shè)置控件屬性;調(diào)試程序36第36頁第36頁環(huán)節(jié)1:建立基于對話框應(yīng)用程序框架(1)創(chuàng)建工程:TEST137第37頁第37頁環(huán)節(jié)2、3:放置控件;調(diào)試程序(1)刪除既有控件(2)設(shè)置對話框標(biāo)題利用“屬性”設(shè)置(3)添加組框設(shè)置屬性(4)添加靜態(tài)文本框設(shè)置屬性(5)添加圖片單擊“插入/資源”命令,通過菜單引入:(位圖(BMP或DIB)、圖標(biāo)(Icon)、圖元文獻(xiàn)(wMF )圖片控件屬性對對話框中類型、圖像進(jìn)行設(shè)置控件屬性控件ID號標(biāo)題作用對話框默認(rèn)靜態(tài)控件使用用戶視圖組框默認(rèn)示例將一組相關(guān)控件框起來圖片默認(rèn)點(diǎn)綴靜態(tài)文本默認(rèn)同窗們好!顯示文本信息返回實(shí)

30、例38第38頁第38頁特殊效果對話框中設(shè)置靜態(tài)文本框字體及顏色操作環(huán)節(jié):1. 添加對話框類申明中字體和顏色變量 class CDHKDlg : public CDialog/ Constructionpublic:CFont m_myFont; / 字體對象 COLORREF m_myColor; / 顏色對象.2. 在對話框初始化函數(shù)OnInitDialog()中對字體和顏色進(jìn)行初始化m_myFont.CreatePointFont(150, _T(“華文彩云”); /150是字體大小m_myColor = RGB(255, 0, 255);39第39頁第39頁續(xù)上:3. 為對話框類添加WM

31、_CTLCOLOR消息響應(yīng)函數(shù),并在其消息響應(yīng)函數(shù)OnCtlColor()中添加代碼/ 消息響應(yīng)函數(shù)實(shí)現(xiàn) HBRUSH CDHKDlg:OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor )HBRUSH hbr = CDialog:OnCtlColor(pDC, pWnd, nCtlColor); / TODO: Change any attributes of the DC here (在此更改 DC 任何屬性) if(pWnd-GetDlgCtrlID()=IDC_STATIC_1) pDC-SelectObject(&m_myFont); /

32、 設(shè)置字體 pDC-SetTextColor(m_myColor); / 設(shè)置顏色 / TODO: Return a different brush if the default is not desired(假如默認(rèn)不是所需畫筆,則返回另一個畫筆 )return hbr; 40第40頁第40頁實(shí)例2編輯框應(yīng)用創(chuàng)建環(huán)節(jié):建立基于對話框MFC應(yīng)用程序框架;設(shè)置對話放置控件;設(shè)置控件屬性;為控件連接變量,即為控件命名;添加并且編寫消息處理函數(shù);調(diào)試程序。41第41頁第41頁環(huán)節(jié)1,2:建立框架、添加控件控件屬性控件ID號標(biāo)題變量類型連接變量范圍 尤其屬性對話框默認(rèn)編輯框應(yīng)用組框默認(rèn)成績計(jì)算靜態(tài)文本

33、框默認(rèn)數(shù)學(xué)靜態(tài)文本框默認(rèn)語文靜態(tài)文本框默認(rèn)英語靜態(tài)文本框默認(rèn)平均分 擴(kuò)展樣式靜態(tài)文本框IDC_AVERAGECstringm_avg編輯框IDC_SXintm_sx0100編輯框IDC_YWintm_yw0100編輯框IDC_YYintm_yy0100按鈕IDC_JS計(jì)算平均分按鈕IDC_OK退出(1)創(chuàng)建工程:TEST2(2)添加控件,并設(shè)置控件相關(guān)屬性42第42頁第42頁環(huán)節(jié)3:連接變量(1)單擊“建立類向?qū)А泵睿瑔宇愊驅(qū)?;?)選擇“組員變量”選取項(xiàng)卡,連接變量;(3)結(jié)果如右圖所表示43第43頁第43頁BOOL CTEST2Dlg:OnInitDialog() CDialog:On

34、InitDialog(); / Add About. menu item to system menu.m_avg=0.0;UpdateData(FALSE);/省略環(huán)節(jié)4:進(jìn)行消息映射(1)初始化對話框(是程序運(yùn)營時開始狀態(tài)設(shè)定)進(jìn)入ClassWiZard(類向?qū)В?,Message Maps,在Object IDs里選擇要添加OnInitDialog()函數(shù)對話框類,在Messages里選擇WM_INITDIALOG,單擊Add Function(增長函數(shù)),此時對話框類就新增了一個函數(shù)是OnInitDialog()。(2)編輯初始化代碼:44第44頁第44頁void CTEST2Dlg:O

35、nJs() / TODO: Add your control notification handler code hereUpdateData(TRUE); /更新控件值 double avg=double(m_sx+m_yw+m_yy)/3.0;m_avg.Format (%6.2f,avg);UpdateData(FALSE); /控件值更新編輯框顯示環(huán)節(jié)5:編寫代碼_對“計(jì)算平均分”按鈕(1)雙擊“計(jì)算平均分”按鈕,為IDC_JS添加BN_CLICKED消息映射:(2)編寫代碼。45第45頁第45頁環(huán)節(jié)6:編寫代碼_對“退出”按鈕(1)雙擊“退出”按鈕,為IDC_OK添加BN_CLICK

36、ED消息映射:(2)編寫代碼。void CTEST2Dlg:OnOk() / TODO: Add your control notification handler code hereOnOK();46第46頁第46頁環(huán)節(jié)7:調(diào)試程序_運(yùn)營注意:對話框中平均分顯示部分是在設(shè)置屬性時,選擇了“擴(kuò)展樣式”選項(xiàng)卡中“客戶邊沿”選項(xiàng)效果。返回實(shí)例47第47頁第47頁實(shí)例3單選鈕應(yīng)用程序設(shè)計(jì)如右圖所表示程序?;经h(huán)節(jié):創(chuàng)建工程TESTp246,并進(jìn)行界面設(shè)計(jì);為編輯框連接到CString類型添加組員變量m_xm,其余控件不需連接;為控件編輯ID4. 對單選鈕編寫初始化函數(shù)代碼5. 對對話框“擬定”按鈕編

37、寫代碼48第48頁第48頁環(huán)節(jié)13:建立框架,連接變量,編輯ID注意對組框1中2個單選按鈕,在設(shè)置第一個按鈕(男)屬性時,需選定“組”選項(xiàng),表示此組默認(rèn)第1個按鈕;同理對組框2中3個單選按鈕,在設(shè)置第一個按鈕(專家)屬性時,需選定“組”選項(xiàng),表示此組默認(rèn)第1個按鈕;組框本身屬性不要選中“組”選項(xiàng)。49第49頁第49頁環(huán)節(jié)4:單選鈕初始化函數(shù)代碼BOOL CTESTp246Dlg:OnInitDialog()CDialog:OnInitDialog();CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);CheckRadioButton(IDC_

38、RADIO3,IDC_RADIO5,IDC_RADIO3);/ Add About. menu item to system menu.表示為默認(rèn)按鈕50第50頁第50頁環(huán)節(jié)5:對話框“擬定”按鈕代碼void CTESTp246Dlg:OnButton1() / TODO: Add your control notification handler code hereUpdateData(TRUE);CString s;s=s+m_xm;if(IsDlgButtonChecked(IDC_RADIO1)s=s+男;elses=s+女;if(IsDlgButtonChecked(IDC_RADI

39、O3)s=s+專家;else if(IsDlgButtonChecked(IDC_RADIO4)s=s+副專家;elses=s+講師;AfxMessageBox(s);返回實(shí)例51第51頁第51頁實(shí)例4簡易時鐘程序基于對話框基本環(huán)節(jié):創(chuàng)建工程(基于基本對話框)CLOCKYS(時鐘演示)添加新類CClockEx,實(shí)現(xiàn)時鐘控件類。添加消息響應(yīng)及函數(shù),來建立時鐘控件輪廓。時鐘設(shè)計(jì)時鐘元素創(chuàng)建時鐘基類CClockElement添加時針類、分針類、秒針類編譯執(zhí)行。環(huán)節(jié)1:創(chuàng)建工程CLOCKYS返回實(shí)例52第52頁第52頁環(huán)節(jié)2:創(chuàng)建一個新類CClockEx從CStatic(靜態(tài)控件)類派生出類CCloc

40、kEx來實(shí)現(xiàn)時鐘控件類,這樣,就能夠繼承MFC靜態(tài)控件諸多已經(jīng)具備功效和特點(diǎn).53第53頁第53頁環(huán)節(jié)3:添加消息響應(yīng)建立時鐘控件輪廓時鐘控件輪廓單擊“查看建立類向?qū)А?調(diào)出Class Wizard,在class name中選擇剛建立新類CClockEx,進(jìn)行下列工作: 重載虛函數(shù)PreSubClassWindow對時鐘控件基本初始化工作將在該函數(shù)中進(jìn)行。 添加WM_PAINT消息響應(yīng)用于完畢時鐘繪制工作。 添加WM_SIZE消息響應(yīng)以便設(shè)計(jì)時鐘控件能自動適應(yīng)其大小改變。 添加WM_TIMER消息響應(yīng)定期刷新時鐘控件讓它走動。此時,時鐘控件輪廓已建好。效果如圖所表示。54第54頁第54頁環(huán)節(jié)4

41、:時鐘設(shè)計(jì)時鐘元素時鐘繪制具體實(shí)現(xiàn)。時鐘大致由:時鐘背景、時針、分針、秒針4個部分組成。這4個部分可看作4個不同對象,可以考慮建立類來分別實(shí)現(xiàn)。 。CClockBackground (背景)CClockHourHand(時針)CClockMinHand(分針)CClockSecHand(秒針)這4個類有它們共同點(diǎn):都有自己繪圖函數(shù);都有自己繪圖顏色;都應(yīng)有顏色設(shè)置函數(shù);都有繪圖區(qū)域和區(qū)域設(shè)置函數(shù)等等。因此,可認(rèn)為它們共性建立一個基類,命名為:CClockElement(時鐘元素)。55第55頁第55頁環(huán)節(jié)4續(xù):創(chuàng)建時鐘基類CClockElement先建各個構(gòu)成類基類:CClockElement

42、辦法:右鍵單擊ClassView工程選擇New Class;在ClassType里面選擇Genenric Class,類;CClockElement不需要從其它類派生,因此Base Class能夠不填,效果如右圖所表示。56第56頁第56頁環(huán)節(jié)4續(xù):創(chuàng)建時鐘基類CClockElement代碼對類CClockElement源代碼進(jìn)行編寫。添加頭文獻(xiàn) #include 因后面繪圖中需要用到sin和cos這兩個數(shù)學(xué)計(jì)算公式。為后面計(jì)算使用,定義數(shù)學(xué)常量 PI(3.1415926535)。在基類中定義繪圖區(qū)域變量時鐘每個構(gòu)成部分都有繪圖區(qū)域區(qū)域,可定義顏色變量。為了是顏色不顯得單調(diào),這里為每個控件設(shè)置

43、兩種顏色(假如想使程序愈加絢麗,能夠設(shè)置更多顏色)。增長接口函數(shù)這些變量需增長接口函數(shù)來進(jìn)行訪問。每個構(gòu)成部分都應(yīng)當(dāng)有Draw(繪圖)函數(shù)也需在基類中定義,但是,該函數(shù)對于基類來說是無需函數(shù)實(shí)現(xiàn),因此可定義為純虛函數(shù)。57第57頁第57頁環(huán)節(jié)4續(xù):創(chuàng)建時鐘基類CClockElement代碼/ ClockElement.h: interface for the CClockElement class. CClockElement實(shí)現(xiàn)頭文獻(xiàn)代碼下列:#if !defined(AFX_CLOCKELEMENT_H_08A9DFB3_95C0_4D70_9BC0_96D3BACAB74A_INCLUD

44、ED_)#define AFX_CLOCKELEMENT_H_08A9DFB3_95C0_4D70_9BC0_96D3BACAB74A_INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000#include #define PI 3.1415926535class CClockElement public:void SetColor(COLORREF crMain, COLORREF crOther);/設(shè)置顏色void SetTime(const CTime &tmCur);/設(shè)置當(dāng)前時間void SetRegion(LPRE

45、CT lprcRect);/設(shè)置繪圖區(qū)域virtual void Draw(CDC *pDC) = 0;/繪圖函數(shù),此函數(shù)是一虛函數(shù)CClockElement();virtual CClockElement();protected:COLORREF m_crMain; /主要顏色COLORREF m_crOther; /輔助其它顏色CTimem_tmCur; /當(dāng)前時刻CRectm_rcRegion;/繪圖區(qū)域intm_nRadius;/時鐘半徑;58第58頁第58頁CClockElement實(shí)現(xiàn)源文獻(xiàn)關(guān)鍵代碼下列:/ ClockElement.cpp:CClockElement:CClock

46、Element() /時鐘基類結(jié)構(gòu)函數(shù)m_nRadius = 0; /時鐘半徑m_crMain = RGB(255, 255, 255); /主要顏色m_crOther = RGB(128, 128, 128);/輔助其它顏色CClockElement:CClockElement() /時鐘基類析構(gòu)函數(shù)/設(shè)置繪圖區(qū)域函數(shù)void CClockElement:SetRegion(LPRECT lprcRect)m_rcRegion = lprcRect; /區(qū)域取值m_nRadius = m_rcRegion.Width() / 2; /半徑取值if (m_rcRegion.Width() m_

47、rcRegion.Height()/半徑寬度和頂點(diǎn)比較m_nRadius = m_rcRegion.Height() / 2;/設(shè)置當(dāng)前時間函數(shù)void CClockElement:SetTime(const CTime &tmCur) m_tmCur = tmCur; /設(shè)置顏色函數(shù)void CClockElement:SetColor(COLORREF crMain, COLORREF crOther)m_crMain = crMain; /獲取主顏色m_crOther = crOther; /獲取其它顏色59第59頁第59頁環(huán)節(jié)5:創(chuàng)建時鐘背景類CClockBackground時鐘背景類

48、CClockBackground操作辦法:在ClassView工程名上面點(diǎn)右鍵,選擇New Class,在ClassType里面選擇Genenric Class,選擇類Base ClassCClockElement類因CClockBackground需從類CClockElement派生效果如圖所表示。60第60頁第60頁環(huán)節(jié)5續(xù):創(chuàng)建時鐘背景類CClockBackgroundCClockBackground只需實(shí)現(xiàn)基類虛函數(shù)Draw即可,因此這里重載基類虛函數(shù)Draw,其頭文獻(xiàn)實(shí)當(dāng)代碼下列(不用編寫,由系統(tǒng)生成):#include ClockElement.hclass CClockBackg

49、round : public CClockElement public:CClockBackground();virtual CClockBackground();61第61頁第61頁CClockBackground源文獻(xiàn)代碼下列:/ ClockBackground.cpp:/時鐘背景函數(shù)CClockBackground:CClockBackground()/為時鐘背景定義默認(rèn)顏色設(shè)置m_crMain = RGB(0, 255, 0); /主顏色為綠色m_crOther = RGB(0, 128, 0); /其它顏色為深綠色CClockBackground:CClockBackground()

50、 62第62頁第62頁CClockBackground源文獻(xiàn)代碼下列(續(xù)1):/Draw 繪圖函數(shù)void CClockBackground:Draw(CDC *pDC)/準(zhǔn)備設(shè)備環(huán)境(也稱設(shè)備上下文,簡稱DC),是圖形設(shè)備主要接口CPen penMain(PS_SOLID, 1, m_crMain), /創(chuàng)建一支主顏色為綠色能畫實(shí)線(SOLID)1號粗細(xì)畫筆penOther(PS_SOLID, 1, m_crOther); /創(chuàng)建一支其它顏色為深綠色能畫實(shí)線1號粗細(xì)畫筆CBrush brMain(m_crMain), brOther(m_crOther); /創(chuàng)建主畫刷和其它畫刷/將其它畫筆

51、選入內(nèi)存DC,同時暫時擠出并保留原畫筆 CPen *pOldPen = pDC-SelectObject(&penOther); /將主畫刷選入內(nèi)存DC,同時暫時擠出并保留原畫刷CBrush *pOldBrush = pDC-SelectObject(&brMain);/繪制60個小圓點(diǎn),表示分針和秒針刻度CPoint ptCenter = m_rcRegion.CenterPoint(); /創(chuàng)建畫點(diǎn)對象并初始化int nRadius = m_nRadius - 8; /定義半徑初值for(int i=0; iEllipse(rcDot); 63第63頁第63頁CClockBackgroun

52、d源文獻(xiàn)代碼下列(續(xù)2):/繪制12個小方框,表示12個正點(diǎn)pDC-SelectObject(&penMain); /恢復(fù)內(nèi)存DC中原有主畫筆pOldBrush = pDC-SelectObject(&brOther);for(i=0; iRectangle(rcDot);/還原設(shè)備環(huán)境pDC-SelectObject(pOldPen); /恢復(fù)內(nèi)存DC中原有畫筆pDC-SelectObject(pOldBrush); /恢復(fù)內(nèi)存DC中原有畫刷64第64頁第64頁環(huán)節(jié)6:創(chuàng)建時針類CClockHourHand實(shí)現(xiàn)實(shí)現(xiàn)時針類CClockHourHand該類新建過程與CClockBackgroun

53、d同樣。選擇類Base ClassCClockElement類因CClockHourHand需從類CClockElement派生CClockHourHand同樣只需實(shí)現(xiàn)基類虛函數(shù)Draw即可其頭文獻(xiàn)實(shí)當(dāng)代碼下列:#include ClockElement.hclass CClockHourHand : public CClockElement public:CClockHourHand();virtual CClockHourHand();virtual void Draw(CDC *pDC);65第65頁第65頁CClockHourHand源文獻(xiàn)代碼下列:CClockHourHand:CCl

54、ockHourHand()/定義默認(rèn)顏色m_crMain = RGB(0, 255, 100);m_crOther = RGB(128, 128, 0);CClockHourHand:CClockHourHand() void CClockHourHand:Draw(CDC *pDC)/初始化設(shè)備環(huán)境CPen penMain(PS_SOLID, 1, m_crMain), penOther(PS_SOLID, 1, m_crOther);CBrush brMain(m_crMain), brOther(m_crOther);CPen *pOldPen = pDC-SelectObject(&p

55、enOther);CBrush *pOldBrush = pDC-SelectObject(&brMain);/擬定當(dāng)前指針弧度int nTime = (m_tmCur.GetHour() % 12) * 3600;nTime += m_tmCur.GetMinute() * 60;nTime += m_tmCur.GetSecond();double fRadian = 2 * PI * nTime / 3600 / 12; 66第66頁第66頁CClockHourHand源文獻(xiàn)代碼下列(續(xù)):/擬定繪制菱形指針?biāo)杷膫€角坐標(biāo)CPoint ptDiamond4;for(int i=0; iP

56、olygon(ptDiamond, 4);/恢復(fù)設(shè)備環(huán)境pDC-SelectObject(pOldPen);pDC-SelectObject(pOldBrush);67第67頁第67頁環(huán)節(jié)7:創(chuàng)建分針類CClockMinHand實(shí)現(xiàn)實(shí)現(xiàn)分針類CClockMinHand該類新建過程與CClockHourHand同樣,類實(shí)現(xiàn)也基本相同,其頭文獻(xiàn)實(shí)當(dāng)代碼下列:CClockMinHand類因CClockMinHand需從類CClockElement派生CClockMinHand同樣只需實(shí)現(xiàn)基類虛函數(shù)Draw即可#include ClockElement.hclass CClockMinHand : p

57、ublic CClockElement public:CClockMinHand();virtual CClockMinHand();virtual void Draw(CDC *pDC);68第68頁第68頁CClockMinHand源文獻(xiàn)代碼下列:CClockMinHand:CClockMinHand()/定義默認(rèn)顏色m_crMain = RGB(0, 255, 100);m_crOther = RGB(128, 128, 0);CClockMinHand:CClockMinHand() void CClockMinHand:Draw(CDC *pDC)/初始化設(shè)備環(huán)境CPen penMa

58、in(PS_SOLID, 1, m_crMain), penOther(PS_SOLID, 1, m_crOther);CBrush brMain(m_crMain), brOther(m_crOther);CPen *pOldPen = pDC-SelectObject(&penOther);CBrush *pOldBrush = pDC-SelectObject(&brMain);/擬定分針?biāo)谖恢没《萯nt nTime = m_tmCur.GetMinute() * 60;nTime += m_tmCur.GetSecond();double fRadian = 2 * PI * nTi

59、me / 3600;69第69頁第69頁CClockMinHand源文獻(xiàn)代碼下列(續(xù)):/擬定繪制菱形指針?biāo)杷膫€角坐標(biāo)CPoint ptDiamond4;for(int i=0; iPolygon(ptDiamond, 4);/恢復(fù)設(shè)備環(huán)境pDC-SelectObject(pOldPen);pDC-SelectObject(pOldBrush);70第70頁第70頁環(huán)節(jié)8:創(chuàng)建秒針類CClockSecHand實(shí)現(xiàn)實(shí)現(xiàn)秒針類CClockSecHand這類與CClockHourHand同樣建立,類實(shí)現(xiàn)也基本相同其頭文獻(xiàn)實(shí)當(dāng)代碼下列:#include ClockElement.hclass CCl

60、ockSecHand : public CClockElement public:CClockSecHand();virtual CClockSecHand();virtual void Draw(CDC *pDC);71第71頁第71頁CClockSecHand源文獻(xiàn)代碼下列:CClockSecHand:CClockSecHand()/設(shè)定秒針默認(rèn)顏色m_crMain = RGB(0, 200, 200);m_crOther = RGB(0, 200, 200);CClockSecHand:CClockSecHand() void CClockSecHand:Draw(CDC *pDC)in

溫馨提示

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

評論

0/150

提交評論