WINDOWS應(yīng)用程序設(shè)計報告_第1頁
WINDOWS應(yīng)用程序設(shè)計報告_第2頁
WINDOWS應(yīng)用程序設(shè)計報告_第3頁
WINDOWS應(yīng)用程序設(shè)計報告_第4頁
WINDOWS應(yīng)用程序設(shè)計報告_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、MFC Windows 應(yīng)用程序課程設(shè)計MFC Windows應(yīng)用程序設(shè)計報告姓名:韋 傳 少班級:計算機(jī)軟件2班學(xué)號:040104010076日期:2007 10 - 15目錄引言:3第一步系統(tǒng)分析:3第二步系統(tǒng)的設(shè)計:42.1建立發(fā)送者工程42.2編輯Sender菜單項52.3 添加消息響應(yīng)函數(shù)62.4 添加響應(yīng)函數(shù)代碼72.5 自定義消息82.6 新建工程Receiver82.7添加Receiver工程代碼92.8 工程Receiver中自定義消息92.9 添加消息映射代碼9第三步程序運(yùn)行結(jié)果:10 3.1運(yùn)行Swender:.103.2 Receive接收阻塞消息113.3 Recei

2、ve接收非阻塞消息11總結(jié):12參考文獻(xiàn):13題目:利用VC+6.0通過消息來實現(xiàn)Windows內(nèi)部進(jìn)程通信。摘 要:MFC以層次結(jié)構(gòu)組織起來,比較龐雜,尤其是它的消息映射機(jī)制,更是涉及到很多底層的東西。本程序通過對消息映射機(jī)制進(jìn)行簡要的分析,以便更好地了解MFC,進(jìn)行可視化編程。同時進(jìn)程間通信的實現(xiàn)也是windows編程中重要的組成部分,進(jìn)程間通信和數(shù)據(jù)交換有多種方式:消息、共享內(nèi)存、匿名(命名)管道等多種技術(shù),其中利用消息機(jī)制實現(xiàn)方便、應(yīng)用靈活而廣泛。Microsoft應(yīng)用編程接口(Application Programming Interface, API)提供了大量支持應(yīng)用程序間數(shù)據(jù)共

3、享和交換的機(jī)制,這些機(jī)制行使的活動稱為進(jìn)程間通信(InterProcess Communication, IPC),進(jìn)程通信就是指不同進(jìn)程間進(jìn)行數(shù)據(jù)共享和數(shù)據(jù)交換。本程序就是利用VC+6.0通過消息來實現(xiàn)內(nèi)部進(jìn)程通信。關(guān)鍵詞:消息驅(qū)動;消息映射;MFC 程序設(shè)計;進(jìn)程間通信。 引言:微軟公司提供的MFC基本類庫(Microsoft Foundation Classes),是進(jìn)行可視化編程時使用最為流行的一個類庫。MFC封裝了大部分Windows API函數(shù)和Windows控件,使得程序的開發(fā)變得簡單,極大的縮短了程序的開發(fā)周期。MFC獨創(chuàng)的Document/View框架結(jié)構(gòu),能夠?qū)⒐芾頂?shù)據(jù)的代

4、碼和顯示數(shù)據(jù)的程序代碼分開,并且設(shè)計了一套方便的消息映射和命令傳遞機(jī)制,方便程序員的開發(fā)使用。其中消息映射機(jī)制本身比較龐大和復(fù)雜,對它的分析和了解無疑有助于我們寫出更為合理的高效的程序。這里我們分析一下MFC的消息映射機(jī)制,以了解MFC是如何對Windows的消息加以封裝,方便用戶的開發(fā)。第一步系統(tǒng)分析:MFC是在C 的基礎(chǔ)上發(fā)展的,它是面向?qū)ο蟮拈_發(fā)工具。在以前的課程中我們已經(jīng)學(xué)習(xí)過C語言和C+ 語言,在這樣的基礎(chǔ)上我們再學(xué)習(xí)MFC可以使我們更好的掌握Windows應(yīng)用程序設(shè)計的基本方法和基本思想。本程序共有兩個工程,其中一個命名為Sender,用來給另一個工程(命名為Receiver)發(fā)送

5、控制消息;而工程Receiver用來接受Sender發(fā)來的消息,并且做出相應(yīng)的動作。第二步系統(tǒng)的設(shè)計:下面我們利用MFC及VisualC 6.0開發(fā)工具來具體地設(shè)計工程Sender和Receiver從而達(dá)到利用消息來實現(xiàn)進(jìn)程間通信的目的。2.1建立發(fā)送者工程通過MFC AppWizard新建一個單文檔工程文件,取名為Sender,如圖1所示,接著其他均采用VC默認(rèn)設(shè)置。最終如圖2所示完成工程的初步創(chuàng)建。圖1 設(shè)置Sender為單文檔圖2 完成工程Sender的創(chuàng)建2.2編輯Sender菜單項在新建的工程Sender的Resource View欄中雙擊Menu下的IDR_MAINFRAME,然后

