深化C++ Builder之编写自己的元件-深化解析VCL担当、消息机制([VC/C++编程]
本文“深化C++ Builder之编写自己的元件-深化解析VCL担当、消息机制([VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
DYNAMIC函数
在上篇文章我们讲到了若何绘制元件,但是光绘制元件还是不够的,一个元件不光要有模样,还要可以处理、呼利用户输入,这就需求我们来处理键盘鼠标事件.
处理键盘鼠标事件一样像我们处理系统消息一样,比方WM_KEYDOWN等这样的消息,所以你可以一样像在Form中处理消息那样重载WndProc大概编写消息映射宏,全部的这些办法都可以用到元件中,但是我们没有不用,也没有必要这么做.VCL已经提我们预留了很多接口函数,我们只需求重载呼应虚拟函数便可以完成呼应事件的处理.
假如你要处理鼠标事件,那么你需求重写下列函数:
MouseDown
MouseUp
MouseMove
Click
假如你需求处理键盘,那么你需求处理下列函数:
KeyPress
KeyDown
KeyUp
关于键盘虚拟函数,你需求注意派生类必须担当自TCustomeControl(直接或间接,精确的说,也不一定)才能利用上面的虚拟函数.
上面的函数看起来和我们在计划Form时的函数差不多,但是他们有一个明显的差别,假如你重载他们仿佛不是那么简单,假如你看VCL源代码,它只写一个overide关键字来标示函数属性,但是在C++里这样就不行了,为什么呢?
我们先来看一下在VCL中的源代码:
procedure KeyDown(var Key: Word; Shift: TShiftState); dynamic;
procedure KeyUp(var Key: Word; Shift: TShiftState); dynamic;
procedure KeyPress(var Key: Char); dynamic;
基本上全部的这些虚拟(动态)函数都是这样申明的,可以在C++并没有dynamic这个关键字啊?为了注释这个问题,我们先来理解一下什么时dynamic函数:
在Delphi中,函数有virtual和dynamic两种多态方法,关于virtual和我们C++中的virtual没有辨别,而dynamic则不一样,dynamic仅保护一份虚拟办法表,当一个基类有多个多态函数,而这个基类又有大概被多次担当的时刻,利用dynamic申明的函数可以削减代码长度,不过dynamic和virtual的行为都是差不多的,virtual的速度要比dynamic快一些,dynamic要比virtual代码长度小.
假如你想深化研究一下这个问题,可以参考以下文章:
http://www.csdn.net/develop/Read_Article.asp?Id=14729
大概去borland的新闻组发问,一定能得到称心的答复.
我们知道在尺度C++中并没有dynamic关键字,所认为了C++ Builder能利用VCL的类,Borland做了扩大,我们可以直接利用DYNAMIC宏来实现动态函数,所以假如我们要在自己的派生类中重写这些消息处理函数,我们需求这样:
DYNAMIC void __fastcall MouseMove(Classes::TShiftState Shift, int X, int Y);
目前我们已经能画出元件,能处理元件的消息,基本上我们已经可以编写一些简单的元件了.在持续下面的内容之前,也作为这篇文章的完毕,我们来实际编写一个简单的元件.这里我们假定你已经有了一定编写元件的经验,假如你看不懂呼应代码也没有关系,我会在背面的文章做具体谈论.
以上是“深化C++ Builder之编写自己的元件-深化解析VCL担当、消息机制([VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |