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

下載本文檔

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

文檔簡(jiǎn)介

1、MFC Windows 應(yīng)用程序課程設(shè)計(jì)MFC Windows應(yīng)用程序設(shè)計(jì)報(bào)告姓名:韋 傳 少班級(jí):計(jì)算機(jī)軟件2班學(xué)號(hào):040104010076日期:2007 10 - 15目錄引言:3第一步系統(tǒng)分析:3第二步系統(tǒng)的設(shè)計(jì):42.1建立發(fā)送者工程42.2編輯Sender菜單項(xiàng)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通過(guò)消息來(lái)實(shí)現(xiàn)Windows內(nèi)部進(jìn)程通信。摘 要:MFC以層次結(jié)構(gòu)組織起來(lái),比較龐雜,尤其是它的消息映射機(jī)制,更是涉及到很多底層的東西。本程序通過(guò)對(duì)消息映射機(jī)制進(jìn)行簡(jiǎn)要的分析,以便更好地了解MFC,進(jìn)行可視化編程。同時(shí)進(jìn)程間通信的實(shí)現(xiàn)也是windows編程中重要的組成部分,進(jìn)程間通信和數(shù)據(jù)交換有多種方式:消息、共享內(nèi)存、匿名(命名)管道等多種技術(shù),其中利用消息機(jī)制實(shí)現(xiàn)方便、應(yīng)用靈活而廣泛。Microsoft應(yīng)用編程接口(Application Programming Interface, API)提供了大量支持應(yīng)用程序間數(shù)據(jù)共

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

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

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

6、在編輯菜單下添加兩個(gè)菜單項(xiàng):【阻塞消息】和【非阻塞消息】其ID分別為:ID_EDIT_BLOCKMESSAGE和ID_EDIT_UNBLOCKMESSAGE。如圖3和圖4所示:圖3 阻塞消息菜單項(xiàng)的設(shè)置圖4 阻塞消息菜單項(xiàng)的設(shè)置2.3 添加消息響應(yīng)函數(shù)通過(guò)ClassWizard在視圖里為新增的菜單項(xiàng)【阻塞消息】和【非阻塞消息】添加消息響應(yīng)函數(shù)。過(guò)程如圖5和圖6所示。圖5 菜單項(xiàng)【阻塞消息】的消息響應(yīng)函數(shù)的設(shè)置圖6 菜單項(xiàng)【非阻塞消息】的消息響應(yīng)函數(shù)的設(shè)置2.4 添加響應(yīng)函數(shù)代碼分別添加菜單項(xiàng)【消息阻塞】和【非消息阻塞】的消息響應(yīng)函數(shù)的代碼如下:菜單項(xiàng)【消息阻塞】的消息響應(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); 菜單項(xiàng)【非消息阻塞】的消息響應(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保存前面的工程,并在新建一個(gè)名為Receiver的單文檔工程,其他采用默認(rèn)設(shè)置即可。如圖7所示。圖7 完成Receiver的單文檔工程的建立2.7添加Receiver工程代碼在工程Rerceiver的Class View欄中的類(lèi)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)行兩個(gè)程序,點(diǎn)擊

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論