




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/IEC 23090-8:2025 EN Information technology - Coded representation of immersive media - Part 8: Network based media processing
- 【正版授權(quán)】 IEC 63119-1:2025 FR Information exchange for electric vehicle charging roaming service - Part 1: General
- 卒中相關(guān)知識課件
- 河南小升初鶴壁數(shù)學(xué)試卷
- 健康素養(yǎng)66項培訓(xùn)課件
- 貴陽市一模高三數(shù)學(xué)試卷
- 廣西欽州市初二數(shù)學(xué)試卷
- 2025屆廣東省惠州市惠東縣燕嶺學(xué)校高一物理第二學(xué)期期末質(zhì)量檢測試題含解析
- 健康科普課件要求
- 2025年上海市華東師范大學(xué)二附中物理高二第二學(xué)期期末質(zhì)量跟蹤監(jiān)視模擬試題含解析
- 直播廳租賃方案
- 倉庫管理知識培訓(xùn)圖文
- 婦產(chǎn)科醫(yī)患溝通課件
- 生產(chǎn)車間規(guī)章制度
- 門診病歷書寫模板全
- 湖南省對口招生考試醫(yī)衛(wèi)專業(yè)十年真題(2010-2019年)
- 八年級英語下冊完形填空、閱讀理解訓(xùn)練100題(含答案)
- 《公安機(jī)關(guān)人民警察內(nèi)務(wù)條令》
- 2023年云南特崗教師真題(小學(xué))
- 瀝青拌合站崗位職責(zé)
- 地下車庫鋼筋方案
評論
0/150
提交評論