可視化編程課件02MF_第1頁
可視化編程課件02MF_第2頁
可視化編程課件02MF_第3頁
可視化編程課件02MF_第4頁
可視化編程課件02MF_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章MFC基礎(chǔ)與編程方法VisualC++6.0開發(fā)平臺MFC類的組織結(jié)構(gòu)MFC向?qū)У闹饕δ躆FC程序框架分析Windows消息機(jī)制1可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第1頁!VisualC++6.0平臺(1)編輯區(qū)工作區(qū)輸出區(qū)2可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第2頁!VisualC++6.0平臺(2)ClassView面板列出項目中的所有類FileView面板顯示項目中的所有文件ResourceView面板顯示項目中的所有資源,例如Bitmap、Cursor、Dialog、Icon、Menu、Accelerator、StringTable、Toolbar與Version等3可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第3頁!VisualC++6.0平臺(4)可創(chuàng)建的項目類型項目類型說明DatabaseWizard數(shù)據(jù)庫應(yīng)用程序ISAPIExtensionWizardInternet應(yīng)用程序ATLCOMAppWizardATLCOM程序Makefile自動編譯文件CustomAppWizard用戶自定義向?qū)tilityProject其他子項目的容器4可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第4頁!VisualC++6.0平臺(6)可創(chuàng)建的文件類型文件類型說明BinaryFile二進(jìn)制文件HTMLPageHTML文件ActiveServerPageASP文件ResourceScript資源腳本文件SQLScriptFileSQL腳本文件MacroFile宏文件5可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第5頁!程序調(diào)試與運行(1)編譯(Compile)鏈接(Link)執(zhí)行(Execute)調(diào)試(Debug)工具按鈕6可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第6頁!程序調(diào)試與運行(3)StartDebugGoStepIntoStepOverStepOutBreakPoint7可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第7頁!項目的概念(1)項目(Project)由多個源、頭文件組成,以及系統(tǒng)提供的函數(shù)支持,編譯時有很多特殊選擇,例如版本、優(yōu)化、鏈接庫等項目內(nèi)容存在項目文件中,由它對整個程序進(jìn)行統(tǒng)一管理。不同版本文件后綴不同,VisualC++5.0以上為“.dsp”8可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第8頁!項目的概念(3)Build菜單→BatchBuild9可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第9頁!MFC類的組織結(jié)構(gòu)(1)MFC是C++語言的安全子集,也是一個應(yīng)用程序框架,簡化Windows編程難度MFC類是以層次結(jié)構(gòu)組織,封裝大部分WindowsAPI和控件當(dāng)前MFC版本包含100多個類,可實現(xiàn)應(yīng)用程序的大部分功能10可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第10頁!根類與應(yīng)用程序類(1)根類CObjectCObject是MFC抽象基類,多數(shù)MFC類與用戶自定義類的根類,提供編程所需的公共操作,例如對象建立與刪除應(yīng)用程序類CWinAppCWinApp是MFC應(yīng)用程序基類,每個程序只有一個程序?qū)ο螅擃愂菑腃WinApp派生,提供程序相關(guān)操作,例如初始化、運行與終止11可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第11頁!根類與應(yīng)用程序類(3)CWinApp類的公有成員函數(shù)函數(shù)名功能InitInstance初始化應(yīng)用程序Run啟動默認(rèn)的消息循環(huán)ExitInstance終止應(yīng)用程序LoadCursor向應(yīng)用程序加載光標(biāo)LoadIcon向應(yīng)用程序加載圖標(biāo)DoMessageBox彈出一個消息框OpenDocumentFile打開一個文檔對象CloseAllDocuments關(guān)閉所有打開的文檔對象12可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第12頁!可視對象類(1)窗口類CWndCWnd類是MFC窗口基類,實現(xiàn)不同類型窗口CWnd派生類CFrameWnd:單文檔框架窗口類CMIDFrameWnd:多文檔主框架窗口類CMIDChildWnd:多文檔子框架窗口類13可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第13頁!可視對象類(3)CView派生類派生類名功能CScrollView帶滾動條的視圖CCtrlView帶樹狀列表框控件的視圖CEditView帶文本編輯器的視圖CFormView基于表單模板的視圖CListView帶列表框控件的視圖CRecordView可顯示數(shù)據(jù)庫記錄的視圖CRichEditView帶格式文本編輯器的視圖CPreviewView支持打印預(yù)覽的視圖14可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第14頁!可視對象類(5)控件類控件類名功能控件類名功能CStatic文本CHotKeyCtrl熱鍵CEdit編輯框CRichEditCtrl格式編輯框CScrollBar滾動條CProgressCtrl進(jìn)度條CSlideCtrl游標(biāo)CSpinButtonCtrl雙向箭頭CComboBox組合框CBitmapButton位圖按鈕CListBox列表框CAnimateCtrl動畫顯示CButton按鈕CToolTipCtrl彈出式窗口15可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第15頁!可視對象類(7)繪圖對象類CGdiObjectCGdiObject是GDI基類,實現(xiàn)繪圖對象CGdiObject派生類CBitmap:位圖操作接口CBrush:畫刷CFont:字體CPalette:調(diào)色板CPen:畫筆CRgn:橢圓或多邊型域16可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第16頁!通用類(1)文件類CFileCFile類是文件訪問基類,實現(xiàn)文件輸入與輸出操作CFile派生類CMemFile:駐內(nèi)存文件訪問接口CStdioFile:緩存流式文件訪問接口CArchive類CFile類通常由CArchive間接訪問17可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第17頁!通用類(3)模板收集類CArray:將數(shù)據(jù)存儲到數(shù)組CList:將數(shù)據(jù)存儲到鏈表CMap:關(guān)鍵字與數(shù)據(jù)的映射18可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第18頁!ODBC類ODBC類是MFC數(shù)據(jù)庫訪問類,可訪問支持ODBC的數(shù)據(jù)庫系統(tǒng),完成查詢、更新等操作CDatabase:連接數(shù)據(jù)源CRecordset:數(shù)據(jù)源的一組記錄CRecordView:記錄的表單視圖CFieldExchange:支持記錄字段交換CLongBinary:存儲二進(jìn)制對象句柄19可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第19頁!MFC向?qū)Чδ?1)第1步:應(yīng)用程序類型第2步:數(shù)據(jù)庫支持例2-220可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第20頁!MFC向?qū)Чδ?3)第5步:應(yīng)用程序風(fēng)格第6步:MFC類選擇21可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第21頁!MFC程序框架分析(1)例2-3Windows程序核心是CWinApp22可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第22頁!MFC程序框架分析(3)23可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第23頁!MFC程序框架分析(5)裝載標(biāo)準(zhǔn)文件選項創(chuàng)建主邊框窗口CMainFrame*pMainFrame=newCMainFrame;if(!pMainFrame->LoadFrame(IDR_MAINFRAME))returnFALSE;m_pMainWnd=pMainFrame;pMainFrame->ShowWindow(m_nCmdShow);pMainFrame->UpdateWindow();24可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第24頁!文檔模板(1)文檔模板用于存放與文檔、視圖和邊框窗口相關(guān)的信息CSingleDocTemplate單文檔模板CMultiDocTemplate多文檔模板傳遞給C*DocTemplate的資源符號串,包括7個參數(shù),每個參數(shù)用\n隔開,用GetDocString可獲得每個參數(shù)25可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第25頁!窗口類與窗口對象26可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第26頁!消息循環(huán)PeekMessage:查看消息隊列,只起檢測作用GetMessage:查看消息隊列,將消息移走PreTranslateMessage:TranslateMessage的預(yù)處理函數(shù)TranslateMessage:將虛擬鍵轉(zhuǎn)化為字符碼,例如Shift+8→*DispatchMessage:消息分發(fā)到消息處理函數(shù)27可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第27頁!消息控制機(jī)制(1)在CTestView::OnDraw()中例2-4

