WinForm實(shí)現(xiàn)攔截窗體上各個(gè)部位的點(diǎn)擊特效實(shí)例
本文實(shí)例講述了WinForm實(shí)現(xiàn)攔截窗體上各個(gè)部位的點(diǎn)擊特效,是一個(gè)非常實(shí)用的技巧。分享給大家供大家參考。具體分析如下:
一般來說,windows窗體的標(biāo)題欄無(wú)法直接通過一些默認(rèn)的事件來控制,需要了解和WM_NCHITTEST相關(guān)的windows消息。
以下示例演示了最簡(jiǎn)單的效果片斷:他會(huì)把客戶區(qū)和標(biāo)題欄的效果互換,比如無(wú)法按住標(biāo)題欄拖動(dòng)窗體而是改為了按住客戶區(qū)拖動(dòng),并禁用了關(guān)閉按鈕。 其中m.Result從-2到21都有定義,分別對(duì)應(yīng)了整個(gè)窗體的各個(gè)部位,比如1代表客戶區(qū),8代表最小化按鈕等等。
具體功能代碼如下:
using System;
using System.Windows.Forms;
namespace WindowsApplication42
{
public partial class Form1 : Form
{
public Form1() { InitializeComponent(); this.Text = "雙擊左上角圖標(biāo)關(guān)閉窗體"; }
//攔擊標(biāo)題欄鼠標(biāo)位置事件
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://客戶區(qū)
m.Result = new IntPtr(2); break;
case 2://標(biāo)題欄
m.Result = new IntPtr(1); break;
case 20: m.Result = new IntPtr(0); break;
default: Console.WriteLine(m); break;
}
}
}
}
}
下面是各個(gè)常量的意義:從Delphi7 VCL中摘?。?/p>
{ 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;
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
- WinForm實(shí)現(xiàn)窗體最大化并遮蓋任務(wù)欄的方法
- winform實(shí)現(xiàn)創(chuàng)建最前端窗體的方法
- WinForm限制窗體不能移到屏幕外的方法
- C#實(shí)現(xiàn)winform用子窗體刷新父窗體及子窗體改變父窗體控件值的方法
- WinForm窗體間傳值的方法
- WinForm實(shí)現(xiàn)同時(shí)讓兩個(gè)窗體有激活效果的特效實(shí)例
- C#中Winform窗體Form的關(guān)閉按鈕變灰色的方法
- 在多線程中調(diào)用winform窗體控件的實(shí)現(xiàn)方法
- C# WinForm窗體編程中處理數(shù)字的正確操作方法
- Winform窗體效果實(shí)例分析
相關(guān)文章
DataGridView設(shè)置單元格的提示內(nèi)容ToolTip
這篇文章介紹了DataGridView設(shè)置單元格提示內(nèi)容ToolTip的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
C#中System.IO.Pipelines庫(kù)的使用詳解
System.IO.Pipelines 是一個(gè)庫(kù),旨在使在 .NET 中執(zhí)行高性能 I/O 更加容易,本文主要為大家詳細(xì)介紹了System.IO.Pipelines具體使用方法,感興趣的可以了解下2023-12-12
C#實(shí)現(xiàn)向多線程傳參的三種方式實(shí)例分析
這篇文章主要介紹了C#實(shí)現(xiàn)向多線程傳參的三種方式,以實(shí)例形式較為詳細(xì)的分析了C#多線程及參數(shù)傳遞的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Unity實(shí)現(xiàn)簡(jiǎn)單手勢(shì)識(shí)別
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)簡(jiǎn)單手勢(shì)識(shí)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
c#分頁(yè)顯示服務(wù)器上指定目錄下的所有圖片示例
這篇文章主要介紹了c#分頁(yè)顯示服務(wù)器上指定目錄下的所有圖片示例,需要的朋友可以參考下2014-05-05

