[wy231的专栏]关于C#多屏幕显示器编程

转载 2006年05月18日 20:20:00
 关于C#多屏幕显示器编程

在窗口的中间有一个System.Windows.Forms.PictureBox控件(该控件区域的面积为所在窗口的1/4),当该控件的大部分区域落在其中一台显示器时,在另一台显示器将不显示该控件,(该PictureBox控件将移动到主显示器所在的窗口区域)。
是否应该调用GetMonitorInfo?

首先你需要知道一个屏幕是如何分割成多个显示器显示的,即每个显示器显示多大region。
而在初始化picturebox的时候,你可以通过
Screen.PrimaryScreen.Bounds
来获得屏幕大小,至于控件的位置,你可以先转换到屏幕坐标,然后按照前面获得比例尺寸(一个屏幕是如何分割成多个显示器显示的,即每个显示器显示多大region),最后进行判断处理。

 

多屏幕编程简单么?
比如分辨率1024*768
第一个屏幕就是0~1024,第二个屏幕就是1025~2048,....
如果你要把某一画面显示在第二个屏幕。。。只要把它的x,y位置即可。。。

 

受了Knight94(愚翁)的启发,做了个测试,可以实现我需要的效果了,谢谢Knight94。
测试代码如下:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace WindowsApplication12
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private int tmpx = 0;
private int tmpy = 0;
private System.Windows.Forms.PictureBox pictureBox1;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;

System.Drawing.Rectangle[] ScreensRect;

public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();

//
// TODO: Add any constructor code after InitializeComponent call
//
}

/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.SuspendLayout();
//
// pictureBox1
//
this.pictureBox1.BackColor = System.Drawing.SystemColors.HotTrack;
this.pictureBox1.Location = new System.Drawing.Point(120, 88);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(248, 176);
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(504, 357);
this.Controls.Add(this.pictureBox1);
this.Name = "Form1";
this.Text = "Form1";
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseDown);
this.Load += new System.EventHandler(this.Form1_Load);
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseUp);
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
this.tmpx = e.X;
this.tmpy = e.Y;
this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.form1_MouseMove);

}

private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
this.MouseMove -= new System.Windows.Forms.MouseEventHandler(this.form1_MouseMove);

System.Drawing.Rectangle pictureBox1Rect=Screen.GetWorkingArea(pictureBox1);

for(int i=0;i<ScreensRect.Length;i++)
{
    if(ScreensRect[i].X==pictureBox1Rect.X && ScreensRect[i].Y==pictureBox1Rect.Y)
this.Location=new Point(ScreensRect[i].X,pictureBox1Rect.Y);
}
//MessageBox.Show(" WorkingArea:" + re.ToString());
}
private void form1_MouseMove(object sender, MouseEventArgs e)
{
this.Location = new System.Drawing.Point(this.Location.X + e.X - this.tmpx, this.Location.Y + e.Y - this.tmpy);
}

private void Form1_Load(object sender, System.EventArgs e)
{
Screen[] s=Screen.AllScreens;
ScreensRect=new Rectangle[s.Length];
for(int i=0;i<s.Length;i++)
{
ScreensRect[i]= s[i].WorkingArea;
}
}
}
}



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=742012

Windows 多显示器下的编程

概要 本文分步骤介绍如何在 Windows XP 中配置和使用多台监视器。 Windows XP 可通过使用多台监视器扩大您的桌面,进而提高您的工作效率。一台计算机上可连接多达十台单独的监视...

Windows系统下的多显示器模式编程

(一) Windows系统下的多显示器模式的原理        Microsoft新的操作系统(Windows 98//Windows 2000//Windows XP)内置了对多监视器的支持,即用...

多显示器编程案例

  • 2011年11月08日 14:00
  • 189KB
  • 下载

用笔记本编程,强烈建议外接一个大屏幕显示器!(最好用HDMI接口)

http://item.jd.com/1097163.html
  • lvjin110
  • lvjin110
  • 2014年06月02日 13:59
  • 22542

VDHL VGA控制器设计实现显示器屏幕保护模块

基本功能: 1、通过FPGA板的VGA接口在显示器上分别显示不同颜色的横向、竖直条纹图案,横向条纹和竖直条纹的切换通过FPGA板上的按键实现。 2、通过VGA控制器,在屏幕上显示640*480...

修改监视器驱动为大显示器来提高屏幕分辨率

WIn7里面可以通过修改显示设置- 监视器驱动为大显示器来提高分辨率选项吗?把显示器变成一个镜头,可以再大桌面移动那种的?是这样的,在XP里面可以通过修改监视器 驱动 (桌面右键) 设置>监视器>属性...
  • dj0379
  • dj0379
  • 2011年07月05日 12:55
  • 7371

【】【】双屏幕液晶显示器的有趣玩法~~~~~~~~~~~~~~~~

【】【】双屏幕液晶显示器的有趣玩法~~~~~~~~~~~~~~~~ 此帖对"联想IdeaPad"的评论 可能很多消费者在今天已经购买了液晶显示器,相信LCD轻薄、环保的特性也让您在使用过程中...

请问屏幕保护程序对液晶显示器有没有损害?

请问屏幕保护程序对液晶显示器有没有损害?2007-10-06 21:37投射手Robert | 分类:电脑外接设备 | 浏览1510次分享到:2007-10-06 23:11提问者采纳肯定的说:有!L...

修复液晶显示器屏幕上的划痕

有很多电子设备都采用了液晶屏,而在日常使用中难免磕磕碰碰,这也使得液晶屏幕上经常会留下些小划痕,天天看着这些碍眼的划痕,大家心里一定很不爽吧,实际上我们可以自己动手通过一些小技巧将它们赶走: 方...
  • xwlyun
  • xwlyun
  • 2013年06月23日 20:50
  • 789

巧用电视卡让笔记本屏幕作PS2游戏显示器

有几个朋友经常使用PS2玩游戏,但总觉得屏幕太小,玩得不够爽。那么,小编建议你用笔记本屏幕作PS2游戏显示器吧!不会?放心,既然小编说出了,肯定会告诉大家怎么用PS2连接笔记本操作游戏的。看我巧用PC...
  • alkdjal
  • alkdjal
  • 2014年06月14日 15:09
  • 755
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[wy231的专栏]关于C#多屏幕显示器编程
举报原因:
原因补充:

(最多只允许输入30个字)