• WndProc漏写override会发生什么情况?


    试图改写TForm1(注意,不是TForm类)的WndProc函数,从而达到某些目的。程序如下:

    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    
    type
      TForm1 = class(TForm)
      private
        { Private declarations }
      public
        { Public declarations }
            procedure WndProc(var message:TMessage); override; // 如果漏写override,TForm1的WndProc函数将不起作用。原因是,TObject努力把消息发到TForm1里来,试图调用TForm1的虚函数WndProc,结果在它的虚函数列表中没有找到此函数(因为名称被占用,因此VMT列表里不再有它),于是就回到TForm1的上级,即TForm,找到了后者的WndProc,执行,当然没有任何特殊的自定义动作。
    // 还有另一种可能,即VMT和普通函数里都有一个叫做WndProc的函数。但是VMT里的那个函数没有被改写,因此不执行任何动作。偏偏TObject是发消息给它的。
    end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.WndProc(var message:TMessage); begin if message.msg =WM_LBUTTONDOWN then ShowMessage('ddd') else inherited WndProc(Message); end; end.
  • 相关阅读:
    OpenCV 使用FLANN进行特征点匹配
    OpenCV 特征描述
    OpenCV 特征点检测
    OpenCV 亚像素级的角点检测
    OpenCV Shi-Tomasi角点检测子
    OpenCV Harris 角点检测子
    OpenCV 模板匹配
    OpenCV 直方图计算
    OpenCV 直方图均衡化
    OpenCV 仿射变换
  • 原文地址:https://www.cnblogs.com/findumars/p/3523951.html
Copyright © 2020-2023  润新知