pDC->TextOut(20,20,"HelloWorld!");pDC->SelectStockObject(GRAY_BRUSH);pDC->Ellipse(20,50,100,130);28可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第28頁!消息控制機(jī)制(3)鼠標(biāo)控制消息

CClientDCcDC(this);cDC.TextOut(point.x,point.y,"MouseClicked!");29可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第29頁!趣味性例子(1)繪制一片綠色的葉子例2-530可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第30頁!趣味性例子(3)

if(dP>0.01&&dP<=0.86){dX=0.85*dX+0.04*dY;dY=-0.04*dX+0.85*dY+1.60;}if(dP>0.86&&dP<=0.93){dX=0.20*dX-0.26*dY;dY=0.44*dX+0.12*dY+1.60;}if(dP>0.93){dX=-0.20*dX+0.26*dY;dY=0.44*dX+0.12*dY+1.00;}pDC->SetPixel(nX+int(dX*nScale),nY-int(dY*nScale),crColor);}}31可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第31頁!消息的種類(2)標(biāo)準(zhǔn)Windows消息窗口消息(WM_CREATE、WM_PAINT等)、鼠標(biāo)消息(WM_LBUTTONDOWN、WM_MOUSEMOVE等)、鍵盤消息(WM_KEYDOWN、WM_CHAR等)、WM_TIMER控件消息從控件傳送給父窗口的消息命令消息用戶界面對象(包括菜單、工具欄、加速鍵等)的WM_COMMAND消息32可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第32頁!消息處理過程(2)WM_COMMAND能被更多的對象處理,包括應(yīng)用程序、窗口、文檔與視圖等命令消息通過命令目標(biāo)鏈發(fā)送,每個目標(biāo)都檢查自己的消息映射,決定能否處理消息命令目標(biāo)鏈發(fā)送順序:當(dāng)前活動的子目標(biāo)、自己、其它目標(biāo)33可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第33頁!窗口消息(1)WM_CREATE消息當(dāng)窗口對象生成后,系統(tǒng)發(fā)送WM_CREATE,完成窗口的初始化WM_DESTROY消息當(dāng)應(yīng)用程序退出時,系統(tǒng)發(fā)送WM_DESTROY,完成某些收尾工作WM_PAINT消息當(dāng)窗口發(fā)生變化時,系統(tǒng)發(fā)送WM_PAINT,重繪窗口并顯示數(shù)據(jù)34可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第34頁!窗口消息(3)35可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第35頁!窗口消息(5)WM_PAINT→CTestView消息循環(huán)→CView消息循環(huán)→CView::OnPaint()→CView::OnDraw()36可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第36頁!鼠標(biāo)消息(2)鼠標(biāo)消息處理函數(shù)的參數(shù):nFlag和pointnFlag表示鼠標(biāo)按鈕狀態(tài),鼠標(biāo)事件發(fā)生時的鍵盤某些鍵狀態(tài),每位由nFlag相應(yīng)位表示MK_CONTROL、MK_SHIFT、MK_LBUTTON、MK_MBUTTON、MK_RBUTTONpoint表示鼠標(biāo)事件發(fā)生時的光標(biāo)位置37可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第37頁!鼠標(biāo)消息(4)在CTestView類定義中在CTestView::CTestView()中private:CPointm_Pos;CStringm_Des;m_Pos=CPoint(0,0);m_Des.Empty();38可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第38頁!鼠標(biāo)消息(6)窗口重繪的結(jié)果39可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第39頁!鍵盤消息(2)在CTestView::OnChar()中voidCTestView::OnChar(UINTnChar,UINTnRepCnt,UINTnFlags){CStringstr;str.Format("按下%c鍵!",nChar);MessageBox(str,"鍵盤按鍵");}例2-840可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第40頁!菜單與工具欄消息(1)添加菜單消息ResourceView→Menu→IDR_MAINFRAME一級菜單項MyMenu→二級菜單項Execute(ID_EXECUTE)一級菜單項MyMenu→二級菜單項Font(ID_FONT)在CTestView::OnExecute()中MessageBox("菜單創(chuàng)建成功!");例2-941可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第41頁!WM_TIMER消息(1)WM_TIMER消息是一種計時器消息通過SetTimer()函數(shù)設(shè)置時鐘,當(dāng)預(yù)定的時間到達(dá),系統(tǒng)產(chǎn)生WM_TIMER消息,并通過參數(shù)表明是哪個時鐘用戶用于進(jìn)行周期性處理42可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第42頁!簡單動畫程序設(shè)計使用WM_TIMER消息異或方式制作動畫:SetROP2(R2_XORPEN)例2-1043可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第43頁!其他消息(2)在CTestView類定義中 voidOnHotkey(WPARAMwParam,LPARAMlParam);在CTestView類中 ON_MESSAGE(WM_HOTKEY,OnHotkey)在CTestView::OnCreate()中RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_ALT,'z');RegisterHotKey(m_hWnd,1002,MOD_CONTROL|MOD_ALT,'Z');44可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第44頁!自定義消息(1)用戶有時需要定義內(nèi)部消息,以區(qū)別系統(tǒng)定義的消息,完成用戶自定義的處理這些消息是用戶定義,系統(tǒng)不知道消息存在,通過PostMessage()或SendMessage()發(fā)送消息是一個整數(shù),系統(tǒng)已使用一部分。小于WM_USER的整數(shù)保留,大于的供用戶使用用戶自定義消息的方式

