CN103544018B - wxWidgets框架下大规模组件自绘制的快速处理方法 - Google Patents

wxWidgets框架下大规模组件自绘制的快速处理方法 Download PDF

Info

Publication number
CN103544018B
CN103544018B CN201310529590.2A CN201310529590A CN103544018B CN 103544018 B CN103544018 B CN 103544018B CN 201310529590 A CN201310529590 A CN 201310529590A CN 103544018 B CN103544018 B CN 103544018B
Authority
CN
China
Prior art keywords
event
drafting
function
assembly
signal
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201310529590.2A
Other languages
English (en)
Other versions
CN103544018A (zh
Inventor
刘贵华
范海鹏
文均波
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
VOLANS TECHNOLOGY DEVELOPMENT Corp
Original Assignee
VOLANS TECHNOLOGY DEVELOPMENT Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by VOLANS TECHNOLOGY DEVELOPMENT Corp filed Critical VOLANS TECHNOLOGY DEVELOPMENT Corp
Priority to CN201310529590.2A priority Critical patent/CN103544018B/zh
Publication of CN103544018A publication Critical patent/CN103544018A/zh
Application granted granted Critical
Publication of CN103544018B publication Critical patent/CN103544018B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Studio Circuits (AREA)

Abstract

本发明涉及wxWidgets组件的绘制处理技术,其公开了一种wxWidgets框架下大规模组件自绘制的快速处理方法,解决现有技术中采用多个自定义组件挂载多个挂载事件表来处理不同的组件的自定义绘制,导致增加程序代码的长度,降低了开发效率也增加了维护的难度的问题。该方法包括:定义事件挂载表类,在所述事件挂载表类的成员变量中保存自绘制组件对象的指针,事件挂载表类对象在接收到自绘制的事件时通过相应事件处理函数将自绘制组件对象的指针和接收到的事件转发给对应的图形绘制槽函数,从而实现组件的自定义绘制。本发明适用于对大规模组件的自定义绘制的快速处理。

Description

wxWidgets框架下大规模组件自绘制的快速处理方法
技术领域
本发明涉及wxWidgets组件的绘制处理技术,特别涉及wxWidgets框架下大规模组件自绘制的快速处理方法。
背景技术
目前的应用程序开发,都极注重用户界面的设计,漂亮精简的应用程序广受用户的喜爱。同样,在目前C++的图形用户界面程序开发框架中,wxWidgets,因其可视化的组件开发方式,而受到广大程序员的喜爱,被应用到各种领域。
现有技术中关于wxWidgets组件自绘制方式有两种:一种是从wxWindow或wxControl继承,实现自己的自定义绘制函数,主要就是处理wxEVT_PAINT(绘制)和wxEVT_ERASE_BACKGROUND(擦除背景)事件;另一种方法是直接采用wxPanel控件(wxWindow类及其子类都可以,但wxPanel在wxFormbuilder可视化设计环境中,能以可视化的方式进行布局,从而减轻界面布局的工作),然后使用挂载事件表的方法来处理wxEVT_PAINT和wxEVT_ERASE_BACKGROUND事件。
上述两种处理方式相比而言,采用挂载事件表的处理方式更加简单、灵活;但由于不同的组件需要不同的绘制方法,因此大多数程序里就有很多不同的事件表,对于现代的图形化界面发展趋势,采用这种事件表来开发程序,效率也不是很高,维护仍然比较麻烦。
发明内容
本发明所要解决的技术问题是:提出一种wxWidgets框架下大规模组件自绘制的快速处理方法,解决现有技术中采用多个自定义组件挂载多个挂载事件表来处理不同的组件的自定义绘制,导致增加程序代码的长度,降低了开发效率也增加了维护难度的问题。
本发明解决上述技术问题所采用的技术方案是:
wxWidgets框架下大规模组件自绘制的快速处理方法,包括:
定义事件挂载表类,在所述事件挂载表类的成员变量中保存自绘制组件对象的指针,事件挂载表类对象在接收到自绘制的事件时通过相应事件处理函数将自绘制组件对象的指针和接收到的事件转发给对应的图形绘制槽函数,从而实现组件的自定义绘制。
进一步,所述自绘制事件包括:绘制事件和擦除背景事件;所述相应事件处理函数包括:绘制事件处理函数和擦除背景事件处理函数;所述对应的图形绘制槽函数包括:绘制槽函数和擦除背景槽函数。
进一步,所述事件挂载表类中有三个成员变量,其中一个成员变量保存自绘制组件对象的指针,另外两个成员变量分别为绘制信号和擦除背景信号。
进一步,所述绘制事件处理函数用于将绘制事件、自绘制组件对象的指针添加到绘制信号中,并将该绘制信号转发给绘制槽函数;所述擦除背景事件处理函数用于将擦除背景事件、自绘制组件对象的指针添加到擦除背景信号中,并将该擦除背景信号转发给擦除背景槽函数。
进一步,该方法还包括:
在窗口初始化时,挂接事件表对象,初始化绘制信号和擦除背景信号,所述事件表对象为所述事件挂载表类的对象实例。
进一步,挂接事件表对象,初始化绘制信号和擦除背景信号的具体方式为:
用自绘制组件的指针作为构造函数的参数,创建一个事件挂载表类实例对象;
将该实例对象的绘制信号连接到绘制槽函数;
将该实例对象的擦除背景信号连接到擦除背景槽函数;
将该实例对象压入自定义绘制组件的事件表栈中。
进一步,该方法还包括:
在窗口销毁的时候,自绘制组件对象弹出已挂接的事件表。
本发明的有益效果是:采用单一简单的事件挂载表类,实现绘制事件到信号的转发,使得原本复杂的组件自定义绘制变成简单的函数调用,在很大程度上提高程序员的开发效率,节省了开发时间。
具体实施方式
本发明旨在提出一种wxWidgets框架下大规模组件自绘制的快速处理方法,解决现有技术中采用多个自定义组件挂载多个挂载事件表来处理不同的组件的自定义绘制,导致增加程序代码的长度,降低了开发效率也增加了维护的难度的问题。
本发明的核心思想是:为了使单一的事件挂载表类能实现不同组件的自定义绘制,我们需要在类成员变量中保存不同组件的实例。采用信号/槽模式,在事件挂载表类对象收到绘制事件时,通过信号/槽机制连接到真实的绘制函数上,把组件的实例和接收到的事件作为参数传递给真实的图形绘制函数,从而实现组件自定义绘制。
下面结合具体实施方式对本发明的方案作进一步的描述:
对于事件挂载表类的实现方式如下:定义一个事件挂载表类(假设名为CustomPaintHandler,从库中wxEvtHandler类继承),用来接收自绘制的两个事件,即绘制事件和擦除背景事件。
在这个事件挂载表类中,有三个成员变量,其中成员变量m_pWindow保存自绘制组件对像的指针,类型为wxWindows*。在这个事件挂载类的构造函数中将自定义绘制对象的指针作为参数,保存在m_pWindows变量中;另外两个成员变量,代表两个信号,分别表示绘制信号和擦除背景信号。
两个信号成员定义如下(这里采用BOOST库里的信号):
boost::signals2::signal<void(wxWindow*,wxPaintEvent&)>m_sigOnPaint;
boost::signals2::signal<void(wxWindow*,wxEraseEvent&)>m_sigOnErase;
m_sigOnPaint信号对应绘制事件,当有绘制事件发生时,发送这个信号。
m_sigOnErase信号对应擦除背景事件,当有擦除背景事件发生时,发送这个信号。
在这个事件挂载表类中,采用绘制事件处理函数和擦除背景事件处理函数来分别处理绘制消息和擦除背景消息事件。这两个事件处理函数主要作用是进行信号转发:在绘制事件处理函数中发送绘制信号,在擦除背景事件处理函数中发送擦除背景信号。对于发送绘制信号,第一个参数传递事件挂载表类的成员变量m_pWindow,第二个参数绘制事件的参数;对于发送擦除背景信号,第一个参数也是传递事件挂载表类的成员变量m_pWindow,第二参数是擦除背景事件的参数。
利用上述事件挂载表类实现组件自定义的实现步骤如下:
(1)在窗口中放置一个需自定义绘制的组件,如wxPanel*m_panelCustom。如果没有采用界面编辑软件来创建这个组件,还需要新建一个具体的组件实例;
(2)在窗口所在类中实现两个槽函数(绘制槽函数与擦除背景槽函数),与事件挂载表类中的信号相对应(可以只实现一个槽函数,但后面只能连接一个信号和槽),真正的绘制代码就放在槽函数里面。如下定义:
void OnPanelCustomPaintHandler(wxWindow*pWindow,wxPaintEvent&event);
void OnPanelCustomEraseHandler(wxWindow*pWindow,wxEraseEvent&event);
由于槽函数的参数里有自定义绘制组件的指针和事件,所以可以根据程序的实际需要做图形绘制。比如在绘制槽函数里把自定义绘制组件的指针传给wxBufferedPaintDC的构造函数来创建一个DC,用wxBufferedPaintDC::DrawRectangle绘制一个矩形图形。
(3)在窗口初始化的时候,挂接事件表对象(CustomPaintHandler的实例),重点是初始化两个信号。初始化包括:
用自定义绘制组件指针作为构造函数的参数,创建一个挂接事件表对像实例。
把挂接事件表对像实例的绘制信号连接到(2)中的绘制槽函数(如果定义了绘制槽函数)。
把挂接事件表对像实例的擦除背景信号连接到(2)中的擦除背景槽函数(如果定义了擦除背景槽函数)。
最后我们把这个事件表压入在自定义绘制组件的事件表栈中,这样当自定义绘制组件产生绘制事件和擦除背景事件时,就会进入到挂接事件表中这两个事件的处理函数中,再经过信号转发后进入槽函数,也就是真正的绘制函数,完成自定义绘制。
(4)在窗口销毁的时候,自定义绘制组件弹出已挂载的事件表。
当自定义绘制组件弹出事件表后,自定义绘制就不再起作用了。
相比现有技术,本发明的技术方案的优势体现在:
1、在处理自定义组件绘制的时候,不再需要单独继承基础组件或继承事件表类;
2、把多步骤的组件的自定义绘制实现简化为一两个实际绘制函数(即绘制槽函数和擦除槽函数,可以根据需要只实现一种,当然那样的话,只也能连接相对应的一个信号)。
3、在大规模的组件自绘制程序中,明显减少程序的代码长度,提高程序的编译速度和运行速度。

Claims (2)

1.wxWidgets框架下大规模组件自绘制的快速处理方法,其特征在于,包括:
定义事件挂载表类,在所述事件挂载表类的成员变量中保存自绘制组件对象的指针,事件挂载表类对象在接收到自绘制的事件时通过相应事件处理函数将自绘制组件对象的指针和接收到的事件转发给对应的图形绘制槽函数,从而实现组件的自定义绘制;
所述自绘制事件包括:绘制事件和擦除背景事件;所述相应事件处理函数包括:绘制事件处理函数和擦除背景事件处理函数;所述对应的图形绘制槽函数包括:绘制槽函数和擦除背景槽函数;
所述事件挂载表类中有三个成员变量,其中一个成员变量保存自绘制组件对象的指针,另外两个成员变量分别为绘制信号和擦除背景信号;
所述绘制事件处理函数用于将绘制事件、自绘制组件对象的指针添加到绘制信号中,并将该绘制信号转发给绘制槽函数;所述擦除背景事件处理函数用于将擦除背景事件、自绘制组件对象的指针添加到擦除背景信号中,并将该擦除背景信号转发给擦除背景槽函数;
该方法还包括:
在窗口初始化时,挂接事件表对象,初始化绘制信号和擦除背景信号,所述事件表对象为所述事件挂载表类中的对象实例;
挂接事件表对象,初始化绘制信号和擦除背景信号的具体方式为:
用自绘制组件的指针作为构造函数的参数,创建一个事件挂载表类实例对象;
将该实例对象的绘制信号连接到绘制槽函数;
将该实例对象的擦除背景信号连接到擦除背景槽函数;
将该实例对象压入自定义绘制组件的事件表栈中。
2.如权利要求1所述的wxWidgets框架下大规模组件自绘制的快速处理方法,其特征在于,该方法还包括:
在窗口销毁的时候,自绘制组件对象弹出已挂接的事件表。
CN201310529590.2A 2013-10-31 2013-10-31 wxWidgets框架下大规模组件自绘制的快速处理方法 Expired - Fee Related CN103544018B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310529590.2A CN103544018B (zh) 2013-10-31 2013-10-31 wxWidgets框架下大规模组件自绘制的快速处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310529590.2A CN103544018B (zh) 2013-10-31 2013-10-31 wxWidgets框架下大规模组件自绘制的快速处理方法

Publications (2)

Publication Number Publication Date
CN103544018A CN103544018A (zh) 2014-01-29
CN103544018B true CN103544018B (zh) 2016-09-28

Family

ID=49967499

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310529590.2A Expired - Fee Related CN103544018B (zh) 2013-10-31 2013-10-31 wxWidgets框架下大规模组件自绘制的快速处理方法

Country Status (1)

Country Link
CN (1) CN103544018B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1512370A (zh) * 2002-12-31 2004-07-14 ����̩ƽ 基于构件的用户自定义事件机制
CN101071375A (zh) * 2007-05-22 2007-11-14 腾讯科技(深圳)有限公司 一种界面开发系统及组合控件的方法
CN101882071A (zh) * 2009-05-07 2010-11-10 北京四方继保自动化股份有限公司 一种组态软件的画面设计方法
CN102981861A (zh) * 2012-12-12 2013-03-20 上海航天测控通信研究所 一种基于Qt的自定义控件的使用方法
CN103164204A (zh) * 2011-12-15 2013-06-19 北京新媒传信科技有限公司 基于Symbian系统的用户界面的生成方法和系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1512370A (zh) * 2002-12-31 2004-07-14 ����̩ƽ 基于构件的用户自定义事件机制
CN101071375A (zh) * 2007-05-22 2007-11-14 腾讯科技(深圳)有限公司 一种界面开发系统及组合控件的方法
CN101882071A (zh) * 2009-05-07 2010-11-10 北京四方继保自动化股份有限公司 一种组态软件的画面设计方法
CN103164204A (zh) * 2011-12-15 2013-06-19 北京新媒传信科技有限公司 基于Symbian系统的用户界面的生成方法和系统
CN102981861A (zh) * 2012-12-12 2013-03-20 上海航天测控通信研究所 一种基于Qt的自定义控件的使用方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
WxWidgets框架应用及其模块化开发;张羽;《硅谷》;20091130;第67页 *
利用wxWidgets工具包开发跨平台程序的研究;熊凯等;《莱阳农学院学报(自然科学版)》;20060228;第23卷(第2期);第147-149页 *

Also Published As

Publication number Publication date
CN103544018A (zh) 2014-01-29

Similar Documents

Publication Publication Date Title
MY189031A (en) Ceiling fan blade structure and ceiling fan
CN103034490B (zh) 一种基于Managed C实现WPF窗体与GDI窗体消息互操作的方法
CN103544018B (zh) wxWidgets框架下大规模组件自绘制的快速处理方法
CN110569135A (zh) 一种基于发布订阅模式的进程间通信方法及系统
CN102902526B (zh) 一种通过延时实现bmc及ip信息的自动化设置方法
CN103853938A (zh) 一种高通量测序数据处理及分析流程控制方法
CN102141929B (zh) 应用程序的运行方法、模拟器、宿主机及系统
CN103051728A (zh) 一种远程过程调用方法
CN114971689B (zh) 任务处理方法、装置、设备和存储介质
CN203051218U (zh) 贯流风叶
CN109471822A (zh) 一种基于多类型总线的dsp通用软件烧写装置
EP4086753A1 (en) Decision scheduling customization method and device based on information flow
CN203775333U (zh) 一种全数字无线会议系统
CN106751614A (zh) 一种3d打印材料及其制备方法
CN204646925U (zh) 一种弹簧连接扣
CN110213377B (zh) 在线生成webpack配置的方法
CN101989194A (zh) 无线通讯模块二次开发方法
CN105207889A (zh) 一种运行在即时通信平台上的机器人app应用方法
CN105354015A (zh) 一种多线程通讯技术
CN210957613U (zh) 一种工业机器人插头后方电线固定装置
CN203312635U (zh) 负荷开关柜二次模块化接线结构
CN103823659A (zh) 一种通讯多线程技术
CN108363681A (zh) 一种基于马尔可夫假设的零部件标准规格推荐方法
CN113112984B (zh) 智能音箱的控制方法、装置、设备及存储介质
CN207677595U (zh) 一种定子磁极安装结构

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
C53 Correction of patent of invention or patent application
CB02 Change of applicant information

Address after: The middle high tech Zone Yizhou road in Chengdu city of Sichuan province 610041 No. 1800 Tianfu Software Park G District 4 Building 8 layer

Applicant after: CHENGDU VOLANS TECHNOLOGY CO.,LTD.

Address before: The middle high tech Zone Yizhou road in Chengdu city of Sichuan province 610041 No. 1800 Tianfu Software Park G District 4 Building 8 layer

Applicant before: Volans Technology Development Corp.

COR Change of bibliographic data

Free format text: CORRECT: APPLICANT; FROM: CHENGDU VOLANS TECHNOLOGY DEVELOPMENT CORPORATION. TO: CHENGDU FEIYUXING TECHNOLOGY CO., LTD.

C53 Correction of patent of invention or patent application
CB02 Change of applicant information

Address after: The middle high tech Zone Yizhou road in Chengdu city of Sichuan province 610041 No. 1800 Tianfu Software Park G District 4 Building 7-8F

Applicant after: CHENGDU VOLANS TECHNOLOGY CO.,LTD.

Address before: The middle high tech Zone Yizhou road in Chengdu city of Sichuan province 610041 No. 1800 Tianfu Software Park G District 4 Building 8 layer

Applicant before: CHENGDU VOLANS TECHNOLOGY CO.,LTD.

C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20160928