MFC调用WPF函数
2015-08-06 15:32
288 查看
1建立WPF工程
建立一个WPF工程,命名为WPFforMFC;
修改MainWindow.xaml代码:
2建立MFC工程
建立一个基于对话框的MFC工程,名为CallWPF;
在CallWPF上右键-》属性-》配置属性-》常规,将“公共语言运行时”该为“公共语言运行时支持(/clr)”;
在CallWPF上右键-》属性-》通用属性-》框架和引用,点击添加新引用,选择“项目”下的“WPFforMFC”,并确定;
在CallWPF上右键-》属性-》通用属性-》框架和引用,点击添加新引用,选择“.NET”下的“PresentationCore”、“PresentationFramework”、“WindowBase”(不能同时选择,一次只能添加一个),并点击确定;
3调用
在MFC项目的头文件文件夹中加入一个.h文件,命名为host.h。
在host.h中加入代码:
在CallWPFDlg.cpp中引入头文件“host.h”;
在Dialog的“确定”按钮的Click函数中加入代码:
4说明
ref : 创建一个对于在托管堆中对象的应用(reference class)
“^”: 追加到引用类型的声明中
C++/CLI中使用gcnew关键字表示在托管堆上分配内存,并且为了与以前的指针区分,用^来替换* ,就语义上来说他们的区别大致如下:
1. gcnew返回的是一个句柄(Handle),而new返回的是实际的内存地址.
2. gcnew创建的对象由虚拟机托管,而new创建的对象必须自己来管理和释放.
微软官方解释:
gcnew creates an instance of a managed type (reference or value type) on the garbage collected heap. The result of the evaluation of a gcnew expression is a handle (^) to the type being created.
gcnew 创建了一个实例在GC堆上,导致的结果就是一个句柄类型已经被创建。
5运行结果
建立一个WPF工程,命名为WPFforMFC;
修改MainWindow.xaml代码:
<Window x:Class="WPFforMFC.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Window.Background> <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1"> <GradientStop Color="Yellow" Offset="0.0"/> <GradientStop Color="Red" Offset="0.25"/> <GradientStop Color="Blue" Offset="0.75"/> <GradientStop Color="LightBlue" Offset="1.0"/> </LinearGradientBrush> </Window.Background> <TextBlock Text="Hello WPF!" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="21" Width="116" /> </Window>
2建立MFC工程
建立一个基于对话框的MFC工程,名为CallWPF;
在CallWPF上右键-》属性-》配置属性-》常规,将“公共语言运行时”该为“公共语言运行时支持(/clr)”;
在CallWPF上右键-》属性-》通用属性-》框架和引用,点击添加新引用,选择“项目”下的“WPFforMFC”,并确定;
在CallWPF上右键-》属性-》通用属性-》框架和引用,点击添加新引用,选择“.NET”下的“PresentationCore”、“PresentationFramework”、“WindowBase”(不能同时选择,一次只能添加一个),并点击确定;
3调用
在MFC项目的头文件文件夹中加入一个.h文件,命名为host.h。
在host.h中加入代码:
using namespace System::Windows; ref class WPFHost { public: static WPFforMFC::MainWindow^ WPFWindow; //WPFforMFC需要跟你的WPF工程名字一致,下同 }; void ShowWPFWindow() { WPFHost:: WPFWindow= gcnew WPFforMFC::MainWindow(); WPFHost:: WPFWindow->ShowDialog(); }
在CallWPFDlg.cpp中引入头文件“host.h”;
在Dialog的“确定”按钮的Click函数中加入代码:
ShowWPFWindow();
4说明
ref : 创建一个对于在托管堆中对象的应用(reference class)
“^”: 追加到引用类型的声明中
C++/CLI中使用gcnew关键字表示在托管堆上分配内存,并且为了与以前的指针区分,用^来替换* ,就语义上来说他们的区别大致如下:
1. gcnew返回的是一个句柄(Handle),而new返回的是实际的内存地址.
2. gcnew创建的对象由虚拟机托管,而new创建的对象必须自己来管理和释放.
微软官方解释:
gcnew creates an instance of a managed type (reference or value type) on the garbage collected heap. The result of the evaluation of a gcnew expression is a handle (^) to the type being created.
gcnew 创建了一个实例在GC堆上,导致的结果就是一个句柄类型已经被创建。
5运行结果
相关文章推荐
- mysql-proxy 读写分离
- Android SDK代理服务器解决国内不能更新下载问题
- HDU 2680 Choose the best route
- presto 文档
- VisualSVN Server搭建svn服务器 TotoiseSVN做客户端 或安装subclipse插件
- 机器学习大牛主页,这个分类比较杂
- ZOJ - 3279 Ants
- print的用法
- 数据结构基础(18) --哈希表的设计与实现
- Android 反编译工具简介
- 文件夹和文件的创建
- [转载]技术普及帖:你刚才在淘宝上买了一件东西
- xml文件有误
- 【Hades】ades是一个开源库,基于JPA和Spring构建,通过减少开发工作量显著的改进了数据访问层的实现
- 对于多线程两种方式的理解
- mysql Amoeba 配置
- Qt QTcpServer/QTcpSocke
- 数据结构基础(17) --二叉查找树的设计与实现
- 水晶报表
- [linux] uptime 命令中关于平均负载的解释