导航:首页 > 仪器仪表 > cwpf仪表怎么用

cwpf仪表怎么用

发布时间:2025-03-29 08:29:52

1. 在MFC中使用WPF技术

一 介绍

本文将以一个实例来说明如何将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^ gHwndSource; static 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 = x; sourceParams >PositionY = y; sourceParams >Height = height; sourceParams >Width = width; sourceParams >ParentWindow = IntPtr(parent); sourceParams >WindowStyle = WS_VISIBLE | WS_CHILD; Globals::gHwndSource = gcnew System::Windows::Interop::HwndSource(*sourceParams); DateTime tm = DateTime::Now; Globals::gwcClock = gcnew WPFControls::AnimClock(); Globals::gwcClock >ChangeDateTime(tm Year tm Month tm Day tm Hour tm Minute tm Second); FrameworkElement^ myPage = Globals::gwcClock; Globals::gHwndSource >RootVisual = myPage; return (HWND) Globals::gHwndSource >Handle ToPointer(); }

因此 无论用户如何变化时钟 我们的MFC代码都会调用RefereshWPFControl()来刷新WPF时钟

void RefreshWPFControl() { FrameworkElement^ page; DateTime tm = DateTime::Now; Globals::gwcClock >ChangeDateTime(tm Year tm Month tm Day tm Hour tm Minute tm Second); page = Globals::gwcClock; Globals::gHwndSource >RootVisual = page; return; }

现在我们已经有了大部分我们需要的功能了 而最后的任务是在MFC对话框代码中找个地方调用HwndSource实现创建函数 当然 有很多地方可以做这个工作 但是OnCreate也许是最好的位置 在OnCreate事件句柄中调用GetHwnd()函数的代码如下

int CMFCHostWPFDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == ) return ; hwndWPF = GetHwnd(this >GetSafeHwnd() ); return ; }

四 结论 lishixin/Article/program/net/201311/11996

2. 能用C语言写程序吗例如WPF或能在win7上运行的软件

打开VS2010,新建一个工程,语言选择C#,再选择WPFApplication项目,确定之后就生成了一个最简单的WPF应用软件,


想要快点做出软件,我建议你直接用C#,然后去借本WPF的书入门下,想通过C语言做这个很麻烦很麻烦的,就不要想了(C语言了解下语法和和计算机思维就可以了)。一般的人在大学里都会向楼上的人说的一样,先用C语言做些什么贪吃蛇,俄罗斯方块之类的小游戏,但我强烈不推荐这样,C#比C语言简单得到,做软件出来也快得多,用C语言或者C++的话就得学习MFC(这个是微软很老很老的技术,不必再学了,WPF是微软最新的一带桌面编程框架),想做QQ就用WPF做一个QQ出来(相信我那不是很难),里面也只涉及到一些通信技术而已,网上找些资料很容易的,千万不要别大学里老师教C语言那些类似的笨方法消磨了人对计算机的兴趣~


不懂可以问我,就别再用VisualC++,MFC这些古董了,了解C#的语法,熟悉下WPF这个框架,做些自己喜欢的小软件来支持自己的兴趣才是的

3. wpf中怎么把用户控件中image的单击事件用委托的方法在窗体中实现

在WPF中,你可以使用事件和委托来实现用户控件中Image的单击事件。下面是一个简单的示例,展示如何在窗体中实现用户控件中Image的单击事件。
首先,在你的用户控件中,添加一个名为ImageClicked的事件。这个事件将用于在用户点击Image时触发。
xaml复制代码
<UserControl x:Class="YourNamespace.YourUserControl" ...>
<Image Source="your_image_source.png" Click="Image_Click"/>
</UserControl>
csharp复制代码
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace YourNamespace
{
public partial class YourUserControl : UserControl
{
public YourUserControl()
{
InitializeComponent();
}

// 添加ImageClicked事件
public event RoutedEventHandler ImageClicked;

private void Image_Click(object sender, RoutedEventArgs e)
{
// 当Image被点击时,触发ImageClicked事件
ImageClicked?.Invoke(this, e);
}
}
}
接下来,在你的窗体代码中,你可以订阅ImageClicked事件,并在事件处理程序中执行你想要的操作。
xaml复制代码
<Window x:Class="YourNamespace.YourWindow" ...>
<local:YourUserControl ImageClicked="YourUserControl_ImageClicked"/>
</Window>
csharp复制代码
using System.Windows;
using System.Windows.Controls;

namespace YourNamespace
{
public partial class YourWindow : Window
{
public YourWindow()
{
InitializeComponent();
}

private void YourUserControl_ImageClicked(object sender, RoutedEventArgs e)
{
// 在这里处理Image的单击事件
// 例如,显示一个消息框
MessageBox.Show("Image被点击了!");
}
}
}
这样,当用户点击用户控件中的Image时,窗体中定义的YourUserControl_ImageClicked方法将被调用,你可以在其中执行你想要的操作。

阅读全文

与cwpf仪表怎么用相关的资料

热点内容
怎么测试外机制冷剂缺少 浏览:971
笔记本机械硬盘用的什么接口 浏览:297
太阳能芯片要什么设备 浏览:122
发电自动调节励磁装置 浏览:957
游艇动力装置设计 浏览:263
电机堵转有哪些机械原因 浏览:154
深圳美克激光设备有限公司怎么样 浏览:182
课程设计测速装置设计 浏览:392
机械人的感知靠什么 浏览:265
大连滚子轴承怎么样 浏览:332
户外装置设计 浏览:751
企业如何申报设备补贴 浏览:293
电动车轴承锁怎么拆 浏览:499
kingtec制冷机控制面板怎么设置 浏览:80
rav4仪表灯全亮怎么修 浏览:574
监控设备怎么看带宽 浏览:463
立萃五金制品有限公司招聘 浏览:458
凌派保养仪表上标记怎么消掉 浏览:784
回转支承径向间隙检测装置的设计 浏览:946
文登五金批发市场在哪里 浏览:746