原文 http://blog.csdn.net/hejialin666/article/details/6057551

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

两种显示方法:

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 相当于窗口的Bottom属性
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;

注:部分内容引自http://hi.baidu.com/libeiqi1201/blog/item/aa8322fececbbf3c5d600816.html

C#多显示器转换的两种方法——SetWindowPos,Screen的更多相关文章

  1. java字符串大小写转换的两种方法

    转载自:飞扬青春sina blogjava字符串大小写转换的两种方法 import java.io..* public class convertToPrintString {          pu ...

  2. C# char[]与string互相转换的两种方法

    1.string转换为char[]:char[] string.ToCharArray(); static void Main(string[] args)        {            s ...

  3. string与QString之间的转换(两种方法:fromStdString直接转换,或者fromLocal8Bit(cstr.c_str())

    string str;QString qstr; //从QString 到 std::stringstr = qstr.toStdString(); //从std::string 到QStringqs ...

  4. HTML 的特殊字符转换转义符,的两种方法。

    HTML 的特殊字符转换转义符,的两种方法. 方法一: function htmlEscape(str) { return String(str) .replace(/&/g, '&' ...

  5. [转载]C#读写txt文件的两种方法介绍

    C#读写txt文件的两种方法介绍 by 大龙哥 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char ...

  6. Kettle_设置变量的两种方法

    一个复杂的kettle作业一般包括很多子作业和转换,在主作业Start后通常会添加一个[设置变量]的流程,该流程的功能是为所有流程的公共变量设置通用值.       主作业添加的[设置变量]针对的是所 ...

  7. Java构造和解析Json数据的两种方法详解二

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...

  8. C#读写txt文件的两种方法介绍

    C#读写txt文件的两种方法介绍 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出 ...

  9. AE 将地图导出为图片的两种方法

    在ArcGIS的开发中,我们经常需要将当前地图打印(或是转出)到图片文件中.将Map或Layout中的图象转出有两种方法,一种为通过IActiveView的OutPut函数,另外一种是通过IExpor ...

随机推荐

  1. SQL Server 索引的图形界面操作 <第十二篇>

    一.索引的图形界面操作 SQL Server非常强大的就是图形界面操作.关于索引方面也一样那么强大,很多操作比如说重建索引啊,查看各种统计信息啊,都能够通过图形界面快速查看和操作,下面来看看SQL S ...

  2. 【转】Compile、Make和Build的区别

    原文网址:http://lavasoft.blog.51cto.com/62575/436216 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任 ...

  3. Poj 2187 Beauty Contest_旋转凸包卡壳

    题意:给你n个坐标,求最远的两点距离 思路:用凸包算法求处,各个定点,再用旋转凸包卡壳 #include <iostream> #include <cstdio> #inclu ...

  4. Debug of bash , perl and python

    1.bash -x   script 2.perl -d  script 3. python -m pdb script n: execute the next line s: execute the ...

  5. Impala 4、Impala JDBC

    • 配置: – impala.driver=org.apache.hive.jdbc.HiveDriver – impala.url=jdbc:hive2://node2:21050/;auth=no ...

  6. Unity 改变类模板-为你的类添加一个命名空间

    之前在写代码的时候,就很疑惑为什么创建类的时候.没有命名空间呢?   后来自己的类终于和别人写的类名字有冲突.... 如何修改Unity创建类的模板呢?  找到下面这个文件 然后修改 保存文件在Uni ...

  7. windows 下使clion支持c++11操作记录

    最近用上了windows下的clion,发现默认安装的MINGW版本太低,导致所带的gcc版本竟然是3.5的,实在太老了,不支持c++11,于是手动修改了mingw的版本.首先去mingw的官网下载最 ...

  8. NET基础课--XML基础

    id level是属性,title为子节点 接下来操作子节点 比较xml的处理方式: 1和3适合数据量小的时候.

  9. Properties的读取和写入

    Properties是HashTable下的一个持久的属性集,没有泛型,key-value都是String类型.由于能与IO流结合使用,所以能方便地操作属性文件或者xml文件. 一.propertie ...

  10. Core Bluetooth下实现两个设备进行互联

    一.外设管理者 - 发布广告 如果两部手机在BLE的基础上进行连接,需要让其中一部手机作为外设,外设需要进行广播自己需要发布的数据,以供中心设备的接收和处理. 实现外设广播数据并且处理发送过程当中的流 ...