文档章节

学习 Message(17): WM_SYSCOMMAND 消息[一]

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 442
阅读 8
收藏 0
点赞 0
评论 0

已有定义的系统命令常数(感觉有些有问题):
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

 
 
 
 
 

 

 

  

© 著作权归作者所有

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
windows消息(一)

SendMessage函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的消息队...

jinx88 ⋅ 2016/06/18 ⋅ 0

MFC下多线程与消息机制的结合使用

前面一段时间,一直在想怎么样实现在全局的线程函数中实现调用窗体的一些函数(比如说在线程里面调用按钮单击处理函数,以及窗体的一些操作)。最近在网络 闲逛中发现了实现的方法,特意贴出...

长平狐 ⋅ 2012/07/12 ⋅ 0

c# 更改最大化按钮功能实现最大化时遮盖任务栏,点击Esc取消全屏

更改最大化按钮功能实现最大化时遮盖任务栏。 const int WMSYSCOMMAND = 0x112; const int SCCLOSE = 0xF060; const int SCMINIMIZE = 0xF020; const int SCMAXIMIZE = 0xF030; protected ov......

Vevi ⋅ 2012/08/11 ⋅ 0

MFC的SendMessage函数详解

SendMessage函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的消息队...

长平狐 ⋅ 2012/10/08 ⋅ 0

delphi中Message消息的使用方法

实例1 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const WMME=WMUSER+100; //自定义消息; type TForm1 ......

geek_loser ⋅ 2015/01/15 ⋅ 0

WM_SYSCOMMAND消息,居然把对话框的标题名改了?

新建一个对话框,放置3个按钮,分别写入以下代码,实现最大化、最小化、还原。 可是效果实现了,但标题名也变成按钮上的文字了,这是什么原因? void CDemoDlg::OnBnClickedButton1() { // T...

没饭吃 ⋅ 2015/03/08 ⋅ 1

MFC中无边框窗口的拖动

MFC中无边框窗口的拖动 void CXXXXDialog::OnLButtonDown(UINT nFlags, CPoint point) { PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y)); } 要记得添加消息映射,......

IMGTN ⋅ 2012/06/14 ⋅ 4

C# 利用消息机制实现可拖动 lable

View Code 1 [DllImport("User32.DLL")] 2publicstaticexternint SendMessage(IntPtr hWnd,uint Msg,int wParam,int lParam); 3 [DllImport("User32.DLL")] 4publicstaticexternbool Release......

长平狐 ⋅ 2012/10/23 ⋅ 0

几个WM消息其lParam和wParam参数定义

几个WM消息其lParam和wParam参数定义 鼠标消息 lParam:低字组为x 座标,高字组为y 座标,这两个座标是相对于窗口显示区域左上角的位置。 Wparam:指示滑鼠按键以及Shift和Ctrl 键的状态。可...

IMGTN ⋅ 2012/10/03 ⋅ 1

GetSystemMenu(FALSE)

参数为False时返回当前窗口系统菜单(窗口标题栏右键弹出的移动、大小、最大化等)的句柄。 系统菜单是指我们点击窗体左上角的小图标时所弹出的菜单,其中好象有“恢复”.“移动”.“最大化”....

云栖希望。 ⋅ 2017/12/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 51分钟前 ⋅ 0

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 今天 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 今天 ⋅ 0

Lombok简单介绍及使用

官网 通过简单注解来精简代码达到消除冗长代码的目的 优点 提高编程效率 使代码更简洁 消除冗长代码 避免修改字段名字时忘记修改方法名 4.idea中安装lombnok pom.xml引入 <dependency> <grou...

to_ln ⋅ 今天 ⋅ 0

【转】JS浮点数运算Bug的解决办法

37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎...

NickSoki ⋅ 今天 ⋅ 0

table eg

user_id user_name full_name 1 zhangsan 张三 2 lisi 李四 `` ™ [========] 2018-06-18 09:42:06 星期一½ gdsgagagagdsgasgagadsgdasgagsa...

qwfys ⋅ 今天 ⋅ 0

一个有趣的Java问题

先来看看源码: public class TestDemo { public static void main(String[] args) { Integer a = 10; Integer b = 20; swap(a, b); System.out......

linxyz ⋅ 今天 ⋅ 0

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 今天 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 9

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部