MFC單應(yīng)用程序練習(xí)_第1頁
MFC單應(yīng)用程序練習(xí)_第2頁
MFC單應(yīng)用程序練習(xí)_第3頁
MFC單應(yīng)用程序練習(xí)_第4頁
MFC單應(yīng)用程序練習(xí)_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、MFC單文檔應(yīng)用程序. 一個簡單的單文檔應(yīng)用程序文件-新建項目-MFC應(yīng)用程序,出現(xiàn)窗口按“下一步”,出現(xiàn)下面窗口 選擇單文檔KfC應(yīng)用程序向?qū)?fdsaf應(yīng)用程序類型概逑應(yīng)用程序類型 復(fù)合文襠支持 文檔模板字符串?dāng)?shù)據(jù)庫支持 用尸界面功能 高線功能 生成的類一喧記近序類甥-害個文檔期)基于對話幅使用HTML 多頂級文檔IT)國文檔/視圖結(jié)構(gòu)支持(V)資源語言(P :|中文仲國)項目類型:Windows資源管理器(X)& IFC標(biāo)淮MFC的便用:j世擇在知舌性中運行為為月提.序門MFC q)在鄢意屋中使用MFC7使用Unicode庫但)上一步 下一步 克威取消點調(diào)試一 運行,最后運行界面為下圖:

2、一個簡單的單文檔應(yīng)用程序向?qū)ё詣咏⑽鍌€類向?qū)ё詣咏⒌念愊鄳?yīng)源文件其他源文件相應(yīng)頭文件其他頭文件CAboutDlgStdAfx.cppStdAfx.hCXxxAppXxx.cppXxx.rcXxx.hResource.hCXxxViewXxxView.cppXxxView.hCXxxDocXxxDoc.cppXxxDoc.h每個類的主要函數(shù):voidCAboutDlg:DoDataExchange(CDataExchange* pDX)intCMainFrame:OnCreate(LPCREATESTRUCT IpCreateStruct)創(chuàng)建窗體的工具欄,狀態(tài)欄等BOOL CMainFra

3、me:PreCreateWindow(CREATESTRUCT& cs)BOOL CXxxApp:InitInstance()void CXxxApp:OnAppAbout()BOOL CXxxDoc:OnNewDocument()初始化文檔字符數(shù)據(jù)字體信息等void CXxxDoc:Serialize(CArchive& ar)BOOLCXxxView:PreCreateWindow(CREATESTRUCT& cs)voidCXxxView:OnDraw(CDC* pDC)BOOL CXxxView:OnPreparePrinting(CPrintInfo* pInfo)彈出打印對話框vo

4、idCXxxView:OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)voidCXxxView:OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)CXxxDoc* CXxxView:GetDocument() / non-debug version is inline創(chuàng)建單文檔應(yīng)用程序的一般步驟:利用AppWizard創(chuàng)建應(yīng)用程序框架在文檔內(nèi)中聲明保存文檔數(shù)據(jù)所需要數(shù)據(jù)對象完成文檔類的OnNewDocument函數(shù),初始化新文檔完成文檔類的Serialize函數(shù),保持和加載文檔數(shù)據(jù)完成視類的OnInitialUpdate

5、函數(shù),初始化顯示完成視類的OnDraw函數(shù),顯示當(dāng)前文檔內(nèi)容在視類中加入可以使用戶編輯文檔數(shù)據(jù)所需的代碼.簡單文本和圖形輸由建立一個簡單的單文檔應(yīng)用程序SimpleTextPicture ,通過彳改OnDraw函數(shù)在視(View)中輸出信息或畫圖。找到函數(shù) OnDraw(CDC* /*pDC*/),改為 OnDraw(CDC* pDC);OnDraw函數(shù)在 SimpleTextPicture.cpp文件中,專門用于輸出信息或畫圖。負責(zé)視圖顯 示功能(包括打印、顯示、預(yù)覽等)例2. 1顯示正方形和文本void CSimpleTextPictureView:OnDraw(CDC* pDC)CSim

