扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
一、多屏显示的系统配置方法
为了安装多显示器,首先检查机器硬件,当前Windows操作系统只支持PCI适配器来实现多显示器桌面,它要求显卡必须使用以下芯片组中的一种:ATI Mach64、S3 764和764+、Cirrushgic5436、5446和7458、Imagine 128 Series1和2、S3 Virge或ET6000、M9711等。一般情况下,一个显卡驱动一个显示器,一台机器最多可以驱动7台显示器,其中一台为主显示器,其余为副显示器。主显示器也是Windows启动画面出现的那个显示器。
进入"控制面板"-"显示",双击"显示",弹出"显示属性"对话框,选中"设置",如果安装了多个监视器,这时候对话框的上半部分显示系统中目前显示器的数量。可右键单击一个监视器图标,再单击"标识"查看对应于单击其图标的监视器的显示编号。请将它们拖动到代表在监视器间移动项目方式的位置。例如,如果您正使用两个监视器,并希望通过左右拖动来将项目从一个监视器中移到另一个中,请将图标并排排列。要通过上下拖动来在监视器间移动项目,请将图标上下排列。图标的位置并不一定与监视器的物理位置相对应。您可以将图标上下放置,即使监视器是并排放置的。
二、多屏显示的软件实现
通过上面的设置,虽然使Windows支持多显示器扩展桌面的功能,但也仅仅是实现了设备的连接与管理,一般Windows应用程序的窗口不能自动运行到副显示器上,用户只能通过鼠标拖动来将程序的窗口扩展到副显示器上,如果需要将程序窗口自动扩展到不同的显示器显示,必须采用相应的多屏显示编程技术。在这种技术中,可以使用Windows的User32.DLL动态连接库提供的API函数SetWindowPos()(如果采用VC这个开发平台,CWnd类提供了一个同样的成员函数),它的功能是更改窗口的大小、位置及窗口的顺序,因此可以用来在多显示器桌面上实现应用程序窗体的定位显示。下面对这个函数进行详细的解释:
BOOL SetWindowPos( HWND hWnd, // 窗口的句柄; HWND hWndInsertAfter, // 窗口次序句柄, int X, // 窗口左上角的水平位置; int Y, // 窗口左上角的垂直位置; int cx, // 窗口的宽度; int cy, // 窗口的高度; UINT uFlags file://标志位; ); |
这里需要解释的有hWndInsertAfter、uFlags两个参数
hWndInsertAfter
在窗口的"Z"序中排在需要的设置的窗口之前的窗口句柄;这个参数取以下值:
Value | Meaning |
HWND_BOTTOM | 将要操作的窗口放置在所有窗口之下; |
HWND_NOTOPMOST | 将要操作的窗口放置在"non-topmost"窗口之下; |
HWND_TOP | 将操作的窗口放置在所有的窗口之上; |
HWND_TOPMOST | 将要操作的窗口放置在"non-topmost"窗口之上; |
uFlags
规定窗口的尺寸和位置的标志,这个参数通常取以下值:
Value | Meaning |
SWP_DRAWFRAME | 窗口重画时,绘制出窗口类中所描述的窗口的框架 |
SWP_HIDEWINDOW | 隐藏窗口; |
SWP_NOACTIVATE | 窗口无任何动作; |
SWP_NOMOVE | 保持窗口的当前位置; |
SWP_NOREDRAW | 在新位置并不重画窗口; |
SWP_NOSIZE | 改变窗口的位置,并不改变窗口的大小,既忽略cx,cy两个参数的值; |
SWP_NOZORDER | 窗口重画时,保留当前的顺序,既忽略hWndInsertAfter参数的值 |
SWP_SHOWWINDOW | Displays the window. |
另,该参数还可以取其它的值,具体含义读者可以参考MSDN。
为了说明问题,下面的VB代码仅仅实现了在两个显示器分别显示不同的窗口,用户点击按钮后,主显示器显示窗口Form1,副显示器显示窗口Form2,感兴趣的读者可以稍加修改,就可以应用到实际项目开发中去。
首先在VB全局模块中声明:
Public Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long |
其次在需要定位的两个窗口模块中调用该函数。具体的VB代码是:
Private Sub Form1_Load( ) End Sub |
为了正确的显示,需要将窗体的ScaleMode属性设置为twips,这样才可以与Windows系统中ScreenWidth和ScreenHeight的计量单位twips保持一致。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者