一种基于ManagedC实现WPF窗体与GDI窗体消息互操作的方法

文档序号:6383297阅读:326来源:国知局
专利名称:一种基于Managed C实现WPF窗体与GDI窗体消息互操作的方法
技术领域
本发明涉及一种界面制作相关技术,尤其是涉及一种基于Managed C实现WPF窗体与GDI窗体消息互操作的方法。
背景技术
WPF是基于DirectX技术的图形系统,利用硬件加速及图形向量渲染,从呈现效果及性能上大大改善了传统2D图形窗口用户体验,其完善的Ui架构能快速帮助程序开发出媲美Mac的酷炫界面。在WPF中,传统的窗口概念已发生了改变,窗口也是其渲染系统中一个普通的可视元素,并且与其它所有界面元素统一渲染,用户无法直接在这窗口区域绘制自己图形(因为一个区域只能用一种方式来渲染)。三维引擎或者其它的很多传统的应用程序,都是基于GDI的窗口句柄,截获其重绘消息,将自定义的渲染结果呈现在窗口上,并通过GDI的消息机制获取用户的输入,其中⑶I (Graphics Device Interface)为图形设备接口,其为Windows的子系统,负责在视讯显示器和打印机上显示图形。随着计算机硬件快速发展,用户对软件的体验要求越来越高,GDI窗口及相关的技术在开发用户图形界面上已渐渐显得力不从心。利用WPF提供HWNDH0ST技术,可以将⑶I窗口嵌入到wpf中应用程序中,在⑶I窗口区域实现自定义渲染,而在非GDI区域实现各种用好的图形界面。当前实现WPF窗体的方法有多种,不管是使用D3DImage还是使用HWNDH0ST技术,都普遍存在两者交互性差如,窗口大小变化时出现闪烁,应用程序无法接收鼠标键盘一些特殊输入消息等问题。

发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种适用范围广、扩展性好、操作方便的基于Managed C实现WPF窗体与⑶I窗体消息互操作的方法。本发明的目的可以通过以下技术方案来实现一种基于Managed C实现WPF窗体与⑶I窗体消息互操作的方法,其特征在于,包括采用Managed c++创建一个⑶I窗口,并提供相应的API,同时生成一个DLL ;在WPF应用程序中定义一个派生自HwndHost的窗口类,在该窗口类将DLL提供的⑶I作为其子窗口,并以委托方式实现⑶I窗口中需要处理的消息。具体过程如下a)采用c#定义一个派生自HwndHost的窗口类;b)采用Managed c++注册一个⑶I窗口,实现将· net程序传过来的委托函数转化为C++可处理的函数指针;c)判断是否注册成功,若为是,创建一个⑶I窗口,并返回该窗口的句柄,执行步骤d),否则,返回步骤b);d)将⑶I窗口作为HwndHost类的子窗口,得到一个在WPF中呈现自定义应用程序的⑶I子窗口 ;e)将⑶I子窗口放在WPF窗口上,该⑶I子窗口和其它WPF控件一样放在WPF窗口的任意位置;
f)⑶I子窗口自定义图形渲染,并实现图形呈现的更新;同时WPF各个界面控件根据WPF消息的机制及渲染机制实现接收、转发用户输入及界面呈现;g)⑶I窗口根据WPF用户输入期望的图形呈现,WPF界面同时将图形的属性变化通过丰富的控件Π反馈给用户。所述的派生自HwndHost的窗口类中包括窗口过程函数、鼠标构子处理函数和键盘钩子处理函数。所述的⑶I子窗口根据窗口过程函数实现图形呈现的更新。与现有技术相比,本发明具有以下优点I)适用范围广,提供独立于应用⑶I窗口 dll库,该dll可以很多windows程序中使用;2)扩展性好,使用Managed c++实现的dll,可以直接在Dot Net c#语言中直接使用,避免使用p/invoke声明大量的API及结构体,也提供了更好的扩展性;3)操作方便,将窗口过程在应用程序中实现,大大方便应用中各种消息处理过程。


