VC实现Windows多显示器编程的方法

本文实例讲述了VC实现Windows多显示器编程的方法。分享给大家供大家参考。具体如下:

一、Windows中接入多个显示器时,可设置为复制和扩展屏。

1、设置为复制屏幕时,多个显示器的分辨率是一样的,位置为0~分辨率值

2、设置为扩展屏幕时,显示器之间的关系比较复杂些。首先Windows系统会识别一个主显示器,这个可以在屏幕分辨率中更改。多个显示器之间的位置关系也可以再屏幕分辨率中更改。其中主显示器的位置为(0,0)到(width,height),其他显示器位置由与主显示器的位置关系决定,在主显示器左上,则为负数,用0减去长宽;在右下,则由主显示器的分辨率加上长宽。其中驱动或用mouse_event处理时也是一样,主显示器为0~65535,其他显示器根据主显示器的相对位置确定。

二、相关程序和API如下:

1、获取当前显示器的分辨率

m_iCurScrWidth = ::GetSystemMetrics(SM_CXSCREEN);
m_iCurScrHeight = ::GetSystemMetrics(SM_CYSCREEN);

2、移动窗口位置

MoveWindow(0, 0, m_iCurScrWidth, m_iCurScrHeight);
//移动窗口
ModifyStyle(WS_CAPTION,0,0);
//取消标题栏

3、获取显示器数量

代码如下:

GetSystemMetrics(SM_CMONITORS);

4、获取显示器的相对位置于分辨率

void GetScreenRect(int ScreenNo)
{
BOOL flag;
DISPLAY_DEVICE dd;
 ZeroMemory(&dd, sizeof(dd));
 dd.cb = sizeof(dd);
flag = EnumDisplayDevices(NULL, ScreenNo, &dd, 0);
if (!flag) return;
DEVMODE dm;
ZeroMemory(&dm, sizeof(dm));
dm.dmSize = sizeof(dm);
flag = EnumDisplaySettings(dd.DeviceName,ENUM_CURRENT_SETTINGS, &dm);
m_ScrRect[ScreenNo].left = dm.dmPosition.x;
m_ScrRect[ScreenNo].top = dm.dmPosition.y;
m_ScrRect[ScreenNo].right = dm.dmPelsWidth;
m_ScrRect[ScreenNo].bottom = dm.dmPelsHeight;
}

希望本文所述对大家的VC程序设计有所帮助。

(0)