#defineWM_MYMESSAGEWM_USER+N45可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第45頁!自定義消息(3)聲明用戶自定義消息 #defineWM_MYMESSAGEWM_USER+1在CTestView類定義中 voidOnMyMessage(WPARAMwParam,LPARAMlParam);在CTestView類中,建立消息映射關(guān)系ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)例2-1146可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第46頁!自定義消息(5)在CTestView::OnLButtonUp()中

PostMessage(WM_MYMESSAGE,1,2);在CTestView::OnChar()中

SendMessage(WM_MYMESSAGE,3,4);47可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第47頁!有趣的分形理論(2)voidCTestView::OnDraw(CDC*pDC){CRectrect;this->GetClientRect(&rect);intiOx=rect.right/2;intiOy=rect.bottom/2;intiWidth=rect.right-rect.left;intiHeight=rect.bottom-rect.top;intiR=(iWidth>iHeight?iHeight:iWidth)/3;CStringstr;str.Format("單文檔,View(%d,%d,%d,%d)",rect.left,rect.top,rect.right,rect.bottom);pDC->TextOut(0,0,str);pDC->Ellipse(iOx-iR,iOy-iR,iOx+iR,iOy+iR);pDC->SetPixel(iOx,iOy,0x000000);CPointA,B,C,D,E;A.x=iOx;A.y=iOy-iR;B.x=int(iOx+iR*cos(c_dPi/10));B.y=int(iOy-iR*sin(c_dPi/10));C.x=int(iOx+iR*cos(3*c_dPi/10));C.y=int(iOy+iR*sin(3*c_dPi/10));D.x=int(iOx-iR*cos(3*c_dPi/10));D.y=int(iOy+iR*sin(3*c_dPi/10));E.x=int(iOx-iR*cos(c_dPi/10));E.y=int(iOy-iR*sin(c_dPi/10));pDC->MoveTo(A);pDC->LineTo(C);pDC->LineTo(E);pDC->LineTo(B);pDC->LineTo(D);pDC->LineTo(A);}48可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第48頁!第2次作業(yè)編程實現(xiàn)鍵盤鼠標(biāo)測試程序,滿足以下要求:按下鍵盤任意鍵,屏幕顯示按鍵信息單擊鼠標(biāo)左鍵,屏幕顯示鼠標(biāo)信息假設(shè)鼠標(biāo)右鍵失靈,用Ctrl+鼠標(biāo)左鍵代替自定義WM_MY_MESSAGE消息,帶50和100兩個參數(shù),由“?”鍵激活,屏幕顯示相應(yīng)信息編程實現(xiàn)SmallBall程序49可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第49頁!VisualC++6.0平臺(3)可創(chuàng)建的項目類型項目類型說明Win32ApplicationWin32應(yīng)用程序Win32ConsoleApplicationWin32控制臺程序Win32Dynamic-LinkLibraryWin32動態(tài)鏈接庫Win32StaticLibraryWin32靜態(tài)庫MFCAppWizard(exe)MFC可執(zhí)行程序MFCAppWizard(dll)MFC動態(tài)鏈接庫MFCActiveXControlWizardActiveX控件程序50可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第50頁!VisualC++6.0平臺(5)可創(chuàng)建的文件類型文件類型說明C++SourceFileC++源文件C++HeaderFileC++頭文件TextFile文本文件ResourceTemplate資源模板文件BitmapFile位圖文件CursorFile光標(biāo)文件IconFile圖標(biāo)文件51可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第51頁!VisualC++6.0平臺(7)MFCClassWizard52可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第52頁!程序調(diào)試與運行(2)Debugger可以完成的工作:設(shè)置斷點單步執(zhí)行代碼監(jiān)視變量、寄存器和內(nèi)存查看匯編代碼和調(diào)用堆棧修改代碼和變量值53可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第53頁!程序調(diào)試與運行(4)例2-154可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第54頁!項目的概念(2)版本類型Debug版本產(chǎn)生調(diào)試信息,便于程序調(diào)試與運行Release版本不產(chǎn)生調(diào)試信息,代碼簡短且經(jīng)過優(yōu)化,程序執(zhí)行效率較高55可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第55頁!項目的概念(4)項目文件類型*.dsp項目中所有內(nèi)容*.dsw工作區(qū)中所有項目*.clwClassWizard信息*.rc資源描述信息Resource.h所有資源符號定義StdAfx.h和.cpp建立預(yù)編譯頭文件/res各種資源存放的目錄56可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第56頁!MFC類的組織結(jié)構(gòu)(2)根類(CObject)應(yīng)用程序結(jié)構(gòu)類(CCmdTarget、CWinThread、CWinApp、CDocument)可視對象類(CWnd、CView、CMenu、CDialog、控件類、CControlBar、CGdiObject)通用類(CFile、CException、CArray)57可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第57頁!根類與應(yīng)用程序類(2)CWinApp類的繼承關(guān)系CCmdTarget:MFC消息映射基類CWinThread:MFC線程操作基類58可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第58頁!根類與應(yīng)用程序類(4)文檔與視圖文檔對象由文檔模板創(chuàng)建,管理應(yīng)用程序的數(shù)據(jù),包括文檔創(chuàng)建、打開與保存文檔模板及基類:CDocTemplate:文檔模板基類CSingleDocTemplate:SDI文檔模板CMultiDocTemplate:MDI文檔模板CDocument:專用文檔基類59可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第59頁!可視對象類(2)視圖類CViewCView類是MFC視圖基類,實現(xiàn)框架窗口中的客戶區(qū)60可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第60頁!可視對象類(4)菜單類CMenuCMenu類是MFC菜單類,實現(xiàn)菜單界面對話框類CDialogCFileDialog:文件存取對話框CColorDialog:顏色選擇對話框CFontDialog:字體選擇對話框CPrintDialog:文件打印對話框CFindReplaceDialog:文本查找對話框61可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第61頁!可視對象類(6)控件條類CControlBarCControlBar是控件欄基類,實現(xiàn)工具條、狀態(tài)條與浮動對話框CControlBar派生類CStatusBar:狀態(tài)條CToolBar:帶位圖按鈕的工具條CDialogBar:控件條形式的浮動對話框62可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第62頁!可視對象類(8)設(shè)備描述環(huán)境類CDC主要用來實現(xiàn)窗口繪制CDC派生類CPaintDC:繪圖設(shè)備描述環(huán)境CClientDC:客戶區(qū)的設(shè)備描述環(huán)境CWindowDC:窗口的設(shè)備描述環(huán)境CMetaFileDC:元文件的設(shè)備描述環(huán)境63可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第63頁!通用類(2)異常類CExceptionCNotSupportException:不支持異常CMemoryException:內(nèi)存異常CFileException:文件異常CResourceException:資源異常COleException:OLE異常CDBException:數(shù)據(jù)庫異常CUserException:用戶操作異常64可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第64頁!OLE類OLE是對象鏈接與嵌入,對象服務(wù)體系結(jié)構(gòu)普通類:COleDocument、COleItem客戶類:COleClientDoc、COleClientItem服務(wù)類:COleServer、COleTemplate可視編輯容器類:COleLinkingDoc數(shù)據(jù)傳輸類:COleDropSource、COleTarget、COleDataSource、COleDataObject對話類:COleInsertDialog65可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第65頁!MFC全局函數(shù)以Afx為前綴的函數(shù)函數(shù)名功能AfxAbort終止一個應(yīng)用程序AfxBeginThread創(chuàng)建并執(zhí)行一個線程AfxEndThread終止正在執(zhí)行的線程AfxMessageBox彈出一個消息框AfxGetApp返回當(dāng)前應(yīng)用程序?qū)ο蟮闹羔楢fxGetInstanceHandle返回當(dāng)前應(yīng)用程序?qū)ο蟮木浔鶤fxRegisterWndClass注冊一個窗口類66可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第66頁!MFC向?qū)Чδ?2)第3步:OLE與ActiveX第4步:用戶界面67可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第67頁!MFC向?qū)Чδ?4)SingleDocumentNoDatabaseNoOLEToolBarStatusBarSystemButton68可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第68頁!MFC程序框架分析(2)Test.cpp

