WinForm实现拦截窗体上各个部位的点击特效实例
2023-06-13 09:15:46 时间
本文实例讲述了WinForm实现拦截窗体上各个部位的点击特效,是一个非常实用的技巧。分享给大家供大家参考。具体分析如下:
一般来说,windows窗体的标题栏无法直接通过一些默认的事件来控制,需要了解和WM_NCHITTEST相关的windows消息。
以下示例演示了最简单的效果片断:他会把客户区和标题栏的效果互换,比如无法按住标题栏拖动窗体而是改为了按住客户区拖动,并禁用了关闭按钮。其中m.Result从-2到21都有定义,分别对应了整个窗体的各个部位,比如1代表客户区,8代表最小化按钮等等。
具体功能代码如下:
usingSystem; usingSystem.Windows.Forms; namespaceWindowsApplication42 { publicpartialclassForm1:Form { publicForm1(){InitializeComponent();this.Text="双击左上角图标关闭窗体";} //拦击标题栏鼠标位置事件 constintWM_NCHITTEST=0x84; protectedoverridevoidWndProc(refMessagem) { base.WndProc(refm);if(m.Msg==WM_NCHITTEST) { switch(m.Result.ToInt32()) { case1://客户区 m.Result=newIntPtr(2);break; case2://标题栏 m.Result=newIntPtr(1);break; case20:m.Result=newIntPtr(0);break; default:Console.WriteLine(m);break; } } } } }
下面是各个常量的意义:从Delphi7VCL中摘取:
{WM_NCHITTESTandMOUSEHOOKSTRUCTMousePositionCodes} {$EXTERNALSYMHTERROR} HTERROR=-2; {$EXTERNALSYMHTTRANSPARENT} HTTRANSPARENT=-1; {$EXTERNALSYMHTNOWHERE} HTNOWHERE=0; {$EXTERNALSYMHTCLIENT} HTCLIENT=1; {$EXTERNALSYMHTCAPTION} HTCAPTION=2; {$EXTERNALSYMHTSYSMENU} HTSYSMENU=3; {$EXTERNALSYMHTGROWBOX} HTGROWBOX=4; {$EXTERNALSYMHTSIZE} HTSIZE=HTGROWBOX; {$EXTERNALSYMHTMENU} HTMENU=5; {$EXTERNALSYMHTHSCROLL} HTHSCROLL=6; {$EXTERNALSYMHTVSCROLL} HTVSCROLL=7; {$EXTERNALSYMHTMINBUTTON} HTMINBUTTON=8; {$EXTERNALSYMHTMAXBUTTON} HTMAXBUTTON=9; {$EXTERNALSYMHTLEFT} HTLEFT=10; {$EXTERNALSYMHTRIGHT} HTRIGHT=11; {$EXTERNALSYMHTTOP} HTTOP=12; {$EXTERNALSYMHTTOPLEFT} HTTOPLEFT=13; {$EXTERNALSYMHTTOPRIGHT} HTTOPRIGHT=14; {$EXTERNALSYMHTBOTTOM} HTBOTTOM=15; {$EXTERNALSYMHTBOTTOMLEFT} HTBOTTOMLEFT=16; {$EXTERNALSYMHTBOTTOMRIGHT} HTBOTTOMRIGHT=17; {$EXTERNALSYMHTBORDER} HTBORDER=18; {$EXTERNALSYMHTREDUCE} HTREDUCE=HTMINBUTTON; {$EXTERNALSYMHTZOOM} HTZOOM=HTMAXBUTTON; {$EXTERNALSYMHTSIZEFIRST} HTSIZEFIRST=HTLEFT; {$EXTERNALSYMHTSIZELAST} HTSIZELAST=HTBOTTOMRIGHT; {$EXTERNALSYMHTOBJECT} HTOBJECT=19; {$EXTERNALSYMHTCLOSE} HTCLOSE=20; {$EXTERNALSYMHTHELP} HTHELP=21;
希望本文所述对大家的C#程序设计有所帮助。
相关文章
- C# winform美化窗体
- winform与php交互,WinForm与Javascript交互「建议收藏」
- C# WinForm实现自动更新程序的案例分享
- C#中让控件全屏显示的实现代码(WinForm)
- WinForm窗体调用WCF服务窗体卡死问题
- WinForm自动完成控件实例代码简析
- Winform之TextBox输入日期格式验证yyyy-mm-dd
- WinForm子窗体访问父窗体控件的实现方法
- winform使用委托和事件来完成两个窗体之间通信的实例
- WinForm拖拽控件生成副本的解决方法
- WinForm项目开发中WebBrowser用法实例汇总
- C#Winform中实现主窗口打开登录窗口关闭的方法
- Winform下实现图片切换特效的方法