WinForm特效:拦截窗体上各个部位的点击
windows窗体的标题栏无法直接通过一些默认的事件来控制,需要了解和WM_NCHITTEST相关的windows消息。 以下示例演示了最简单的效果片断: 他会把客户区和标题栏的效果互换,比如无法按住标题栏拖动窗体而是改为了安抓客户区拖动,并禁用了关闭按钮。 其中m.Result从-2到21都有定义,分别度应了整个窗体的各个部位,比如1代表客户区,8代表最小化按钮等等。
- using System;
- using System.Windows.Forms;
- namespace WindowsApplication42
- {
- public partial class Form1 : Form
- {
- public Form1() { InitializeComponent(); this.Text = "双击左上角图标关闭窗体"; }
- //拦击标题栏鼠标位置事件
- const int WM_NCHITTEST = 0x84;
- protected override void WndProc(ref Message m)
- {
- base.WndProc(ref m); if (m.Msg == WM_NCHITTEST)
- {
- switch (m.Result.ToInt32())
- {
- case 1://客户区
- m.Result = new IntPtr(2); break;
- case 2://标题栏
- m.Result = new IntPtr(1); break;
- case 20: m.Result = new IntPtr(0); break;
- default: Console.WriteLine(m); break;
- }
- }
- }
- }
- }
下面是各个常量的意义:从Delphi7 VCL中摘取:
- { WM_NCHITTEST and MOUSEHOOKSTRUCT Mouse Position Codes }
- {$EXTERNALSYM HTERROR}
- HTERROR = -2;
- {$EXTERNALSYM HTTRANSPARENT}
- HTTRANSPARENT = -1;
- {$EXTERNALSYM HTNOWHERE}
- HTNOWHERE = 0;
- {$EXTERNALSYM HTCLIENT}
- HTCLIENT = 1;
- {$EXTERNALSYM HTCAPTION}
- HTCAPTION = 2;
- {$EXTERNALSYM HTSYSMENU}
- HTSYSMENU = 3;
- {$EXTERNALSYM HTGROWBOX}
- HTGROWBOX = 4;
- {$EXTERNALSYM HTSIZE}
- HTSIZE = HTGROWBOX;
- {$EXTERNALSYM HTMENU}
- HTMENU = 5;
- {$EXTERNALSYM HTHSCROLL}
- HTHSCROLL = 6;
- {$EXTERNALSYM HTVSCROLL}
- HTVSCROLL = 7;
- {$EXTERNALSYM HTMINBUTTON}
- HTMINBUTTON = 8;
- {$EXTERNALSYM HTMAXBUTTON}
- HTMAXBUTTON = 9;
- {$EXTERNALSYM HTLEFT}
- HTLEFT = 10;
- {$EXTERNALSYM HTRIGHT}
- HTRIGHT = 11;
- {$EXTERNALSYM HTTOP}
- HTTOP = 12;
- {$EXTERNALSYM HTTOPLEFT}
- HTTOPLEFT = 13;
- {$EXTERNALSYM HTTOPRIGHT}
- HTTOPRIGHT = 14;
- {$EXTERNALSYM HTBOTTOM}
- HTBOTTOM = 15;
- {$EXTERNALSYM HTBOTTOMLEFT}
- HTBOTTOMLEFT = 16;
- {$EXTERNALSYM HTBOTTOMRIGHT}
- HTBOTTOMRIGHT = 17;
- {$EXTERNALSYM HTBORDER}
- HTBORDER = 18;
- {$EXTERNALSYM HTREDUCE}
- HTREDUCE = HTMINBUTTON;
- {$EXTERNALSYM HTZOOM}
- HTZOOM = HTMAXBUTTON;
- {$EXTERNALSYM HTSIZEFIRST}
- HTSIZEFIRST = HTLEFT;
- {$EXTERNALSYM HTSIZELAST}
- HTSIZELAST = HTBOTTOMRIGHT;
- {$EXTERNALSYM HTOBJECT}
- HTOBJECT = 19;
- {$EXTERNALSYM HTCLOSE}
- HTCLOSE = 20;
- {$EXTERNALSYM HTHELP}
- HTHELP = 21;
WinForm特效:拦截窗体上各个部位的点击的更多相关文章
- WinForm窗体上两个panel,怎么实现一个panel固定漂浮在另一个panel之上
问题:winform窗体,要实现一个panel漂浮在另一个panel之上,但是运行的时候移动鼠标或者其他操作,上面那个panel就会消失?即只能显示一个panel. 原因:在窗体上拖放控件肉眼观察是平 ...
- 小数运算需要注意什么? 接口和抽象类 WinForm窗体上两个panel,怎么实现一个panel固定漂浮在另一个panel之上
小数运算需要注意什么? 1. 生活中0.1+0.2=0.3, 计算机中可不是这样,为什么呢? 大家都知道计算机类型都是有数据范围的.整形int范围是 正负21亿左右,小数类型同样也是有范围的,但是即使 ...
- C#WinForm无边框窗体移动方法、模仿鼠标单击标题栏移动窗体位置
C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务 ...
- C#自定义Winform无边框窗体
C#自定义Winform无边框窗体 在实际项目中,WinForm窗体或者控件不能满足要求,所以就需要自己设计窗体等,当然设计界面可以用的东西很多,例如WPF.或者一些第三方的库等.本例中将采用WinF ...
- WinForm无边框窗体移动方法
C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务 ...
- C#WinForm无边框窗体移动----模仿鼠标单击标题栏移动窗体位置
C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务 ...
- .NET混合开发解决方案12 网页JS调用C#方法访问WinForm或WPF窗体
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- Dynamics AX 2012 R2 窗体系列 - 在窗体上修改字段时所触发的方法及其顺序
在这个系列里,Reinhard将和大家一起探索在AX的窗体上执行操作时,都会触发窗体.窗体数据源和表上的哪些方法,并且是以怎样的顺序触发的. 这次,我们来看看在窗体上修改或录入数据的情 ...
- winform打开子窗体后,在子窗体中刷新父窗体,或者关闭子窗体刷新父窗体
winform打开子窗体后,在子窗体中刷新父窗体,或者关闭子窗体刷新父窗体,搜集了几个方法,列举如下: 一 . 所有权法 父窗体,名称为“fuForm”,在父窗体中有个公共刷新方法,也就是窗体数据初始 ...
随机推荐
- 【转】为drupal初学者准备的12个精品课程
下面是一些网上免费的drupal教程,这些教程将对初学者和那些从别的CMS转向drupal的开发者非常有帮助.初级教程 1.在开始用drupal之前,你要知道一些基本的东西,内容很简单,但有些还是值得 ...
- iOS学习笔记之Category
iOS学习笔记之Category 写在前面 Category是类别(也称为类目或范畴),使用Category,程序员可以为任何已有的类添加方法.使用类别可以对框架提供的类(无法获取源码,不能直接修改) ...
- 闲置小U盘变身最强大路由器
小容量 U 盘,用起来嫌容量太少,丢了好像又觉得太可惜.不过现在将它进行一番小改造后,配合我们的电脑 ,就能得到一台强大的路由器,不仅省了买路由的钱,而且这台路由器在市面上基本买不到 ! DD ...
- 遵守GPL的开源软件能用于商用吗?
遵守GPL的开源软件能用于商用吗? 比较经典的开源协议有 GPL,BSD 等等. GPL 软件可以用于商业用途,甚至说,RMS 撰写 GPL 协议的目的就是为了让自己的 GPL 软件 emacs 可以 ...
- 终于把你必须知道的.NET看完了
终于把你必须知道的.NET看完了,第二步就是把精通ASP.NET MVC3框架这本书搞定,练习MVC3的使用,并把EF,LINQ也练习一下,期间要做一个项目“多用户微信公众平台”项目,最近微信公众平台 ...
- Tmux常用快捷键以及我会常到的一些问题汇总
今天部署测试服务器环境 使用到了tmux 刚开始我把tmux想象成了像omzsh这种shell 但是被指出是错误的,tmux类似于在shell里面的软件.我还真是第一次接触到这个概念. 首先安装 br ...
- Delphi IOS环境安装
RAD Delphi XE/10 Seattle 安装IOS.OSX环境安装,IOS模拟器,MAC X 真机可以调试 http://community.embarcadero.com/blogs/en ...
- [原创]Devexpress XtraReports 系列 8 创建Drill-Through报表
哎,今天公司工作忙了一天,一直没有时间写写东西.所以只能昨天晚上加班写咯.苦逼啊...... 昨天发表了Devexpress XtraReports系列第七篇[原创]Devexpress XtraRe ...
- 串口发送浮点型数据及int(2个字节)long int(4个字节)的方法
方法一: 直接把float数据拆分为4个unsigned char(由于数字没法拆分,所以只能用指针的),发过去,在合并为float. 其中有两点要注意. (1)大端存储,小端存储:如果搞错读取数据就 ...
- LeetCode100:Same Tree
Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...