公开/公告号CN103034490A
专利类型发明专利
公开/公告日2013-04-10
原文格式PDF
申请/专利权人 上海创图网络科技发展有限公司;
申请/专利号CN201210517801.6
申请日2012-12-05
分类号G06F9/44(20060101);
代理机构31225 上海科盛知识产权代理有限公司;
代理人赵志远
地址 200072 上海市闸北区广中西路777弄12号二楼A-27室
入库时间 2024-02-19 17:52:51
法律状态公告日
法律状态信息
法律状态
2023-04-07
专利权质押合同登记的生效 IPC(主分类):G06F 9/44 专利号:ZL2012105178016 登记号:Y2023310000076 登记生效日:20230321 出质人:上海创图网络科技股份有限公司 质权人:中国农业银行股份有限公司上海黄浦支行 发明名称:一种基于Managed C实现WPF窗体与GDI窗体消息互操作的方法 申请日:20121205 授权公告日:20160106
专利权质押合同登记的生效、变更及注销
2017-07-28
专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F9/44 变更前: 变更后: 申请日:20121205
专利权人的姓名或者名称、地址的变更
2016-01-06
授权
授权
2013-05-08
实质审查的生效 IPC(主分类):G06F9/44 申请日:20121205
实质审查的生效
2013-04-10
公开
公开
技术领域
本发明涉及一种界面制作相关技术,尤其是涉及一种基于Managed C实现 WPF窗体与GDI窗体消息互操作的方法。
背景技术
WPF是基于DirectX技术的图形系统,利用硬件加速及图形向量渲染,从呈 现效果及性能上大大改善了传统2D图形窗口用户体验,其完善的ui架构能快速 帮助程序开发出媲美Mac的酷炫界面。
在WPF中,传统的窗口概念已发生了改变,窗口也是其渲染系统中一个普通 的可视元素,并且与其它所有界面元素统一渲染,用户无法直接在这窗口区域绘制 自己图形(因为一个区域只能用一种方式来渲染)。
三维引擎或者其它的很多传统的应用程序,都是基于GDI的窗口句柄,截获 其重绘消息,将自定义的渲染结果呈现在窗口上,并通过GDI的消息机制获取用 户的输入,其中GDI(Graphics Device Interface)为图形设备接口,其为Windows 的子系统,负责在视讯显示器和打印机上显示图形。
随着计算机硬件快速发展,用户对软件的体验要求越来越高,GDI窗口及相关 的技术在开发用户图形界面上已渐渐显得力不从心。
利用WPF提供HWNDHOST技术,可以将GDI窗口嵌入到wpf中应用程序 中,在GDI窗口区域实现自定义渲染,而在非GDI区域实现各种用好的图形界面。
当前实现WPF窗体的方法有多种,不管是使用D3DImage还是使用 HWNDHOST技术,都普遍存在两者交互性差如,窗口大小变化时出现闪烁,应用 程序无法接收鼠标键盘一些特殊输入消息等问题。
发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种适用范围 广、扩展性好、操作方便的基于Managed C实现WPF窗体与GDI窗体消息互操作 的方法。
本发明的目的可以通过以下技术方案来实现:
一种基于Managed C实现WPF窗体与GDI窗体消息互操作的方法,其特征在 于,包括:
采用Managed c++创建一个GDI窗口,并提供相应的API,同时生成一个DLL; 在WPF应用程序中定义一个派生自HwndHost的窗口类,在该窗口类将DLL提供 的GDI作为其子窗口,并以委托方式实现GDI窗口中需要处理的消息。
具体过程如下:
a)采用c#定义一个派生自HwndHost的窗口类;
b)采用Managed c++注册一个GDI窗口,实现将.net程序传过来的委托函数转 化为c++可处理的函数指针;
c)判断是否注册成功,若为是,创建一个GDI窗口,并返回该窗口的句柄, 执行步骤d),否则,返回步骤b);
d)将GDI窗口作为HwndHost类的子窗口,得到一个在WPF中呈现自定义应 用程序的GDI子窗口;
e)将GDI子窗口放在WPF窗口上,该GDI子窗口和其它WPF控件一样放在 WPF窗口的任意位置;
f)GDI子窗口自定义图形渲染,并实现图形呈现的更新;同时WPF各个界面 控件根据WPF消息的机制及渲染机制实现接收、转发用户输入及界面呈现;
g)GDI窗口根据WPF用户输入期望的图形呈现,WPF界面同时将图形的属性 变化通过丰富的控件UI反馈给用户。
所述的派生自HwndHost的窗口类中包括窗口过程函数、鼠标构子处理函数和 键盘钩子处理函数。
所述的GDI子窗口根据窗口过程函数实现图形呈现的更新。
与现有技术相比,本发明具有以下优点:
1)适用范围广,提供独立于应用GDI窗口dll库,该dll可以很多windows 程序中使用;
2)扩展性好,使用Managed c++实现的dll,可以直接在Dot Net c#语言中直 接使用,避免使用p/invoke声明大量的API及结构体,也提供了更好的扩展性;
3)操作方便,将窗口过程在应用程序中实现,大大方便应用中各种消息处理 过程。
附图说明
图1为本发明实现的流程图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。
实施例
如图1所示,一种基于Managed C实现WPF窗体与GDI窗体消息互操作的方 法,包括;
采用Managed c++创建一个GDI窗口,并提供相应的API,同时生成一个DLL; 在WPF应用程序中定义一个派生自HwndHost的窗口类,在该窗口类将DLL提供 的GDI作为其子窗口,并以委托方式实现GDI窗口中需要处理的消息。
本发明的具体过程如下:
1)编写好GDI窗口类程序,并调试通过,以dll的方式输出;
2)在WPF程序中实现一个派生自HwndHost的窗口类,在该类中实现一个窗 口过程函数,提供窗口类的名称,将窗口过程函数及窗口类名作为参数,调用GDI 窗口创建子窗口,并子窗口作为HwndHost的子窗口;
3)在GDI窗口中实现自定义图形渲染,wpf窗口接收鼠标,键盘等各种用户输 入,并根据需求转发给GDI窗口,GDI窗口根据从程序中获取的条件更新渲染; 图形属性更新通过wpf属性绑定机制及时的反馈在程序界面上。
机译: 在Windows窗体上提供基于应用程序的系统和方法
机译: 在Windows窗体上提供基于应用程序的系统和方法
机译: 用于生成用于短窗体媒体内容模板的系统和方法