WinForm實現(xiàn)攔截窗體上各個部位的點擊特效實例
本文實例講述了WinForm實現(xiàn)攔截窗體上各個部位的點擊特效,是一個非常實用的技巧。分享給大家供大家參考。具體分析如下:
一般來說,windows窗體的標題欄無法直接通過一些默認的事件來控制,需要了解和WM_NCHITTEST相關(guān)的windows消息。
以下示例演示了最簡單的效果片斷:他會把客戶區(qū)和標題欄的效果互換,比如無法按住標題欄拖動窗體而是改為了按住客戶區(qū)拖動,并禁用了關(guān)閉按鈕。 其中m.Result從-2到21都有定義,分別對應了整個窗體的各個部位,比如1代表客戶區(qū),8代表最小化按鈕等等。
具體功能代碼如下:
using System; using System.Windows.Forms; namespace WindowsApplication42 { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.Text = "雙擊左上角圖標關(guān)閉窗體"; } //攔擊標題欄鼠標位置事件 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://標題欄 m.Result = new IntPtr(1); break; case 20: m.Result = new IntPtr(0); break; default: Console.WriteLine(m); break; } } } } }
下面是各個常量的意義:從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;
希望本文所述對大家的C#程序設(shè)計有所幫助。
相關(guān)文章
C#的Process類調(diào)用第三方插件實現(xiàn)PDF文件轉(zhuǎn)SWF文件
本篇文章主要介紹了C#的Process類調(diào)用第三方插件實現(xiàn)PDF文件轉(zhuǎn)SWF文件,現(xiàn)在分享給大家,具有一定的參考價值,有需要的可以了解一下。2016-11-11C#難點逐個擊破(6):C#數(shù)據(jù)類型與.net framework數(shù)據(jù)類型
最近開始看Illustrator C#2008,這真是一本好書,我讀計算機書籍這么多了,能讓我稱為好書的沒有多少。2010-02-02C#多線程開發(fā)實戰(zhàn)記錄之線程基礎(chǔ)
線程是一個獨立的運行單元,每個進程內(nèi)部有多個線程,每個線程可以各自同時執(zhí)行指令,每個線程有自己獨立的棧,但是與進程內(nèi)的其他線程共享內(nèi)存,這篇文章主要給大家介紹了關(guān)于C#多線程開發(fā)實戰(zhàn)記錄之線程基礎(chǔ)的相關(guān)資料,需要的朋友可以參考下2021-09-09C#多態(tài)的三種實現(xiàn)方式(小結(jié))
這篇文章主要介紹了C#多態(tài)的三種實現(xiàn)方式(小結(jié)),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03C#使用opencv截取旋轉(zhuǎn)矩形區(qū)域圖像的實現(xiàn)示例
這篇文章主要介紹了C#使用opencv截取旋轉(zhuǎn)矩形區(qū)域圖像,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03