版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、MFC單文檔基礎(chǔ)訓(xùn)練文本輸出、繪圖等1. 一個簡單的單文檔應(yīng)用程序文件->新建項目->MFC應(yīng)用程序 ,出現(xiàn)窗口按“下一步”,出現(xiàn)下面窗口 選擇單文檔 點 "調(diào)試>運行",最后運行界面為下圖:一個簡單的單文檔應(yīng)用程序向?qū)ё詣咏⑽鍌€類:向?qū)ё詣咏⒌念愊鄳?yīng)源文件其他源文件相應(yīng)頭文件其他頭文件CAboutDlgStdAfx.cppStdAfx.hCXxxAppXxx.cppXxx.rcXxx.hResource.hCXxxViewXxxView.cppXxxView.hCXxxDocXxxDoc.cppXxxDoc.hCMainFrameMainFrame.
2、cppMainFrame.h視(View)顯示用戶程序的數(shù)據(jù)及處理用戶與文檔的交互文檔對象永久存儲(磁盤文件)MainFrame框架窗口文檔視結(jié)構(gòu)每個類的主要函數(shù):void CAboutDlg:DoDataExchange(CDataExchange* pDX)int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)/創(chuàng)建窗體的工具欄,狀態(tài)欄等BOOL CMainFrame:PreCreateWindow(CREATESTRUCT& cs)BOOL CXxxApp:InitInstance()void CXxxApp:OnAppAbo
3、ut()BOOL CXxxDoc:OnNewDocument()/初始化文檔字符數(shù)據(jù)、字體信息等void CXxxDoc:Serialize(CArchive& ar)BOOL CXxxView:PreCreateWindow(CREATESTRUCT& cs)void CXxxView:OnDraw(CDC* pDC) BOOL CXxxView:OnPreparePrinting(CPrintInfo* pInfo)/彈出打印對話框void CXxxView:OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo) void CXxxView
4、:OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)CXxxDoc* CXxxView:GetDocument() / non-debug version is inline創(chuàng)建單文檔應(yīng)用程序的一般步驟:l 利用AppWizard創(chuàng)建應(yīng)用程序框架l 在文檔內(nèi)中聲明保存文檔數(shù)據(jù)所需要數(shù)據(jù)對象l 完成文檔類的OnNewDocument函數(shù),初始化新文檔l 完成文檔類的Serialize函數(shù),保持和加載文檔數(shù)據(jù)l 完成視類的OnInitialUpdate函數(shù),初始化顯示l 完成視類的OnDraw函數(shù),顯示當前文檔內(nèi)容l 在視類中加入可以使用戶編輯文檔數(shù)據(jù)所需的代碼2
5、.簡單文本和圖形輸出建立一個簡單的單文檔應(yīng)用程序SimpleTextPicture,通過修改OnDraw函數(shù)在視(View)中輸出信息或畫圖。找到函數(shù)OnDraw(CDC* /*pDC*/),改為OnDraw(CDC* pDC);OnDraw函數(shù)在SimpleTextPicture.cpp文件中,專門用于輸出信息或畫圖。負責(zé)視圖顯示功能(包括打印、顯示、預(yù)覽等)例21 顯示正方形和文本void CSimpleTextPictureView:OnDraw(CDC* pDC)CSimpleTextPictureDoc* pDoc = GetDocument();ASSERT_VALID(pDoc)
6、;/ TODO: add draw code for native data herepDC->TextOut(10,120,_T("Hello World!");pDC->Rectangle(20,20,100,100);在AppWizard生成的OnDraw函數(shù)中加入以黑體字給出的兩行代碼,運行程序,顯示如下:例22顯示彩色圖形和文本void CSimpleTextPictureView:OnDraw(CDC* pDC)CSimpleTextPictureDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO:
7、 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(brush);CString str(_T("Hello World!");
8、/用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);3.滾動字幕創(chuàng)建一個簡單的單文檔應(yīng)用
9、程序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 construction code heren=0;3 在Xxx2View.cpp文件中修改OnDraw函數(shù):void C
10、Xxx2View: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_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT
11、_PITCH,_T("隸書");pDC->SelectObject(&font);pDC->TextOut(n,100,_T("世上無難事,只要肯登攀!");n=n+20;RECT r;GetClientRect(&r); /獲得窗口if(n>r.right-r.left)/窗口如果n> 右坐標減去左坐標n=0; 4添加三條消息映射,并加入相應(yīng)代碼。通過菜單命令:視圖/類視圖,找到CXxx2View類,在CXxx2View類上點擊“右鍵->屬性”,找到消息按扭,如下圖: 點擊 void CXxx2View:O
12、nLButtonDblClk(UINT nFlags, CPoint point) /鼠標左雙擊函數(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) /鼠標右雙擊函數(shù)/ TODO: Add your message handler code here and/or call defaultKi
13、llTimer(1);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,進入菜單編輯。在資源Menu中添加運行子菜單:啟動(IDC_MOVE)和停止(IDC_STOP)及其消息映射(右鍵-&g
14、t;添加事件處理程序)。改為OnMove下為“啟動”對應(yīng)的消息映射:改為OnMove并修改代碼:void CXxx2View:OnMove() /啟動對應(yīng)消息/ TODO: Add your command handler code hereSetTimer(1,300,NULL);void CXxx2View:OnStop() /停止對應(yīng)的消息/ TODO: Add your command handler code hereKillTimer(1);4.使用計算數(shù)據(jù)畫直方圖1 使用AppWixard生成單文檔工程Plot2 在PlotDoc.h中類 CPlotDoc的定義之前加入類Max的
15、定義:class Maxdouble x1,x2,x3,x4;double Max2(double,double);public:Max(double,double,double,double);double Max4();3 在PlotDoc.cpp的文件尾部加入類Max的實現(xiàn)部分:/ CPlotDoc 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;d
16、ouble Max:Max4()return Max2(Max2(x1,x2),Max2(x3,x4);4 為CPlotDoc類增加一個公有的void類型的成員函數(shù)Find和一個公有int數(shù)據(jù)成員數(shù)組m_num5,使用類產(chǎn)生對象并計算它們的最大值,將它們轉(zhuǎn)換成int,存入整數(shù)數(shù)組m_num。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, 12
17、0, 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();5 為CPlotDoc類的成員函數(shù)OnNewDocument增加調(diào)用語句準備數(shù)據(jù)。BOOL CPlotDoc:OnNewDocument()if (!CDocument:OnNewDocument()return FALSE;/ TODO: add reinitialization code here/ (SDI documents
18、 will reuse this document)Find();/增加的語句return TRUE;6 在視類中畫圖寫字void CPlotView:OnDraw(CDC* pDC)CPlotDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data herepDC->SetMapMode(MM_ISOTROPIC);pDC->SetViewportOrg(50,250);pDC->MoveTo(0,0);pDC->LineTo(1100,0);pDC->M
19、oveTo(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; i<6; i+, ch+)pDC->Rectangle(200*i, 0, 200*i+width, pDoc->m_numi-1); str1.Format(_T("%c"),ch); /整型以字符格式賦給s
20、tr1 pDC->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,DEFAULT_PITCH,_T("楷體"));pDC->SelectObject(&font);pDC->TextOut(200,550, _T("各公司銷售點水果月銷售量直方圖");7 運行程序,結(jié)果如下: 5.
21、 單文檔串行化編程之一SerialRect應(yīng)用程序串行化一個矩形數(shù)據(jù),用對話框修改數(shù)據(jù),用編輯/修改菜單打開對話框。2. 用AppWizard建立一個普通單文檔SerialRect工程,按下一步,直到出現(xiàn)下圖,將CSerialRectView的基類設(shè)為CFormView。改為CFormView3. 初始界面如下:4. 在Form上添加控件5. 添加變量Edit1Edit4整型(m_x1, m_y1, m_x2, m_y2),取值范圍0300,Edit5為Control-CEdit型(m_Ctrl)6. 用右鍵選擇控件的Events修改Edit1的黙認EN_CHANGE消息處理OnChangeE
22、dit1為自定義的OnChangeEdit。其他三個Edit也映射到這個函數(shù)。7. 在Doc頭文件SerialRectDoc.h中添加變量:class CSerialRectDoc : public CDocumentprotected: / create from serialization onlyCSerialRectDoc();DECLARE_DYNCREATE(CSerialRectDoc)/ Attributespublic:int x1, y1, x2, y2;/ Operations6. 在SerialRectDoc.cpp的構(gòu)造函數(shù)中初始化變量:CSerialRectDoc:
23、CSerialRectDoc()/ TODO: add one-time construction code herex1=y1=x2=y2=0;7. SerialRectView.cpp中添加下面內(nèi)容:void CSerialRectView:OnChangeEdit() / TODO: Add your control notification handler code hereUpdateData();CSerialRectDoc* pDoc= GetDocument();if(m_x1!=pDoc-> x1) pDoc-> x1 =m_x1;if(m_y1!=pDoc-&g
24、t; 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
25、;m_y1=GetDocument()->y1;m_y2=GetDocument()->y2;UpdateData(false);8. 在SerialRectDoc.cpp的串行化代碼:void CSerialRectDoc:Serialize(CArchive& ar)if (ar.IsStoring()/ TODO: add storing code herear<<x1<<y1<<x2<<y2;else/ TODO: add loading code herear>>x1>>y1>>x
26、2>>y2;9. 為CSerialRectView類添加OnDraw函數(shù)在工作區(qū)類視圖中右鍵單擊CSerialRectView類,選擇Add Member Function彈出對話框: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ù),用編輯/修改菜單打開對話框。1
27、. 用AppWizard建立一個普通單文檔SerialDate工程2. 添加一個對話框資源如下:并為三個編輯框添加變量m_nYear, m_nMonth, m_nDay,3. 用ClassWizard添加類CDateDialog(其基類為CDialog)4. 在Doc頭文件SerialDateDoc.h中添加下面內(nèi)容:struct Dateint m_nYear;int m_nMonth;int m_nDay;#include "DateDialog.h"class CSerialDateDoc : public CDocumentprotected: / create from serialization onlyCSerialDateDoc();DECLARE_DYNCREATE(CSerialDateDoc)/ Attributespublic: Date date;4. 編輯菜單中添加子菜單項,ID_EDIT_MODIFY,消息映射到SerialDateDoc.cpp文件中的OnEditModify()函數(shù)5. 在SerialDateDoc.cpp中添加代碼CSerialDateDoc:CSerialDateD
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 分切機出售轉(zhuǎn)讓合同范例
- 快餐餐飲服務(wù)合同范例
- 九年級中考備戰(zhàn)會上的精彩演講稿范文
- 小區(qū)大齡保潔合同范例
- 前期工程門窗合同范例
- 《作業(yè)危害全部》課件
- 小吃店租店合同范例
- 恒大地產(chǎn)投資合同范例
- 商鋪按揭投資合同模板
- 個體往來協(xié)議合同范例
- 個人信息保護法教程全套教學(xué)課件
- 高級教師職稱面試講課答辯題目及答案
- 與城投公司的合作協(xié)議(成立公司合作協(xié)議)
- 有效教學(xué) 崔允漷 讀書匯報
- 鋁合金模板工程設(shè)計與施工專項方案技術(shù)交底
- 初中英語詞性講解課件
- 陜西中考物理備考策略課件
- 9F燃機燃機規(guī)程
- aiissti變頻器說明書
- 綠化養(yǎng)護報價表
- 家校溝通案例七篇
評論
0/150
提交評論