6、在編輯菜單下添加兩個菜單項:【阻塞消息】和【非阻塞消息】其ID分別為:ID_EDIT_BLOCKMESSAGE和ID_EDIT_UNBLOCKMESSAGE。如圖3和圖4所示:圖3 阻塞消息菜單項的設(shè)置圖4 阻塞消息菜單項的設(shè)置2.3 添加消息響應(yīng)函數(shù)通過ClassWizard在視圖里為新增的菜單項【阻塞消息】和【非阻塞消息】添加消息響應(yīng)函數(shù)。過程如圖5和圖6所示。圖5 菜單項【阻塞消息】的消息響應(yīng)函數(shù)的設(shè)置圖6 菜單項【非阻塞消息】的消息響應(yīng)函數(shù)的設(shè)置2.4 添加響應(yīng)函數(shù)代碼分別添加菜單項【消息阻塞】和【非消息阻塞】的消息響應(yīng)函數(shù)的代碼如下:菜單項【消息阻塞】的消息響應(yīng)函數(shù) void CSe

7、nderView:OnEditBlockmessage() / TODO: Add your command handler code here CString str=Receiver; CWnd *pWnd=CWnd:FindWindow(NULL,str); If (pWnd!=NULL) pWnd-SendMessage(WM_MYMESSAGE,1,0); 菜單項【非消息阻塞】的消息響應(yīng)函數(shù) void CSenderView:OnEditBlockmessage() / TODO: Add your command handler code here CString str=Rece

8、iver; CWnd *pWnd=CWnd:FindWindow(NULL,str); If (pWnd!=NULL) pWnd-PostMessage(WM_MYMESSAGE,1,0); 2.5 自定義消息在視圖頭文件SenderView.h中添加自定義消息:#idefine WM_MYMESSAGE WM_USER + 1002.6 新建工程Receiver保存前面的工程,并在新建一個名為Receiver的單文檔工程,其他采用默認(rèn)設(shè)置即可。如圖7所示。圖7 完成Receiver的單文檔工程的建立2.7添加Receiver工程代碼在工程Rerceiver的Class View欄中的類Cre

9、ceiverApp中的函數(shù)InitInstance()末添加代碼如下: m_pMainWnd-ShowWindow(SW_SHOW);m_pMainWnd-UpdateWindow();m_pMainWnd-SetWindowText(Receiver);/這是添加的代碼2.8 工程Receiver中自定義消息在CmainFrame.h文件中自定義消息并添加如下代碼:#define WM_MYMESSAGE WM_USER + 100protected:/AFX_MSG(CMainFrame)afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct)

10、;afx_msg LRESULT OnSendDialog(WPARAM wParam,LPARAM lParam);2.9 添加消息映射代碼在CmainFrame.cpp文件中添加消息映射代碼:BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)/AFX_MSG_MAP(CMainFrame)/ NOTE - the ClassWizard will add and remove mapping macros here./ DO NOT EDIT what you see in these blocks of generated code !ON_WM_CREAT

11、E()ON_MESSAGE(WM_MYMESSAGE,OnSendDialog)/AFX_MSG_MAPEND_MESSAGE_MAP()并建立消息響應(yīng)函數(shù)OnSendDialog,代碼如下:LRESULTCMainFrame:OnSendDialog(WPARAM wParam,LPARAM lParam)if (wParam=0 & lParam=1) AfxMessageBox(我收到了Sender的阻塞命令!);if (wParam=1 & lParam=0) AfxMessageBox(我收到了Sender的非阻塞命令!);return 0;第三步程序運(yùn)行結(jié)果:最后運(yùn)行兩個程序,點擊

12、程序Sender編輯菜單下的【阻塞消息】菜單命令,程序Receiver將會接受到消息,并彈出“阻塞命令”的對話框提示,在沒有關(guān)閉對話框前無法對程序Sender進(jìn)行操作,層現(xiàn)阻塞狀態(tài)。點擊【非阻塞命令】菜單命令,程序Receiver將會受到消息,并彈出“非阻塞命令”的對話框提示,同時可對程序Sender繼續(xù)操作,層現(xiàn)非阻塞狀態(tài)。運(yùn)行結(jié)果如圖所示:3.1 運(yùn)行Sender首先運(yùn)行Sender如圖8所示圖8 運(yùn)行Sender的程序畫面3.2 Receive接收阻塞消息選擇編輯下的【阻塞消息】菜單項后在Receiver的運(yùn)行界面中得結(jié)果如圖9所示:圖9 Receiver 接受Sender的阻塞命令后的

13、運(yùn)行結(jié)果3.3 Receive接收非阻塞消息選擇編輯下的【非阻塞消息】菜單項后在Receiver的運(yùn)行界面中得結(jié)果如圖10所示:圖10 Receiver 接受Sender的非阻塞命令后的運(yùn)行結(jié)果總結(jié):MFC通過巧妙的宏定義把消息調(diào)用的過程給封裝起來,使用戶能夠通過ClassWizard方便的使用和處理Windows的各種消息。通過對MFC消息映射機(jī)制的分析,不僅能夠使我們更好的使用MFC類庫,同時,對于我們自己設(shè)計程序框架和類,無疑也有相當(dāng)大的幫助。進(jìn)程是裝入內(nèi)存并準(zhǔn)備執(zhí)行的程序,每個進(jìn)程都有私有的虛擬地址空間,由代碼、數(shù)據(jù)以及它可利用的系統(tǒng)資源(如文件、管道等)組成。多進(jìn)程/多線程是Windows操作系統(tǒng)的一個基本特征。這次課程設(shè)計中讓自己編碼的地方不多,大多數(shù)代碼都是自動生成。所以開發(fā)的速度很快,但是我們所做的程序都是及其簡單的,VC上手很容易,但是做到精通卻是一件很困難的事情

溫馨提示

  • 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

提交評論