隐藏窗体的客户区(但使标题栏可见)visible)当鼠标不在标题栏上时寻找开发方法:Hebergerimagehttp://sofzh.miximages.com/c%23/mini_350415Explications.png当鼠标悬停在窗体的标题栏上时(图片上的rectange1),表格内容(rectange2)可见,当鼠标没有结束时,它就消失了,但是rectangle1必须保持可见!我怎样才能做到这一点?提前致谢有一些与窗体的非客户区相关的鼠标事件(WM_NCMOUSEMOVE,WM_NCMOUSELEAVE,...)可用于此目的。但这并不简单,因为它们不包含在Windows窗体中。要使用此事件,您应该覆盖窗体的WndProc。捕获WM_NCMOUSEMOVE事件有点简单,但WM_NCMOSUELEAVE有点棘手。Windows通常不会向鼠标发送鼠标离开事件,除非它们使用TrackMouseEvent函数明确请求它。以下是完整符合您要求的完整代码:显示客户区();}elseif(m.Msg==0x2A2)//WM_NCMOUSELEAVE{HideClientAreaIfPointerIsOut();}base.WndProc(refm);}protectedoverridevoidOnMouseLeave(EventArgse){base.OnMouseLeave(e);HideClientAreaIfPointerIsOut();}privateintpreviousHeight;privatevoidShowClientArea(){if(this.ClientSize.Height==0)this.ClientSize=newSize(this.ClientSize.Width,preforeHeight);}privatevoidHideClientAreaIfPointerIsOut(){if(this.Bounds.Contains(Cursor.Position))返回;previousHeight=this.ClientSize.Height;this.ClientSize=newSize(this.ClientSize.Width,0);}publicstaticvoidTrackNcMouseLeave(Controlcontrol){TRACKMOUSEEVENTtme=newTRACKMOUSEEVENT();tme.cbSize=(uint)Marshal.SizeOf(tme);tme.dwFlags=2|0x10;//TME_LEAVE|TME_NONCLIENTtme.hwndTrack=control.Handle;轨迹鼠标事件(时间);}[DllImport("user32")]publicstaticexternboolTrackMouseEvent([In,Out]TRACKMOUSEEVENTlpEventTrack);[StructLayout(LayoutKind.Sequential)]publicclassTRACKMOUSEEVENT{publicuintcbSize;公共单位dwFlags;IntPtrhwndTrack;publicuintdwHoverTime;}将此代码部分放在表单类中并处理所有内容通过覆盖WndProc,我们正在处理所需的鼠标事件。在WM_NCMOUSEMOVE事件中,我们调用一个方法来通知操作系统我们对WM_NCMOUSELEAVE事件感兴趣,同时我们还显示窗体的客户区(如果它不可见)。在WM_NCMOUSELEAVE事件中,我们隐藏窗体的客户区(如果光标不在窗体上)。每次调用WM_NCMOUSELEAVE事件,TrackMouseEvent请求的所有跟踪事件都会被取消,所以我们必须在每次WM_NCMOUSEMOVE时调用TrackMouseEvent函数。请注意,此代码中未考虑最大化形式,您应该以某种方式处理它。我建议您创建一个无边框窗体并使用停靠在顶部的自定义控件作为标题栏。然后就像在MouseEnter和MouseLeave事件中更改窗体的高度一样简单!希望有帮助!知道您的FormBorderStyle设置为None,您可以根据鼠标的位置和矩形的大小开发一些东西,因此您必须使用MouseEnter和MouseLeave事件,如所谓的Digvijay。下面是我的示例代码:以上是C#学习教程:当鼠标不在标题栏上时,隐藏窗体的客户区(但要使标题栏可见)分享所有内容,如果有用给大家,需要了解更多C#学习教程的,希望大家多多关注~}privatevoidRectangle1_MouseLeave(objectsender,EventArgse){if(!myForm.Bounds.Contains(MousePosition)){myForm.Height=Rectangle1.Height;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