图1为本发明实现的流程图。
具体实施例方式下面结合附图和具体实施例对本发明进行详细说明。实施例如图1所不,一种基于Managed C实现WPF窗体与⑶I窗体消息互操作的方法,包括;采用Managed c++创建一个⑶I窗口,并提供相应的API,同时生成一个DLL ;在WPF应用程序中定义一个派生自HwndHost的窗口类,在该窗口类将DLL提供的⑶I作为其子窗口,并以委托方式实现⑶I窗口中需要处理的消息。本发明的具体过程如下I)编写好⑶I窗口类程序,并调试通过,以dll的方式输出;2)在WPF程序中实现一个派生自HwndHost的窗口类,在该类中实现一个窗口过程函数,提供窗口类的名称,将窗口过程函数及窗口类名作为参数,调用GDI窗口创建子窗口,并子窗口作为HwndHost的子窗口 ;3)在⑶I窗口中实现自定义图形渲染,wpf窗口接收鼠标,键盘等各种用户输入,并根据需求转发给GDI窗口,GDI窗口根据从程序中获取的条件更新渲染;图形属性更新通过wpf属性绑定机制及时的反馈在程序界面上。
权利要求
1.一种基于Managed C实现WPF窗体与⑶I窗体消息互操作的方法,其特征在于,包括 采用Managed c++创建一个⑶I窗口,并提供相应的API,同时生成一个DLL ;在WPF应用程序中定义一个派生自HwndHost的窗口类,在该窗口类将DLL提供的GDI作为其子窗口,并以委托方式实现⑶I窗口中需要处理的消息。
2.根据权利要求1所述的一种基于ManagedC实现WPF窗体与GDI窗体消息互操作的方法,其特征在于,具体过程如下 a)采用c#定义一个派生自HwndHost的窗口类; b)采用Managedc++注册一个⑶I窗口,实现将· net程序传过来的委托函数转化为c++可处理的函数指针; c)判断是否注册成功,若为是,创建一个GDI窗口,并返回该窗口的句柄,执行步骤d),否则,返回步骤b); d)将⑶I窗口作为HwndHost类的子窗口,得到一个在WPF中呈现自定义应用程序的GDI子窗口 ; e)将⑶I子窗口放在WPF窗口上,该⑶I子窗口和其它WPF控件一样放在WPF窗口的任意位置; f)GDI子窗口自定义图形渲染,并实现图形呈现的更新;同时WPF各个界面控件根据WPF消息的机制及渲染机制实现接收、转发用户输入及界面呈现; g)⑶I窗口根据WPF用户输入期望的图形呈现,WPF界面同时将图形的属性变化通过丰富的控件Π反馈给用户。
3.根据权利要求2所述的一种基于ManagedC实现WPF窗体与GDI窗体消息互操作的方法,其特征在于,所述的派生自HwndHost的窗口类中包括窗口过程函数、鼠标构子处理函数和键盘钩子处理函数。
4.根据权利要求3所述的一种基于ManagedC实现WPF窗体与GDI窗体消息互操作的方法,其特征在于,所述的GDI子窗口根据窗口过程函数实现图形呈现的更新。
全文摘要
本发明涉及一种基于Managed C实现WPF窗体与GDI窗体消息互操作的方法,包括采用Managed c++创建一个GDI窗口,并提供相应的API,同时生成一个DLL;在WPF应用程序中定义一个派生自HwndHost的窗口类,在该窗口类将DLL提供的GDI作为其子窗口,并以委托方式实现GDI窗口中需要处理的消息。与现有技术相比,本发明具有适用范围广、扩展性好、操作方便等优点。
文档编号G06F9/44GK103034490SQ20121051780
公开日2013年4月10日 申请日期2012年12月5日 优先权日2012年12月5日
发明者郑婉清, 林秀全, 张生言 申请人:上海创图网络科技发展有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1