zoukankan      html  css  js  c++  java
  • 学习 Message(17): WM_SYSCOMMAND 消息[一]


    已有定义的系统命令常数(感觉有些有问题):
    SC_SIZE         = 61440;
    SC_MOVE         = 61456;
    SC_MINIMIZE     = 61472;
    SC_MAXIMIZE     = 61488;
    SC_NEXTWINDOW   = 61504;
    SC_PREVWINDOW   = 61520;
    SC_CLOSE        = 61536;
    SC_VSCROLL      = 61552;
    SC_HSCROLL      = 61568;
    SC_MOUSEMENU    = 61584;
    SC_KEYMENU      = 61696;
    SC_ARRANGE      = 61712;
    SC_RESTORE      = 61728;
    SC_TASKLIST     = 61744;
    SC_SCREENSAVE   = 61760;
    SC_HOTKEY       = 61776;
    SC_DEFAULT      = 61792;
    SC_MONITORPOWER = 61808;
    SC_CONTEXTHELP  = 61824;
    SC_SEPARATOR    = 61455;
    SC_ICON         = SC_MINIMIZE;
    SC_ZOOM         = SC_MAXIMIZE;
    

    未定义的系统命令常数:
    61441: 拖动左边框
    61442: 拖动右边框
    61443: 拖动上边框
    61444: 拖动左上角
    61445: 拖动右上角
    61446: 拖动下边框
    61447: 拖动左下角
    61448: 拖动右下角
    
    61458: 拖动标题栏
    
    61558: 横向滚动条滚动
    61574: 双击横向滚动条
    61575: 纵向滚动条滚动
    61559: 双击纵向滚动条
    61587: 点击最小化图标
    61490: 在非最大化时双击标题栏
    61730: 在最大化时双击标题栏
    
    //可能还有...
    

    WM_SYSCOMMAND 是做什么的? 咱们先看看把 WM_SYSCOMMAND 消息封锁掉是什么样子吧:

    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Label1: TLabel;
        procedure FormCreate(Sender: TObject);
        procedure FormDblClick(Sender: TObject);
      protected
        procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.FormCreate(Sender: TObject);
    const
      br = #13#10;
    begin
      Label1.AutoSize := True;
      Label1.Caption :=
        '此窗体屏蔽了 SYSCOMMAND 消息!' + br +
        '将无法改变窗体大小;' + br +
        '将无法移动窗体;' + br +
        '将无法最大、最小化窗体;' + br +
        '也将无法通过常规途径关闭窗体.' + br +
        '' + br +
        '所以提供了双击窗体关闭的功能.';
      Label1.OnDblClick := OnDblClick;
    end;
    
    procedure TForm1.FormDblClick(Sender: TObject);
    begin
      Close;
    end;
    
    procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
    begin
    //  inherited; {取消这句的注释, WM_SysCommand 就活了}
    end;
    
    end.
    
    窗体文件:
    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 172
      ClientWidth = 264
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      OnCreate = FormCreate
      OnDblClick = FormDblClick
      PixelsPerInch = 96
      TextHeight = 13
      object Label1: TLabel
        Left = 24
        Top = 24
        Width = 89
        Height = 33
        Caption = 'Label1'
      end
    end
    
  • 相关阅读:
    什么是继承?
    程序员兄弟们,我们的基本素质怎么样?
    C#基础概念二十五问
    windows mobile 5.0 PocketPC模拟器上网的设置
    数据库设计中的14个技巧
    Microsoft SQL Server 2005 存储过程翻页
    在.Net如何制作自定义的快捷方式(转)
    ActiveSync 没有DMA端口问题的解决方法
    原型模式(Prototype Pattern)
    获取鼠标和键盘长时间不动的时间
  • 原文地址:https://www.cnblogs.com/del/p/1323683.html
Copyright © 2011-2022 走看看