加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C# Form 设置窗口显示层级、置顶、置底

(2017-04-12 15:21:30)
分类: C#

1     SetParent

设置父层面板,即将当期窗口显示在某个窗口之上

[DllImport("user32.dll")]

        public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

 

2     SetWindowPos窗口置顶使用说明

SetWindowPos函数改变一个子窗口,弹出式窗口或顶层窗口的尺寸,位置和Z序。子窗口,弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高,并且被设置为Z序的第一个窗口。

2.1   函数原型

WINUSERAPIBOOL WINAPI SetWindowPos(HWND hWnd,HWND hWndInsertAfter,intX,int Y,int cx,_In_ int cy, UINT uFlags);

如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误消息,请调用GetLastError函数。

2.2   函数参数

hwnd

z序中的位于被置位的窗口前的窗口句柄。该参数必须为一个窗口句柄

hWndlnsertAfter

用于标识在z-顺序的此 CWnd 对象之前的 CWnd 对象。如果uFlags参数中设置了SWP_NOZORDER标记则本参数将被忽略。可为下列值之一:

·             HWND_BOTTOM:值为1,将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口,则窗口失去顶级位置,并且被置在其他窗口的底部。

·             HWND_NOTOPMOST:值为-2,将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。如果窗口已经是非顶层窗口则该标志不起作用。

·             HWND_TOP:值为0,将窗口置于Z序的顶部。

·             HWND_TOPMOST:值为-1,将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。

查看该参数的使用方法,请看说明部分。

x

以客户坐标指定窗口新位置的左边界。

Y

以客户坐标指定窗口新位置的顶边界。

cx

以像素指定窗口的新的宽度。

cy

以像素指定窗口的新的高度。

uFlags

窗口尺寸和定位的标志。该参数可以是下列值的组合:

1.         SWP_ASYNCWINDOWPOS:如果调用进程不拥有窗口,系统会向拥有窗口的线程发出需求。这就防止调用线程在其他线程处理需求的时候发生死锁。

2.         SWP_DEFERERASE:防止产生WM_SYNCPAINT消息。

3.         SWP_DRAWFRAME:在窗口周围画一个边框(定义在窗口类描述中)。

4.         SWP_FRAMECHANGED:给窗口发送WM_NCCALCSIZE消息,即使窗口尺寸没有改变也会发送该消息。如果未指定这个标志,只有在改变了窗口尺寸时才发送WM_NCCALCSIZE

5.         SWP_HIDEWINDOW;隐藏窗口。

6.         SWP_NOACTIVATE:不激活窗口。如果未设置标志,则窗口被激活,并被设置到其他最高级窗口或非最高级组的顶部(根据参数hWndlnsertAfter设置)。

7.         SWP_NOCOPYBITS:清除客户区的所有内容。如果未设置该标志,客户区的有效内容被保存并且在窗口尺寸更新和重定位后拷贝回客户区。

8.         SWP_NOMOVE:维持当前位置(忽略XY参数)。

9.         SWP_NOOWNERZORDER:不改变z序中的所有者窗口的位置。

10.       SWP_NOREDRAW:不重画改变的内容。如果设置了这个标志,则不发生任何重画动作。适用于客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动而露出的父窗口的所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口的任何部分和父窗口需要重画的部分。

11.       SWP_NOREPOSITIONSWP_NOOWNERZORDER标志相同。

12.       SWP_NOSENDCHANGING:防止窗口接收WM_WINDOWPOSCHANGING消息。

13.       SWP_NOSIZE:维持当前尺寸(忽略cxCy参数)。

14.       SWP_NOZORDER:维持当前Z序(忽略hWndlnsertAfter参数)。

15.       SWP_SHOWWINDOW:显示窗口。

2.3   示例

[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int Width, int Height, int flags);
///
///
得到当前活动的窗口
///
///
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern System.IntPtr GetForegroundWindow();

//弹出新窗体,并置顶

Form2 frm = new Form2();
frm.Show();
SetWindowPos(GetForegroundWindow(), -1, 0, 0, 0, 0, 1 | 2);

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有