CTestApptheAppBOOLCTestApp::InitInstance()WinMain.cpp

pThread->InitInstance()nReturnCode=pThread->Run()AfxWinTerm()69可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第69頁!MFC程序框架分析(4)每次啟動新的應(yīng)用程序,WinMain函數(shù)都調(diào)用InitInstance()創(chuàng)建并注冊文檔模板CSingleDocTemplate*pDocTemplate;pDocTemplate=newCSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(CTestDoc),RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CTestView));AddDocTemplate(pDocTemplate);70可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第70頁!MFC程序框架分析(6)InitInstance():初始化應(yīng)用程序Run():啟動消息循環(huán)OnIdle():空閑處理ExitInstance():終止應(yīng)用程序71可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第71頁!文檔模板(2)參數(shù)名含義

WindowTitle標(biāo)題欄中的應(yīng)用程序名

DocName

默認(rèn)文件名的固定部分

FileNewName

文檔類型的名字(多文檔情況)

FilterName

文檔類型和通配符過濾器的描述

FilterExt

文檔文件的擴(kuò)展名

RegFileTypeId

注冊表中登記的文檔類型

RegFileTypeName

注冊表中登記的文檔類型名資源符號串72可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第72頁!消息的概念消息處理機(jī)制是Windows核心,它是應(yīng)用程序運行的動力來源消息是系統(tǒng)定義的32位值,它唯一定義一個事件,向Windows系統(tǒng)發(fā)出一個通知,告訴應(yīng)用程序某個事件發(fā)生73可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第73頁!消息映射表//TestView.hclassCTestView:publicCView{protected://{{AFX_MSG(CTestView)afx_msgvoidOnLButtonDown(UINTnFlags,CPointpoint);afx_msgvoidOnEditPaste();//}}AFX_MSGDECLARE_MESSAGE_MAP()};//TestView.cppBEGIN_MESSAGE_MAP(CTestView,CView)//{{AFX_MSG_MAP(CTestView)ON_WM_LBUTTONDOWN()ON_COMMAND(ID_EDIT_PASTE,OnEditPaste)//}}AFX_MSG_MAPEND_MESSAGE_MAP()74可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第74頁!消息控制機(jī)制(2)鼠標(biāo)控制消息CDC*pDC=GetDC();pDC->TextOut(point.x,point.y,"MouseClicked!");ReleaseDC(pDC);75可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第75頁!消息控制機(jī)制(4)菜單控制消息CDC*pDC=GetDC();pDC->TextOut(20,120,"MenuClicked!");ReleaseDC(pDC);76可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第76頁!趣味性例子(2)voidCMyTreeView::OnDraw(CDC*pDC){intnTotalPoints=32000;//打印nTotalPoints個點CRectrect;GetClientRect(&rect); intnX=rect.right/2;//(nX,nY)記錄樹的根坐標(biāo)intnY=rect.bottom*5/6;intnScale=(rect.right>rect.bottom?rect.bottom:rect.right)/15;COLORREFcrColor=0x00FF00;doubledX=0,dY=0;doubledP;for(inti=0;i<nTotalPoints;i++){ dP=1.0*rand()/RAND_MAX;if(dP<=0.01){dX=0;dY=0.16*dY;}77可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第77頁!消息的種類(1)Windows系統(tǒng)將各種事件以消息形式發(fā)送給目標(biāo),目標(biāo)根據(jù)消息內(nèi)容進(jìn)行處理目標(biāo)窗口消息類型參數(shù)wParam參數(shù)lParam78可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第78頁!消息處理過程(1)標(biāo)準(zhǔn)Windows消息不通過命令目標(biāo)鏈,由發(fā)送消息的窗口處理,處理函數(shù)在相應(yīng)類中定義,通過AFX_MSG區(qū)分//{{AFX_MSG(CTestView)afx_msgintOnCreate(LPCREATESTRUCTlpCreateStruct);afx_msgvoidOnDestroy();afx_msgvoidOnLButtonDown(UINTnFlags,CPointpoint);//}}AFX_MSG79可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第79頁!消息處理過程(3)命令處理順序接收命令的類命令處理順序MDI主邊框窗口當(dāng)前MDI子窗口→MDI主邊框窗口→應(yīng)用程序SDI主邊框窗口或MDI子邊框窗口當(dāng)前視圖→SDI主邊框窗口或MDI子邊框窗口→應(yīng)用程序視圖視圖→視圖相關(guān)文檔文檔文檔→文檔相關(guān)模板對話框?qū)υ捒颉鷮υ捒蚋复翱凇鷳?yīng)用程序80可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第80頁!窗口消息(2)添加WM_CREATE消息ClassWizard→MessageMaps→CTestView→WM_CREATE→AddFunction編寫WM_CREATE的響應(yīng)函數(shù)CTestView::OnCreate()中MessageBox("完成窗口初始化!");添加WM_DESTROY消息CTestView::OnDestory()中MessageBox("完成窗口銷毀!");例2-681可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第81頁!窗口消息(4)在CTestView類定義中在CTestView構(gòu)造函數(shù)中在CTestView::OnDraw()中m_Num=0;//初始化private:intm_Num;m_Num++;CStringstr;str.Format("窗口重繪次數(shù):%d",m_Num);pDC->TextOut(0,0,str);pDC->SelectStockObject(GRAY_BRUSH);pDC->Ellipse(0,20,200,220);82可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第82頁!鼠標(biāo)消息(1)當(dāng)用戶對鼠標(biāo)進(jìn)行操作時,會產(chǎn)生對應(yīng)的消息,系統(tǒng)將消息發(fā)送給對應(yīng)窗口鼠標(biāo)消息主要包括:WM_MOUSEMOVE鼠標(biāo)移動WM_LBUTTONDOWN鼠標(biāo)左鍵按下WM_RBUTTONDOWN鼠標(biāo)右鍵按下WM_LBUTTONUP鼠標(biāo)左鍵釋放WM_RBUTTONUP鼠標(biāo)右鍵釋放WM_LBUTTONDBLCLK鼠標(biāo)左鍵雙擊83可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第83頁!鼠標(biāo)消息(3)在CTestView::OnLButtonDown()中窗口最小化,然后最大化。哪些信息保留,哪些信息消失?為什么?如何保留最后一次鼠標(biāo)單擊信息?例2-7

