1
打开vs2013,选择新建项目。也可以在文件选项中选择添加项目。
2
项目类型选项visual C#中的WPF应用程序。名字自己随意起,存放位置任意。点击完成。
3
点击完成后初始化是这个样子的,界面需要加载,时间根据电脑配置不同而不同。我们可以先熟悉界面各个部分的功能。
4
加载好之后会有一个窗口界面。比如文本框,按钮等等几乎所有控件都可以在工具箱中直接拖过来,直接可以使用。也可以在xaml界面框中自己编写,如果你熟悉html语言的话会上手很快的。
不会写xaml语言也没有关系,可以不使用。
5
拖好控件之后先布置界面。比如调整控件大小,位置,颜色,文本等等。
完成之后一定要记得为每个空间写名字,命名风格随意,怎么好记怎么来命名。
一定要有规律,以后方便编写代码。
6
界面设置好后就可以写代码,为程序添加功能。
界面只是躯壳,代码是灵魂。
如果你最喜欢布置界面,而编写代码困难建旦铅议向前端工程师发展。
7
在属性的旁边点击闪电符号,为控件添加事件。比如点击按钮,松开按钮等等很多事件。我们这里双击按钮控件,跳转到代码界面,岩蠢编写程序。这里以简单的整数类型为例,为了更加实用可以使用double类型的,只要会转化就行了。
8
编写完之后就可以运模枣好行程序了。
快捷键ctrl+F5。至此,一个简单的小学生计算器就大功告成了。
http://jingyan.baidu.com/article/d45ad148b1f7a869542b807e.html?st=2&os=0&bd_page_type=1&net_type=2
一 介绍
本文将以一个实例来说明如何将WPF技术集成在基于MFC的应用程序中 这种技术的主要目的是为了增强基于Win /MFC的应用程序的在图形方面的表现能力 本文所提供的演示程序将在MFC对话框架应用程序中显示一个WPF动画时钟 界面如图 所示
本文需要的开发工具和开发库 为了建立和运行demo程序 我们需要安装如下的组件
Visual Studio 或Visual Studio NET Framework 或 NET Framework
所需要的平台 demo程序必须在下面支持 NET Framework 的派贺差 *** 作系统平台上运行
Windows Vista Windows XP SP Windows Server SP
如果你是一名C++开发人员 并且想使用WPF技术来增强自己的基于Win /MFC应用程序 本文非常适合你 为了能从本文学习到更多的知识 我们需要熟悉VC++/CLi MFC XAML和C# 但是 如果我们不了解C#或XAML 我们仍然可以通过引用现成的DLL来使用WPF程序
二 什么是WPF
WPF是Windows Presentation Foundation的缩写 它是微软 NET Framework 的一个子系统 这种技术允许开发人员高效地创建可视化的应用程序 并改善用户体验 由于WPF的发布 使用Windows程序在富控件的设计 开发上更如虎添翼 WPF主要关注一套应用程序服务 用户接口 D和 D 矢量图 动拍碧画 数据绑字 音频 并提供一个在UI和商业逻辑之间的非常清晰的界限
WPF API是被管制的代码 但是大多数Win /MFC程序是非管制的C++代码 按著惯例 WPF API不能通过非常制程序调用 然后 通过使用VC编译器的/clr选项 我们可以建立一个由管制和非管制混合而面的系统 在这个系统中 我们可以使管制和非管制代码无缝地混合在一起
有一个要注意的是在C++工程中不允许编译XAML文件 因此 我们必须建立一个包含在本例中所需要的所有XAML而的C# DLL 然后在C++工程中包含这个Dll引用
有两种基本的技术可以融合WPF和Win /MFC代码
将WPF放到Win /MFC程序中 使用这种技术 开发人员可以使用WPF的高级图形能力来渲染Win /MFC应用程序
将Win /MFC放到WPF中 使用这种技术 开发人员可以在WPF中使用已经存在的
Win /MFC控件 并通过一定的机制来传递数据
在本文中将采用第一种方法
三 融合Win /MFC和WPF程序
上面部分所说的是本例的基本规则 下面在本节中将介绍如何编写具体的实现代码 在本例中 我首先会演示使用XAML和C#建立WPF内容 并在VC++中引用这个DLL
本例的目的是建立一个用于设置日期和时间的设置工具 其中动画部分使用WPF实现 程序的其他部分仍然使用MFC实现
这个演示程序由两部分组成 一个是MFCHostMPF(由VC++/MFC代码组成) 另一个是WPFControls(由XAML和C#代码组成) 这个MFCHostWPF工程将由WPFControls工程所产生的DLL作为一个外部的引用 如图 所示
向MFC工程中加入一个WPF引用 如图 和图 所示
三 在MFC应用程序中加入和WPF相尘皮关的代码
先提一下 gcnew关键字被用于建立一个管制类型的实例 在本例中将建立一个垃圾回收集合栈的实例 所有被gcnew分配的内存空间将被垃圾回收器自动管理 而开发人员并不需要为什么时间释放它们而 *** 心
为了使用WPF程序 关键是System::Windows::Interop::HwndSource类 这个类将在Win 窗口中使用WPF程序 因此 WPF程序可以作为MFC窗口的子窗口放到UI上 而在WPF对象和Win 窗口之间的通讯要通过引用C++程序中被存储的静态字段 这些静态字段的代码如下
ref class Globals { public: static System::Windows::Interop::HwndSource^ gHwndSourcestatic WPFControls::AnimClock^ gwcClock}
HWND hwndWPF // 和WPF相关的hwnd 为了建立一个HwndSource 首先需要建立一个HwndSourceParameters结构 这个结构需要如下的参数 类 窗口 窗口类型 窗口的初始位置 窗口的初始尺寸 父窗口 一但我们将HwndSourceParameters结构编写完 就可以将这个结构到HwndSource的构造方法HwndSource(HwndSourceParameters)中 最后 我们将WPF时钟的引用赋值给HwndSource对象的RootVisual属性 并通过调用Handle ToPointer()返回HwndSource的HWND 代码如下HWND GetHwnd(HWND parent int x int y int width int height) { System::Windows::Interop::HwndSourceParameters^ sourceParams = gcnew System::Windows::Interop::HwndSourceParameters ( MFCWPFApp )sourceParams >PositionX = xsourceParams >PositionY = ysourceParams >Height = heightsourceParams >Width = widthsourceParams >ParentWindow = IntPtr(parent)sourceParams >WindowStyle = WS_VISIBLE | WS_CHILDGlobals::gHwndSource = gcnew System::Windows::Interop::HwndSource(*sourceParams)DateTime tm = DateTime::NowGlobals::gwcClock = gcnew WPFControls::AnimClock()Globals::gwcClock >ChangeDateTime(tm Year tm Month tm Day tm Hour tm Minute tm Second)FrameworkElement^ myPage = Globals::gwcClockGlobals::gHwndSource >RootVisual = myPagereturn (HWND) Globals::gHwndSource >Handle ToPointer()}
因此 无论用户如何变化时钟 我们的MFC代码都会调用RefereshWPFControl()来刷新WPF时钟void RefreshWPFControl() { FrameworkElement^ pageDateTime tm = DateTime::NowGlobals::gwcClock >ChangeDateTime(tm Year tm Month tm Day tm Hour tm Minute tm Second)page = Globals::gwcClockGlobals::gHwndSource >RootVisual = pagereturn}
现在我们已经有了大部分我们需要的功能了 而最后的任务是在MFC对话框代码中找个地方调用HwndSource实现创建函数 当然 有很多地方可以做这个工作 但是OnCreate也许是最好的位置 在OnCreate事件句柄中调用GetHwnd()函数的代码如下int CMFCHostWPFDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == ) return hwndWPF = GetHwnd(this >GetSafeHwnd() )return }
四 结论 lishixinzhi/Article/program/net/201311/11996
在 C# WPF 中嵌入 EXE 应用程序的方法有多种。一种方法是使用 Process 类并调用悉前其 Start 方法来启动 EXE 应用程序,然后使用 WindowInteropHelper 类来将 EXE 应用程序窗口嵌入 WPF 窗口中。例如:
请注意,这只是一种可能的方法,并不一定适用于所有桥陆纳情况。如果您敏没需要更详细的帮助,请提供更多信息,例如您的目标和限制。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)