问题描述
我想用C#编写一个类似于VisualStudio中的解决方案资源管理器那样的窗口,可以实现停靠、自动隐藏等功能,不知道如何实现,望大家多帮忙。
解决方案
解决方案二:
看看........
解决方案三:
黑,虽然没想过,不过先mark一下。
解决方案四:
up
解决方案五:
关注
解决方案六:
有个目前已经编写好了商业软件控件,DotNetBar你可以去搜索一些,有破解版本。
解决方案七:
参考如下代码:usingSystem.Runtime.InteropServices;publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}[DllImport("user32.dll")]publicstaticexternIntPtrGetDesktopWindow();protectedoverrideCreateParamsCreateParams{get{constintWS_EX_TOPMOST=8;base.CreateParams.Parent=GetDesktopWindow();base.CreateParams.ExStyle|=WS_EX_TOPMOST;returnbase.CreateParams;}}AnchorStylesanchors;constintOFFSET=2;protectedoverridevoidWndProc(refMessagem){constintWM_MOVING=534;switch(m.Msg){caseWM_MOVING://窗体移动的消息,控制窗体不会移出屏幕外intleft=Marshal.ReadInt32(m.LParam,0);inttop=Marshal.ReadInt32(m.LParam,4);intright=Marshal.ReadInt32(m.LParam,8);intbottom=Marshal.ReadInt32(m.LParam,12);left=Math.Min(Math.Max(0,left),Screen.PrimaryScreen.Bounds.Width-Width);top=Math.Min(Math.Max(0,top),Screen.PrimaryScreen.Bounds.Height-Height);right=Math.Min(Math.Max(Width,right),Screen.PrimaryScreen.Bounds.Width);bottom=Math.Min(Math.Max(Height,bottom),Screen.PrimaryScreen.Bounds.Height);Marshal.WriteInt32(m.LParam,0,left);Marshal.WriteInt32(m.LParam,4,top);Marshal.WriteInt32(m.LParam,8,right);Marshal.WriteInt32(m.LParam,12,bottom);anchors=AnchorStyles.None;if(left<=OFFSET)anchors|=AnchorStyles.Left;if(top<=OFFSET)anchors|=AnchorStyles.Top;if(bottom>=Screen.PrimaryScreen.Bounds.Height-OFFSET)anchors|=AnchorStyles.Bottom;if(right>=Screen.PrimaryScreen.Bounds.Width-OFFSET)anchors|=AnchorStyles.Right;timer1.Enabled=anchors!=AnchorStyles.None;break;}base.WndProc(refm);}privatevoidForm1_Load(objectsender,EventArgse){timer1.Enabled=false;timer1.Interval=200;TopMost=true;}[DllImport("user32.dll")]publicstaticexternIntPtrWindowFromPoint(PointPoint);[DllImport("user32.dll")]publicstaticexternIntPtrGetParent(IntPtrhWnd);privatevoidtimer1_Tick(objectsender,EventArgse){IntPtrvHandle=WindowFromPoint(Control.MousePosition);while(vHandle!=IntPtr.Zero&&vHandle!=Handle)vHandle=GetParent(vHandle);if(vHandle==Handle)//如果鼠标停留的窗体是本窗体,还原位置{if((anchors&AnchorStyles.Left)==AnchorStyles.Left)Left=0;if((anchors&AnchorStyles.Top)==AnchorStyles.Top)Top=0;if((anchors&AnchorStyles.Right)==AnchorStyles.Right)Left=Screen.PrimaryScreen.Bounds.Width-Width;if((anchors&AnchorStyles.Bottom)==AnchorStyles.Bottom)Top=Screen.PrimaryScreen.Bounds.Height-Height;}else//隐藏起来{if((anchors&AnchorStyles.Left)==AnchorStyles.Left)Left=-Width+OFFSET;if((anchors&AnchorStyles.Top)==AnchorStyles.Top)Top=-Height+OFFSET;if((anchors&AnchorStyles.Right)==AnchorStyles.Right)Left=Screen.PrimaryScreen.Bounds.Width-OFFSET;if((anchors&AnchorStyles.Bottom)==AnchorStyles.Bottom)Top=Screen.PrimaryScreen.Bounds.Height-OFFSET;}}}
解决方案八:
mark
解决方案九:
授人予鱼不如授人予渔