当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

深化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++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>深化C++ Builder之编写自己的元件-深化解析VCL担当、消息机制(1</b>
  • 深化C++ Builder之编写自己的元件-深化解析VCL担当、消息机制(
  • <b>深化C++ Builder之编写自己的元件-深化解析VCL担当、消息机制(3</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .