在winform中嵌入mfc对话框设计实现

在winform中嵌入mfc对话框设计实现

ID:11128801

大小:477.00 KB

页数:11页

时间:2018-07-10

在winform中嵌入mfc对话框设计实现_第1页
在winform中嵌入mfc对话框设计实现_第2页
在winform中嵌入mfc对话框设计实现_第3页
在winform中嵌入mfc对话框设计实现_第4页
在winform中嵌入mfc对话框设计实现_第5页
资源描述:

《在winform中嵌入mfc对话框设计实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Winform中嵌入MFC对话框设计一.改造MFC应用程序要将MFC的对话框嵌入到Winform中,我们的对话框必须运行在MFC的MDI程序中,因此我们一开始就必须建立一个MFC的应用程序,然后再将其改造成MFC的动态连接库。如果我们一开始就建立MFC的动态连接库的话,还要自己添加MFC的MDI框架类,比较的麻烦。如图:对于MFC的类来说(例如CDocument,CView,CMainFrame)必须依赖于CWinApp才能初始化和运行。因此我们只能将整个应用程序嵌入到winform的应用程序中。如何实现呢?那就需要.net的托管C

2、++的支持了。我们在刚才改造好的MFC_App_View.dll(本例中改造的库)中,混入一些托管的C++类定义一些接口,通过这些接口来和Winform中的类进行通讯。这里我先将要添加的类以及接口列出来(包括一些非托管类):类对应文件CCmdUIHandlerCCmdUIHandler.h,CCmdUIHandler.cppICmdUITargetICmdUiTarget.hCLayoutViewCLayoutView.h//非托管类CDocManagerExDocManagerEx.h,DocManagerEx.cpp//非托管类

3、IFrameworkIFramework.hIWndManagerIwndManager.hIFrameworkImplMfcAppAdapter.hMfcAppAdapterMfcAppAdapter.h,MfcAppAdapter.cppMfcCommandMfcCommand.hCMFCTempCMFCTemp.h,CMFCTemp.cpp//非托管类CNotifyHookCnotifyHook.h,CnotifyHook.cpp//非托管类ViewCtrlViewCtrl.h,ViewCtrl.cpp添加了上述类之后,我们的

4、一个混合的Dll就初步改造完成了。为了使托管代码和非托管代码的混合Dll能够安全的运行,我们必须对Dll的属性进行一些相应的设置(如果不设置,编译时也会通不过),具体设置详情如下图:另外对于托管的C++类我们必须让他受到公共语言运行库的支持,在对应类的.cpp文件的属性中进行如下设置,如下图:由于ViewCtrl类是继承自WinformControl,必须添加命名空间的引用,因此在项目属性的通用属性中必须添加对应命名空间的引用,如下图:注意:在设置此项属性时,有时我们点击添加新引用按钮时,在弹出的对话框中找不到任何公共语言运行库的类

5、,这是因为编译器并不知道我们使用了托管C++类。我们可以先将Dll设为公共语言运行库支持,再来添加引用就可以了,添加完后必须记得将Dll设为不受公共语言运行库的支持,不然编译通不过。二.混合Dll的结构前面完成的只是宏观上的一些类的添加,及库的设置,现在要做的就是将Dll中的一些具体类进行修改,先看Dll的结构图:从上图还不能够很清晰的看到混合Dll是如何与winform进行交互的,但是我们可以知道,在MFC程序嵌入到winform中时MfcAppAdapter起着很中要的作用。在MfcAppAdapter中保存了Iframewor

6、kImpl(winfrom的应用程序框架),IwndManager(用控制MFC程序的激活),同时还有AttachApplication(IWndManager^wndManager)负责将MFC程序附加到Winform程序中,在MfcAppAdapter销毁时,将MFC程序从winform中退出。1.MfcAppAdapter为了辅助MfcAppAdapter的AttachApplication的实现,我们要在MFC_App_View.cpp中定义两个全局函数:BOOLAttachApplication(IFramework*fr

7、amework){AFX_MANAGE_STATE(AfxGetStaticModuleState());//获取当前模块状态CMFC_App_ViewApp*app=(CMFC_App_ViewApp*)AfxGetApp();returnapp->AttachApplication(framework);}BOOLDetachApplication(){AFX_MANAGE_STATE(AfxGetStaticModuleState());CMFC_App_ViewApp*app=(CMFC_App_ViewApp*)AfxGe

8、tApp();returnapp->DetachApplication();}同时要对CMFC_App_ViewApp::InitInstance()函数进行一些修改,如下:BOOLCMFC_App_ViewApp::InitInst

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。