相关推荐

  • C++ 学习之旅 Windows程序内部运行原理

    学习C++与.net不同的是,一定要搞清楚Windows程序内部运行原理,因为他所涉及大多数是操作系统的调用,而.net毕竟是在.netFrameWork上唱戏. 那Windows应用程序,操作系统,计算机硬件之间的相互关系究竟什么了,下面的图就给予很好的解释. 向下箭头①是 应用程序运行判断处理的结果,输出到输出的设备. 向上箭头②是输入设备,输入到操作系统中. 向下箭头③代表API,我们要解释以下API是什么.API是应用程序接口, 表示应用程序可以通知操作系统执行某个具体的动作,如操作系统

  • c++利用windows函数实现计时示例

    复制代码 代码如下: //Windows系统下可以用 time(),clock(),timeGetTime(),GetTickCount(),QueryPerformanceCounter()来对一段程序代码进行计时 #include <stdio.h>#include <windows.h>#include <time.h>                   //time_t time()  clock_t clock()    #include <Mmsys

  • VC程序在Win32环境下动态链接库(DLL)编程原理

    本文详细讲述了VC程序在Win32环境下动态链接库(DLL)编程原理.分享给大家供大家参考.具体分析如下: 一般比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作.其中可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用.在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序EXE文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费:另一个缺点是

  • VC编程控件类HTControl之CHTGDIManager GDI资源管理类用法解析

    本文主要介绍了VC编程控件类HTControl的CHTGDIManager GDI资源管理类用法,MFC提供的CBitmap类的LoadBitmap接口只能从EXE内部获取位图,但是很多情况下需要从EXE外部获取,CHTGDIManager类提供了从EXE外部获取位图的接口,使用方法如下: m_hBmpBtnCloseNormal = m_HTGDIManager.GetBitmap(_T(".\\pic\\btn_close_normal.png")); #if !defined(_

  • 浅析PHP程序设计中的MVC编程思想

    PHP的MVC编程思想目前已经被广泛使用于各种大型项目的开发,很多成熟的MVC框架也逐渐被大家所熟知并被广泛应用于各类项目中,比较常见的如ThinkPHP.codeigniter.Symfony.yii.cakePHP等等.本文就来简述一下php的MVC程序设计思想. 一.什么是MVC 简单的说就是将网站源码分类.分层. MVC三个字母的含义: M:Model 模型,负责数据库操作. V:View 视图,负责调用Model调取数据,再调用模板,展示出最终效果. C:Controller 控制器,

  • C语言实现在windows服务中新建进程的方法

    本文实例讲述了C语言实现在windows服务中新建进程的方法.分享给大家供大家参考.具体如下: 运行环境:visual stdio 2008 文件名:testService.c #include <windows.h> #include <stdio.h> #include <time.h> #include <tchar.h> HANDLE hMutex; SERVICE_STATUS ServiceStatus; SERVICE_STATUS_HANDL

  • VC多线程编程详解

    本文实例讲述了VC多线程编程概念与技巧,分享给大家供大家参考.具体分析如下: 一.多线程编程要点 线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享所有的进程资源,包括打开的文件.信号标识及动态分配的内存等.一个进程内的所有线程使用同一个地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行以及什么时候执行线程.线程有优先级别,优先权较低的线程必须等到优先权较高的线程执行完后再执行.在多处理器的机器上,调度程序可将多个线程放到不同的处理器上去运行,这样可

  • 基于Windows C++ 应用程序通用日志组件的使用详解

    引言 在如何记录程序日志方面,通常有三种选择: 1.采用Log4CXX等公共开源日志组件:这类日志组件的特点是跨平台且功能比较强大,例如可以把日志发往另一台服务器或记录到数据库中等:另外,可配置性较高,可以通过配置文件或程序代码对日志进行很多个性化设置.但从另外一个角度看,由于这些优点往往也导致了在使用方面的缺点.首先,对于一般应用程序来说,它们并不需要太多的功能,通常只需要把日志记录到文件或反馈到应用程序,功能太多反正让用户使用起来觉得繁琐还得背负很多从来都用不到的代码.其次,这类日志组件通常

  • VC实现Windows多显示器编程的方法

    本文实例讲述了VC实现Windows多显示器编程的方法.分享给大家供大家参考.具体如下: 一.Windows中接入多个显示器时,可设置为复制和扩展屏. 1.设置为复制屏幕时,多个显示器的分辨率是一样的,位置为0~分辨率值 2.设置为扩展屏幕时,显示器之间的关系比较复杂些.首先Windows系统会识别一个主显示器,这个可以在屏幕分辨率中更改.多个显示器之间的位置关系也可以再屏幕分辨率中更改.其中主显示器的位置为(0,0)到(width,height),其他显示器位置由与主显示器的位置关系决定,在主

  • VC中实现文字竖排的简单方法(推荐)

    好多人都觉得在VC中实现文字竖排是一件很难的事情,其实可以使用"躺"着的字体很方便的实现文字竖排. Windows中有一些字体是"躺"着的,例如:@Fixedsys.@System.@宋体.@黑体等等,有很多,这些字体和不加@的字体的唯一区别就是用这些字体显示的文字是"躺"着的.如下图: 对这些"躺"着的字体进行270°的旋转就可以实现文字竖排了,效果如下: 以下代码可以产出竖排的宋体. CFont font; CFont *

  • DOS下对注册表的编程的方法

    在DOS方式下也能对注册表进行编程?是的.当您的Windows95/98因注册表问题而无法启动到图形界面时,您此时只有在DOS下对注册表进行手术了.因为注册表编辑器Regedit.exe其实是一个双栖型的程序,既可在DOS下运行,也可在Windows95/98下运行.许多用户可能已经知道在Windows下使用Regedit的方法,那么,要掌握DOS方式下对注册表的编程,首先要了解在DOS下如何使用注册表编辑器.  在DOS提示符下键入Regedit命令,将出现一个帮助屏幕.此屏幕给出了其命令行参

  • VC++获得当前进程运行目录的方法

    本文实例讲述了VC++获得当前进程运行目录的方法,分享给大家供大家参考.具体实现方法如下: 该实例主要通过利用windows API获得,具体代码如下: 复制代码 代码如下: CString GetAppPath() {   CString strAppPath;  // 保存结果   TCHAR szModuleFileName[MAX_PATH]; // 全路径名   TCHAR drive[_MAX_DRIVE];  // 盘符名称,比如说C盘啊,D盘啊   TCHAR dir[_MAX_

  • 批处理与python代码混合编程的方法

    批处理可以很方便地和其它各种语言混合编程,除了好玩,还有相当的实用价值,比如windows版的ruby gem包管理器就是运用了批处理和ruby的混合编写,bathome出品的命令工具包管理器bcn 使用了bat+jscript的混编实现的. cn-dos和bathome论坛里先后有帖子介绍和示范了批处理和各种语言脚本的混合编程,有兴趣可以搜索看看. python不挑剔文件后缀,只要程序中包含正确的python代码都可以用python 解释器解释执行. 批处理与python的混合编程方法很简单,

  • VC++中进程与多进程管理的方法详解

    本文实例讲述了VC++中进程与多进程管理的方法,分享给大家供大家参考.具体方法分析如下: 摘要: 本文主要介绍了多任务管理中的多进程管理技术,对进程的互斥运行.子进程的创建与结束等作了较详细的阐述. 关键词: VC++6.0:进程:环境变量:子进程 进程 进程是当前操作系统下一个被加载到内存的.正在运行的应用程序的实例.每一个进程都是由内核对象和地址空间所组成的,内核对象可以让系统在其内存放有关进程的统计信息并使系统能够以此来管理进程,而地址空间则包括了所有程序模块的代码和数据以及线程堆栈.堆分

  • C#通过热键控制显示器开关的方法

    本文实例讲述了C#通过热键控制显示器开关的方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Sys

  • Log4j 日志文件Linux/Mac/Windows通用存放位置设置方法

    log4j1/log4j2中category的配置以及log的输出位置(windows和linux通用的log输出位置) 一.场景和需求 假设我现在有3个独立的用project(暂时用maven关联起来,当然也可以不用maven),一个是提供公共服务的infrastructure,一个是提供存储的persister,一个是提供搜索的searcher,其中提供基础服务的所有的类,例如DateUtils,HttpUtils等工具类都位于目录com.chuanliu.platform.activity

  • java执行windows下cmd命令的方法

    本文实例讲述了java执行windows下cmd命令的方法.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: //获取运行时 Runtime rt = Runtime.getRuntime(); //获取进程 Process p = rt.exec(String[] cmdarray);//或者 Process p = rt.exec(String cmd); //如果p不为空,那么要清空 if(null!=p){destory p.destory(); p=null; } 例如

  • python实现在windows下操作word的方法

    本文实例讲述了python实现在windows下操作word的方法.分享给大家供大家参考.具体实现方法如下: import win32com from win32com.client import Dispatch, constants w = win32com.client.Dispatch('Word.Application') # 或者使用下面的方法,使用启动独立的进程: # w = win32com.client.DispatchEx('Word.Application') # 后台运行

随机推荐