使用 WM_NCHITTEST 消息判断鼠标所在窗口的部位

摘要:
本例效果图:WM_NCHITTEST消息返回后,消息的Result参数表示了鼠标所在窗口的部位.窗体设计步骤:新建工程后,随便添加一个菜单;设置窗体的AutoScroll属性为True,并添加一个Panel放在合适的位置,以让窗口出现滚动条.unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Cont
本例效果图:
使用 WM_NCHITTEST 消息判断鼠标所在窗口的部位第1张

WM_NCHITTEST 消息返回后, 消息的 Result 参数表示了鼠标所在窗口的部位.
窗体设计步骤: 新建工程后, 随便添加一个菜单; 设置窗体的 AutoScroll 属性为 True, 并添加一个 Panel 放在合适的位置, 以让窗口出现滚动条.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Menus;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    MainMenu1: TMainMenu;
    mnuFile: TMenuItem;
  private
    procedure MyMsg(var msg: TWMNCHitTest); message WM_NCHITTEST;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  arr: array[-2..21] of string = (
    'HTERROR',
    'HTTRANSPARENT',
    'HTNOWHERE',
    'HTCLIENT - 客户区',
    'HTCAPTION - 标题',
    'HTSYSMENU - 系统菜单',
    'HTGROWBOX',
    'HTMENU - 菜单',
    'HTHSCROLL - 水平滚动条',
    'HTVSCROLL - 垂直滚动条',
    'HTMINBUTTON - 最小化按钮',
    'HTMAXBUTTON - 最大化按钮',
    'HTLEFT - 左边界',
    'HTRIG - 右边界',
    'HTTOP - 上边界',
    'HTTOPLEFT - 左上角',
    'HTTOPRIG - 右上角',
    'HTBOTTOM - 下边界',
    'HTBOTTOMLEFT - 左下角',
    'HTBOTTOMRIG - 右下角',
    'HTBORDER',
    'HTOBJECT',
    'HTCLOSE - 关闭按钮',
    'HTHELP');

procedure TForm1.MyMsg(var msg: TWMNCHitTest);
var
  i: Integer;
begin
  Inherited;
  i := msg.Result;
  Text := Format('%d: %s', [i, arr[i]]);
end;

end.

//另附 WM_NCHITTEST 消息中 Result 参数的所有可能值的列表: HTERROR = -2; HTTRANSPARENT = -1; HTNOWHERE = 0; HTCLIENT = 1; HTCAPTION = 2; HTSYSMENU = 3; HTGROWBOX = 4; HTSIZE = HTGROWBOX; HTMENU = 5; HTHSCROLL = 6; HTVSCROLL = 7; HTMINBUTTON = 8; HTMAXBUTTON = 9; HTLEFT = 10; HTRIGHT = 11; HTTOP = 12; HTTOPLEFT = 13; HTTOPRIGHT = 14; HTBOTTOM = 15; HTBOTTOMLEFT = $10; HTBOTTOMRIGHT = 17; HTBORDER = 18; HTREDUCE = HTMINBUTTON; HTZOOM = HTMAXBUTTON; HTSIZEFIRST = HTLEFT; HTSIZELAST = HTBOTTOMRIGHT; HTOBJECT = 19; HTCLOSE = 20; HTHELP = 21;

免责声明:文章转载自《使用 WM_NCHITTEST 消息判断鼠标所在窗口的部位》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇REST服务安全-双向认证Confluence迁移下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

centos7下Zookeeper+sheepdog集群搭建

zookeeper 安装命令 yum install zookeeper -y            (版本:zookeeper.x86_64      3.4.6-1) yum install zookeeper-lib -y            (版本:zookeeper-lib.x86_64   3.4.6-1) 配置文件:/etc/zooke...

jquery 左右移动 以及使用layer.js弹出框呈现在页面上

今天写了一个左右移动 但是发现自己写的css效果一直都加不上去,不管了,还是先上自己有问题的代码,毕竟在失败中发现问题也是一种成长么。好吧,其实我们都知道在列表有边框里,它的值来源于左边框,那么如果我这样 yidong.click(function(){ $(this).css("backgroundColor",'#3385ff');//...

Haproxy 开启日志记录

安装部署完Haproxy之后,默认是没有开启日志记录的,需要相应的手工配置使其日志功能开启。 【创建日志记录文件夹】 mkdir /var/log/haproxychmod a+x /var/log/haproxy 【开启rsyslog记录haproxy日志功能】 vim /etc/rsyslog.conf 修改: # Provides U...

deb包的2种安装安装方法

一、cydia重启自动安装:用ifunbox进入//var/root/Media/Cydia/AutoInstallCydia/AutoInstall 需要分别单独建立,注意大小写。然后把你要安装的deb 拖入此目录,重启两次机器进行安装。 二、iFile安装:把deb包用ifunbox传到//var/mobile/Documents下。打开iFile软件...

关于Linux上的SSH服务无法启动,提示“/var/empty/sshd must be owned by root and not group or world-writable”错误

首先通过物理终端进入到linux上,手工检查ssh发现没运行# /etc/init.d/sshd statussshd is stopped 手动启动服务,发现报告权限错误。# /etc/init.d/sshd start Starting sshd:/var/empty/sshd must be owned by root and not group o...

iPad新手必看-各种文件存放路径详解[转]

iPad运行的iOS系统和我们平时使用的Windows有这巨大的不同,包括文件存储方式上,iOS有着严格的目录规划,对于想更大程度扩展iPad系能的朋友来所,知晓iPad系统常用文件存放路径是必不可少的,下面是小编收集到的ipad各种文件存放路径详解,希望对iPad新手有所帮助。   1、【/Applications】   常用软件的安装目录   2. 【...