CDC*pDC=GetDC();pDC->TextOut(point.x,point.y,"MouseClicked!");ReleaseDC(pDC);84可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第84頁!鼠標(biāo)消息(5)在CTestView::OnLButtonDown()中在CTestView::OnDraw()中m_Pos=point;if(nFlags&MK_CONTROL)m_Des="CTRL+單擊鼠標(biāo)左鍵";elsem_Des="單擊鼠標(biāo)左鍵";Invalidate(true);pDC->TextOut(m_Pos.x,m_Pos.y,m_Des);85可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第85頁!鍵盤消息(1)用戶對鍵盤進(jìn)行操作,產(chǎn)生相應(yīng)的鍵盤消息,系統(tǒng)將消息發(fā)送給相應(yīng)窗口鍵盤消息主要包括:WM_KEYDOWN:鍵盤按下WM_KEYUP:鍵盤彈起WM_CHAR:輸入一個字符86可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第86頁!鍵盤消息(3)特殊鍵處理,例如F1、F2、↑、↓等BOOLCTestView::PreTranslateMessage(MSG*pMsg){if(pMsg->message==WM_KEYDOWN){if(pMsg->wParam==VK_F1)MessageBox("按下F1鍵");if(pMsg->wParam==VK_UP)MessageBox("按下↑鍵");}}87可視化編程課件02MF共96頁,您現(xiàn)在瀏覽的是第87頁!菜單與工具欄消息(2)添加工具欄消息Resour

溫馨提示

  • 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

提交評論