C#多显示器转换的两种方法 - SetWindowPos,Screen

openeguest 贡献于2014-06-28

作者 Administrator  创建于2013-03-31 09:20:00   修改者tclsevers  修改于2013-03-31 09:20:00字数2072

文档摘要:实现多屏显示目的:一般情况下是一个电脑显示屏,外接一个电视显示屏。在电脑上显示的一个窗体需要单独(没有窗体头,没有窗体边框)显示在电视上,并且还能再拉回电脑显示屏显示。
关键词:

【有奖提问】CSDN论坛第1期专家问答开始        来极客头条,赢下载积分        下载频道3月领任务~赚下载分! C#多显示器转换的两种方法——SetWindowPos,Screen 分类: C#编程 2010-12-06 10:52 1776人阅读 评论(0) 收藏 举报 c#imageuser.net任务api 实现多屏显示目的:一般情况下是一个电脑显示屏,外接一个电视显示屏。在电脑上显示的一个窗体需要单独(没有窗体头,没有窗体边框)显示在电视上,并且还能再拉回电脑显示屏显示。 两种显示方法: 1、API方法 这种方法需要引微软的user32.dll,不过在VS中已经自动引过了,只需要加个外部引用   [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetWindowPos", SetLastError = true)] private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);   解释: SetWindowPos函数功能是将一个窗口在三维空间中移动,利用它,你可以改变一个窗口的位置,甚至可以在Z轴上改变(Z轴决定了一个窗口和其它窗口的前后关系),你还可以改变窗口的尺寸。为了实现TopMost类型的窗口,我们只需调用该函数,将窗口放在所有窗口的前面并永远保持在最前面即可   表1 SetWindowPos函数的参数解释 参数名 参数含义 hwnd 要移动的窗口的句柄(可以用窗体的hwnd属性) hWndInsertAfter 关于如何在Z轴上放置窗口的标记(具体见表2) x 相当于窗口的Left属性 y 相当于窗口的Top属性 cx 相当于窗口的Right属性 cy 相当于窗口的Botto m属性 wFlags 关于如何移动窗口的标记(具体见表3) 表2 HWndInsertAfter参数的可能取值及含义 hWndInsertAfter的可能取值 功能 某一窗口的句柄 将窗口放在该句柄指定的窗口后面 HWND_BOTTOM(1) 把窗口放在Z轴的最后,即所有窗口的后面 HWND_TOP(0) 将窗口放在Z轴的前面,即所有窗口的前面 HWND_TOPMOST(-1) 使窗口成为“TopMost”类型的窗口,这种类型 的窗口总是在其它窗口的前面,真到它被关闭 HWND_NOTOPMOST(-2) 将窗口放在所有“TopMost”类型 窗口的后面、其它类型窗口的前面 表3 wFlags参数的可能值及含义 wFlags参数的可能值 功能 SWP_DRAWFRAME(&H20) 移动窗口后重画窗口及其上的所有内容 SWP_HIDEWINDOW(&H80) 隐藏窗口,窗口隐藏后既不出现在屏幕上也不出现在任务栏上,但它仍然处于激活状态 SWP_NOACTIVATE(&H10) 窗口移动后不激活窗口,当然,如果窗口在移动前就是激活的则例外 SWP_NOCOPYBITS(&H100) 当窗口移动后,不重画它上面的任何内容 SWP_NOMOVE(&H2) 不移动窗口(即忽略X和Y参数) SWP_NOSIZE(&H1) 不改变窗口尺寸(即忽略Cx和Cy参数) SWP_NOREDRAW(&H8) Do not remove the image of the window in its former position from the screen. In other words,leave behind a ghost image of the window in its old position SWP_NOZORDER(&H4) 不改变窗口听Z轴位置(即忽略hWndInsertAfter参数) SWP_SHOWWINDOW(&H40) 显示窗口 例子: SetWindowPos(this.Handle, (IntPtr)(0), 1024, 0, 1024, 768, 0x0040);   this.Handle 要移动的是当前窗体; (IntPtr)(0) 将窗口放在Z轴的前面,即所有窗口的前面; 1024, 0, 由于电脑显示屏是1024*768的,要显示在电视上就从电脑显示屏的右边开始(开始坐标) 1024, 768, 在电视上的分辨率是1024*768 0x0040 显示窗口   2、.Net自带的Screen函数 不需要任何引用直接添加代码 this.FormBorderStyle = FormBorderStyle.None; this.DesktopBounds = Screen.AllScreens[1].Bounds; 这两行代码表示将一个无边框的窗体全屏显示在第二个窗体上。   获取所有窗体的显示比率: Screen[] s = Screen.AllScreens; ScreensRect = new Rectangle[s.Length]; for (int i = 0; i < s.Length; i++) { ScreensRect[i] = s[i].WorkingArea; } 获取: int iX = ScreensRect[1].X; int iY = ScreensRect[1].Y;

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档