zoukankan      html  css  js  c++  java
  • WinForm特效:拦截窗体上各个部位的点击

    windows窗体的标题栏无法直接通过一些默认的事件来控制,需要了解和WM_NCHITTEST相关的windows消息。 以下示例演示了最简单的效果片断: 他会把客户区和标题栏的效果互换,比如无法按住标题栏拖动窗体而是改为了安抓客户区拖动,并禁用了关闭按钮。 其中m.Result从-2到21都有定义,分别度应了整个窗体的各个部位,比如1代表客户区,8代表最小化按钮等等。

    [csharp] view plaincopy
    1. using System;  
    2.   
    3. using System.Windows.Forms;  
    4.   
    5. namespace WindowsApplication42  
    6.   
    7. {  
    8.   
    9.     public partial class Form1 : Form  
    10.   
    11.     {  
    12.   
    13.         public Form1() { InitializeComponent(); this.Text = "双击左上角图标关闭窗体"; }  
    14.   
    15.         //拦击标题栏鼠标位置事件    
    16.   
    17.         const int WM_NCHITTEST = 0x84;  
    18.   
    19.         protected override void WndProc(ref Message m)  
    20.   
    21.         {  
    22.   
    23.             base.WndProc(ref m); if (m.Msg == WM_NCHITTEST)  
    24.   
    25.             {  
    26.   
    27.                 switch (m.Result.ToInt32())  
    28.   
    29.                 {  
    30.   
    31.                     case 1://客户区    
    32.   
    33.                         m.Result = new IntPtr(2); break;  
    34.   
    35.                     case 2://标题栏    
    36.   
    37.                         m.Result = new IntPtr(1); break;  
    38.   
    39.                     case 20: m.Result = new IntPtr(0); break;  
    40.   
    41.                     default: Console.WriteLine(m); break;  
    42.   
    43.                 }  
    44.   
    45.             }  
    46.   
    47.         }  
    48.   
    49.     }  
    50.   
    51. }  

    下面是各个常量的意义:从Delphi7 VCL中摘取:

    1. { WM_NCHITTEST and MOUSEHOOKSTRUCT Mouse Position Codes }  
    2.   
    3.   {$EXTERNALSYM HTERROR}  
    4.   
    5.   HTERROR = -2;  
    6.   
    7.   {$EXTERNALSYM HTTRANSPARENT}  
    8.   
    9.   HTTRANSPARENT = -1;  
    10.   
    11.   {$EXTERNALSYM HTNOWHERE}  
    12.   
    13.   HTNOWHERE = 0;  
    14.   
    15.   {$EXTERNALSYM HTCLIENT}  
    16.   
    17.   HTCLIENT = 1;  
    18.   
    19.   {$EXTERNALSYM HTCAPTION}  
    20.   
    21.   HTCAPTION = 2;  
    22.   
    23.   {$EXTERNALSYM HTSYSMENU}  
    24.   
    25.   HTSYSMENU = 3;  
    26.   
    27.   {$EXTERNALSYM HTGROWBOX}  
    28.   
    29.   HTGROWBOX = 4;  
    30.   
    31.   {$EXTERNALSYM HTSIZE}  
    32.   
    33.   HTSIZE = HTGROWBOX;  
    34.   
    35.   {$EXTERNALSYM HTMENU}  
    36.   
    37.   HTMENU = 5;  
    38.   
    39.   {$EXTERNALSYM HTHSCROLL}  
    40.   
    41.   HTHSCROLL = 6;  
    42.   
    43.   {$EXTERNALSYM HTVSCROLL}  
    44.   
    45.   HTVSCROLL = 7;  
    46.   
    47.   {$EXTERNALSYM HTMINBUTTON}  
    48.   
    49.   HTMINBUTTON = 8;  
    50.   
    51.   {$EXTERNALSYM HTMAXBUTTON}  
    52.   
    53.   HTMAXBUTTON = 9;  
    54.   
    55.   {$EXTERNALSYM HTLEFT}  
    56.   
    57.   HTLEFT = 10;  
    58.   
    59.   {$EXTERNALSYM HTRIGHT}  
    60.   
    61.   HTRIGHT = 11;  
    62.   
    63.   {$EXTERNALSYM HTTOP}  
    64.   
    65.   HTTOP = 12;  
    66.   
    67.   {$EXTERNALSYM HTTOPLEFT}  
    68.   
    69.   HTTOPLEFT = 13;  
    70.   
    71.   {$EXTERNALSYM HTTOPRIGHT}  
    72.   
    73.   HTTOPRIGHT = 14;  
    74.   
    75.   {$EXTERNALSYM HTBOTTOM}  
    76.   
    77.   HTBOTTOM = 15;  
    78.   
    79.   {$EXTERNALSYM HTBOTTOMLEFT}  
    80.   
    81.   HTBOTTOMLEFT = 16;  
    82.   
    83.   {$EXTERNALSYM HTBOTTOMRIGHT}  
    84.   
    85.   HTBOTTOMRIGHT = 17;  
    86.   
    87.   {$EXTERNALSYM HTBORDER}  
    88.   
    89.   HTBORDER = 18;  
    90.   
    91.   {$EXTERNALSYM HTREDUCE}  
    92.   
    93.   HTREDUCE = HTMINBUTTON;  
    94.   
    95.   {$EXTERNALSYM HTZOOM}  
    96.   
    97.   HTZOOM = HTMAXBUTTON;  
    98.   
    99.   {$EXTERNALSYM HTSIZEFIRST}  
    100.   
    101.   HTSIZEFIRST = HTLEFT;  
    102.   
    103.   {$EXTERNALSYM HTSIZELAST}  
    104.   
    105.   HTSIZELAST = HTBOTTOMRIGHT;  
    106.   
    107.   {$EXTERNALSYM HTOBJECT}  
    108.   
    109.   HTOBJECT = 19;  
    110.   
    111.   {$EXTERNALSYM HTCLOSE}  
    112.   
    113.   HTCLOSE = 20;  
    114.   
    115.   {$EXTERNALSYM HTHELP}  
    116.   
    117.   HTHELP = 21;  
  • 相关阅读:
    2.性能测试类型或方法
    3.性能测试通过标准
    下一个问题主题是啥呢?内网渗透深化?Java安全
    ThinkPHP5 RCE在PHP7下getshell
    泛微ecology OA数据库配置信息泄露
    渗透经验之SQL注入深化
    匿名伪造邮件发送脚本
    payload免杀之Installutil.exe&csc.exe利用
    记一次草鸡垃圾的域渗透
    内网渗透之frp使用
  • 原文地址:https://www.cnblogs.com/gc2013/p/3979422.html
Copyright © 2011-2022 走看看