6、pleTextPictureDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data herepDC-TextOut(10,120,_T(Hello World!);pDC-Rectangle(20,20,100,100);在AppWizard生成的OnDraw函數(shù)中加入以黑體字給出的兩行代碼,運行程序, 顯示如下:Hello Wo rid I例2 . 2顯示彩色圖形和文本void CSimpleTextPictureView:OnDraw(CDC* pDC) CSimpleTextPi

7、ctureDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereCPen pen;CBrush brush;pen.CreatePen(PS_SOLID, 3, RGB(250,0,0);brush.CreateSolidBrush(RGB(0,250,0);pDC-SelectObject(pen);pDC-SelectObject(brush);pDC-Ellipse(100,200,300,300);DeleteObject(pen);DeleteObject(brus

8、h);CString str(_T(Hello World!); /用 UNICODE 編碼 pDC-SetTextColor(RGB(0,0,250);pDC-TextOut(120,150,str);pDC-SetTextColor(RGB(125,125,125);double a=31.4,888.54;char ch10;CString str1;str1.Format(_T(%f),a0);pDC-TextOut(20,40,str1);str1.Format(_T(%f),a1);pDC-TextOut(20,60,str1);冊 無標(biāo)題 fchafI n I回|文忡E 編輯國視

9、四希助(日 R昌/TMIMOUII888.540000Hello World!就緒.滾動字幕創(chuàng)建一個簡單的單文檔應(yīng)用程序Xxx2 ;1在Xxx2View.h中添加代碼如下:public:virtual CXxx2View();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endifprotected:private:int n;定義變量2在CXxx2View構(gòu)造函數(shù)中初始化變量nCXxx2View:CXxx2View() / TODO: add construct

10、ion code heren=0;3在Xxx2View.cpp文件中修改OnDraw函數(shù):void CXxx2View:OnDraw(CDC* pDC) CXxx2Doc* pDoc = GetDocument();ASSERT_VALID(pDoc); if (!pDoc) return;pDC-SetTextColor(RGB(0,0,235);pDC-SetBkMode(TRANSPARENT);CFont font;font.CreateFont(28,15,0,0,FW_NORMAL,false,false,false,DEFAULT_CHARSET,OUT_ DEVICE_PREC

11、IS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,_ T( 隸書 );pDC-SelectObject(&font);pDC-TextOut(n,100,_T( 世上無難事,只要肯登攀! );n=n+20;RECT r;GetClientRect(&r); / 獲得窗口if(nr.right-r.left)/ 窗口如果 n 右坐標(biāo)減去左坐標(biāo) n=0;4 添加三條消息映射,并加入相應(yīng)代碼。通過菜單命令: 視圖 /類視圖,找到 CXxx2View 類, 在 CXxx2View 類上點擊 “右鍵-屬性”找到消息按扭,如下圖 :點擊OnMEutt

12、onDblClkvoid CXxx2View:OnLButtonDblClk(UINT nFlags, CPoint point) 鼠標(biāo)左雙擊函數(shù)/ TODO: Add your message handler code here and/or call defaultSetTimer(1,500,NULL);CView:OnLButtonDblClk(nFlags, point);void CXxx2View:OnRButtonDblClk(UINT nFlags, CPoint point) /鼠標(biāo)右雙擊函數(shù)/ TODO: Add your message handler code her

13、e and/or call default KillTimer(l);CView:OnRButtonDblClk(nFlags, point);void CXxx2View:OnTimer(UINT nIDEvent)/ TODO: Add your message handler code here and/or call defaultInvalidate。; 擦除背景,重新繪制CView:OnTimer(nIDEvent);5添加菜單控制與代理點擊視圖,資源視圖,如下圖,雙擊 IDR_MAINFRAME,進入菜單編輯。資源圖川忙可寫一,第 mfc4二 miFc4.rcj Accelera

14、tori_J Dialog LJ Iconj _J Menud 5MM Tablij Toolbar_J Version國資源.因類視圖卜與解決在資源Menu中添加運行子菜單:啟動(IDC_MOVE )和停止(IDC_STOP )與其消息映射 (右鍵- 添加事件處理程序)。下為“啟動”對應(yīng)的消息映射事件處懿序向?qū)?rnfc4歡迎使用事件處理程序向?qū)蠲?|ID 3ETT3添力嗝耨取消并修改代碼:void CXxx2View:OnMove() 啟動對應(yīng)消息/ TODO: Add your command handler code here SetTimer(1,300,NULL);void

15、CXxx2View:OnStop() 停止對應(yīng)的消息/ TODO: Add your command handler code here KillTimer(1);.使用計算數(shù)據(jù)畫直方圖使用AppWixard生成單文檔工程 Plot在PlotDoc.h中類 CPlotDoc的定義之前加入類 Max的定義: class Maxdouble x1,x2,x3,x4;double Max2(double,double);public:Max(double,double,double,double);double Max4();在 PlotDoc.cpp 的文件尾部加入類 Max 的實現(xiàn)部分:/ CP

16、lotDoc commandsdouble Max:Max2(double a, double b)if(a=b) return a;else return b;Max:Max(double a, double b, double c, double d)x1=a;x2=b;x3=c;x4=d;double Max:Max4()return Max2(Max2(x1,x2),Max2(x3,x4);為 CPlotDoc 類增加一個公有的 void 類型的成員函數(shù)Find 和一個公有int 數(shù)據(jù)成員數(shù)組m_num5 ,使用類產(chǎn)生對象并計算它們的最大值,將它們轉(zhuǎn)換成int ,存入整數(shù)數(shù)組 m_nu

17、m 。void CPlotDoc:Find()Max a(110.5, 120.8, 110, 68);Max b(130, 256.5, 90, 200);Max c(125, 406.8, 350, 330);Max d(120, 356.8, 300, 280.5);Max e(102, 256.8, 120, 105);m_num0 = (int) a. Max4();m_num1 = (int) b. Max4();m_num2 = (int) c. Max4();m_num3 = (int) d. Max4();m_num4 = (int) e. Max4();為 CPlotDoc

18、 類的成員函數(shù)OnNewDocument 增加調(diào)用語句準(zhǔn)備數(shù)據(jù)。BOOL CPlotDoc:OnNewDocument()if (!CDocument:OnNewDocument() return FALSE;/ TODO: add reinitialization code here/ (SDI documents will reuse this document)Find();/增加的語句return TRUE;在視類中畫圖寫字void CPlotView:OnDraw(CDC* pDC)CPlotDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/

19、 TODO: add draw code for native data herepDC-SetMapMode(MM_ISOTROPIC);pDC-SetViewportOrg(50,250);pDC-MoveTo(0,0);pDC-LineTo(1100,0);pDC-MoveTo(0,0);pDC-LineTo(0,600);int width = 40;int ch = A;CString str1;CBrush brush;brush.CreateSolidBrush(RGB(50, 250,0);pDC-SelectObject(brush);for(int i = 1; iRect

20、angle(200*i, 0, 200*i+width, pDoc-m_numi-1);str1.Format(_T(%c),ch); / 整型以字符格式賦給str1pDC-TextOut(200*i+10,-10, str1); / 輸出 ABCDECFont font;font.CreateFont(0,0,0,0,800,0,0,0,OEM_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEF AULT_PITCH,_T( 楷體 ) );pDC-SelectObject(&font);pDC-TextOut(

21、200,550, _T( 各公司銷售點水果月銷售量直方圖 );運行程序,結(jié)果如下:-nl xi文件舊 編輯(T 查看 幫助俎).單文檔串行化編程之一SerialRect應(yīng)用程序串行化一個矩形數(shù)據(jù),2.用AppWizard建立一個普通單文檔用對話框修改數(shù)據(jù),用編輯/修改菜單打開對話框。SerialRect工程,按下一步,直到出現(xiàn)下圖,將CSerialRectView 的基類設(shè)為 CFormView 。3.初始界面如下:“Sr iaLH”!.創(chuàng)天中文VC且UtwL 工匚工DD_SER1ALHEC7OM1 (Dial”)駕工件羯和直告品又二 條母工A 9=1郡七馬電12d|悒c史buHp| - “國

22、唐刊吧迎*_一;山CAbotttDIg *3 CMaitif- raine* *CSiflialHcclA|jp國 rcgwctcM:思 5C8cri4lltecWlew Globui9Im,困瓦零d“.三FhHZJaLIn降團圖出醺鼻日ffi巨喧北nw圖隆卞小回些SE而相逢/WY7,宣技交件百絲果工_11,飛誨不瓦4.在Form上添加控件添加變量Edit1Edit4 整型 (m_x1, m_y1, m_x2, m_y2) ,取值范圍 0300 , Edit5 為Control-CEdit 型(m_Ctrl)用右鍵選擇控件的 Events修改Editl的黑認EN_CHANGE消息處理OnCha

23、ngeEditl為自 定義的OnChangeEdit 。其他三個Edit 也映射到這個函數(shù)。在 Doc 頭文件 SerialRectDoc.h 中添加變量:class CSerialRectDoc : public CDocumentprotected: / create from serialization onlyCSerialRectDoc();DECLARE_DYNCREATE(CSerialRectDoc)/ Attributespublic:int x1, y1, x2, y2;/ Operations. 在 SerialRectDoc.cpp 的構(gòu)造函數(shù)中初始化變量:CSeria

24、lRectDoc:CSerialRectDoc()/ TODO: add one-time construction code here x1=y1=x2=y2=0;. SerialRectView.cpp 中添加下面內(nèi)容:void CSerialRectView:OnChangeEdit()/ TODO: Add your control notification handler code here UpdateData();CSerialRectDoc* pDoc= GetDocument();if(m_x1!=pDoc- x1) pDoc- x1 =m_x1;if(m_y1!=pDoc-

25、 y1) pDoc- y1 =m_y1;if(m_x2!=pDoc- x2) pDoc- x2 =m_x2;if(m_y2!=pDoc- y2) pDoc- y2 =m_y2;Invalidate(true);void CSerialRectView:OnInitialUpdate()CFormView:OnInitialUpdate();GetParentFrame()-RecalcLayout();ResizeParentToFit();m_x1=GetDocument()-x1;m_x2=GetDocument()-x2;m_y1=GetDocument()-y1;m_y2=GetDoc

26、ument()-y2;UpdateData(false);.在SerialRectDoc.cpp的串行化代碼: void CSerialRectDoc:Serialize(CArchive& ar) if (ar.IsStoring()/ TODO: add storing code here arx1y1x2x1y1x2y2;.為 CSerialRectView 類添加 OnDraw 函數(shù)在工作區(qū)類視圖中右鍵單擊CSerialRectView類,選擇Add Member Function彈出對話框:Add lenber FunctionFunction Type:OKvoid CancelF

27、unction Declaration:OnDrawfCDC* pDC|Access f1, Public Prateded Private Static I- Virtual void CSerialRectView:OnDraw(CDC *pDC)m_Ctrl.UpdateWindow();pDC=m_Ctrl.GetWindowDC();pDC-Rectangle(m_x1,m_y1,m_x2,m_y2);UpdateData(false);6.單文檔串行化編程之二SerialData應(yīng)用程序串行化日期結(jié)構(gòu)數(shù)據(jù),用對話框修改數(shù)據(jù),用編輯/修改菜單打開對話框。.用AppWizard建立一個

28、普通單文檔 SerialDate工程.添加一個對話框資源如下:并為三個編輯框添加變量m_nYear, m_nMonth, m_nDay,.用 ClassWizard 添加類 CDateDialog(其基類為 CDialog).在Doc頭文件SerialDateDoc.h中添加下面內(nèi)容:struct Date int m_nYear;int m_nMonth;int m_nDay;#include DateDialog.hclass CSerialDateDoc : public CDocument protected: / create from serialization onlyCSerialDateDoc();DECLARE_DYNCREATE(CSerialDateDoc)/ Attributes pu

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論