VC获取屏幕分辨率及大小相关

VC得到屏幕的当前分辨率方法(5种) 阅读详情

vc得到屏幕的当前分辨率方法:
1.Windows API调用
int width = GetSystemMetrics ( SM_CXSCREEN ); 
int height= GetSystemMetrics ( SM_CYSCREEN ); 
如果想动态自适应分辨率的变化,处理WM_DISPLAYCHANGE消息. 
2.获得分辨率
BOOL EnumDisplaySettings( 
LPCTSTR lpszDeviceName, // display device 
DWORD iModeNum, // graphics mode 
LPDEVMODE lpDevMode // graphics mode settings 
); 

改变分辨率 
LONG ChangeDisplaySettings( 
LPDEVMODE lpDevMode, // graphics mode 
DWORD dwflags // graphics mode options 
); 
3.用GetDeviceCaps 

int GetDeviceCaps( 
HDC hdc, // handle to the device context 
int nIndex // index of capability to query 
); 

4.用GetDeviceCaps
HDC hdcScreen = GetDC( NULL ); 
int cx = GetDeviceCaps( hdcScreen, HORZRES ); 
int cy = GetDeviceCaps( hdcScreen, VERTRES ); 
DeleteObject( hdcScreen ); 
其中nIndex可以取: 
HORZRES VERTRES 或 
分别表示: 
HORZRES :Width, in pixels, of the screen. 
VERTRES :Height, in raster lines, of the screen. 

也就是设备的分辨率了
5.得到桌面客户区的大小 
(1) 最简单,使用API 
RECT rc; 
SystemParametersInfo(SPI_GETWORKAREA, 0, (PVOID) &rc, 0); 
str.Format("%d*%d",rc.right-rc.left,rc.bottom-rc.top);
(2)间接计算得到:先用上面的3种方法得到这个屏幕的大小,再减去任务栏的大小(注意:要考虑任务栏是否隐藏的情况)
int cx = GetSystemMetrics(SM_CXSCREEN); 
int cy = GetSystemMetrics(SM_CYSCREEN); 
或 
HDC hdcScreen = GetDC( NULL ); 
int cx = GetDeviceCaps( hdcScreen, HORZRES ); 
int cy = GetDeviceCaps( hdcScreen, VERTRES ); 
DeleteObject( hdcScreen ); 

任务栏: 
CWnd* pTaskWnd = FindWindow( _T("Shell_TrayWnd"), NULL ); 
if( pTaskWnd ) pTaskWnd->ShowWindow( FALSE ); 
任务栏是否隐藏: 
LONG lStyle = GetWindowLong( pTaskWnd->GetSafeHwnd(), GWL_STYLE ); 
if( lStyle & WS_VISIBLE ) 
{ 
//可见 
} 
else 
{ 
//隐藏 
}

/////////////////////////////////
VC获取屏幕大小
int with= GetSystemMetrics(SM_CXFULLSCREEN);

int heigh= GetSystemMetrics(SM_CYFULLSCREEN);

通过上边两个函数获取的是显示屏幕的大小,及不包括任务栏等区域。


int cx = GetSystemMetrics( SM_CXSCREEN ); 
int cy = GetSystemMetrics( SM_CYSCREEN );

这两个函数获取的是真正屏幕的大小。

用前两个函数获取的大小可能是1024*687 而用下边两个获取的就是1024*768
说明 
返回与windows环境有关的信息 
返回值 
Long,取决于具体的常数索引 
参数表 
参数 类型及说明 
nIndex Long,常数,指定欲获取的信息;如下表所示 
nIndex常数设置 
常数定义 取得信息 
SM_ARRANGE 设置windows如何排列最小化窗口的一个标志。参考api32.txt中的ARW常数 
SM_CLEANBOOT 指定启动模式。0=普通模式;1=带网络支持的安全模式 
SM_CMETRICS 可用系统环境的数量 
SM_CMOUSEBUTTON 鼠标按钮(按键)的数量。如没有鼠标,就为零 
SM_CXBORDER, SM_CYBORDER 尺寸不可变边框的大小 
SM_CXCURSOR, SM_CYCURSOR 标准指针大小 
SM_CXDLGFRAME, SM_CYDLGFRAME 对话框边框的大小 
SM_CXDOUBLECLK, SM_CYDOUBLECLK 双击区域的大小(参考注解) 
SM_CXFRAME, SM_CYFRAME 尺寸可变边框的大小(在win95和nt 4.0中使用SM_C?FIXEDFRAME) 
SM_CXFULLSCREEN, SM_CYFULLSCREEN 最大化窗口客户区的大小 
SM_CXHSCROLL, SM_CYHSCROLL 水平滚动条上的箭头大小 
SM_CXHTHUMB, SM_CYHTHUMB 滚动块在水平滚动条上的大小 
SM_CXICON, SM_CYICON 标准图标的大小 
SM_CXICONSPACING, SM_CYICONSPACING 桌面图标之间的间隔距离。在win95和nt 4.0中是指大图标的间距 
SM_CXMAXIMIZED, SM_CYMAXIMIZED 最大化窗口的默认尺寸 
SM_CXMAXTRACK, SM_CYMAXTRACK 改变窗口大小时,最大的轨迹宽度 
SM_CXMENUCHECK, SM_CYMENUCHECK 菜单复选号位图的大小 
SM_CXMENUSIZE, SM_CYMENUSIZE 菜单栏上的按钮大小 
SM_CXMIN, SM_CYMIN 窗口的最小尺寸 
SM_CXMINIMIZED, SM_CYMINIMIZED 最小化的窗口必须填充进去的一个矩形小于或等于SM_C?ICONSPACING 
SM_CXMINTRACK, SM_CYMINTRACK 窗口的最小轨迹宽度 
SM_CXSCREEN, SM_CYSCREEN 屏幕大小 
SM_CXSIZE, SM_CYSIZE 标题栏位图的大小 
SM_CXSIZEFRAME, SM_CYSIZEFRAME 具有WS_THICKFRAME样式的窗口的大小 
SM_CXSMICON, SM_CYSMICON 小图标的大小 
SM_CXSMSIZE, SM_CYSMSIZE 小标题按钮的大小 
SM_CXVSCROLL, SM_CYVSCROLL 垂直滚动条中的箭头按钮的大小 
SM_CYCAPTION 窗口标题的高度 
SM_CYKANJIWINDOW Kanji窗口的大小(Height of Kanji window) 
SM_CYMENU 菜单高度 
SM_CYSMCAPTION 小标题的高度 
SM_CYVTHUMB 垂直滚动条上滚动块的高度 
SM_DBCSENABLED 如支持双字节则为TRUE 
SM_DEBUG 如windows的调试版正在运行,则为TRUE 
SM_MENUDropALIGNMENT 如弹出式菜单对齐菜单栏项目的左侧,则为零 
SM_MIDEASTENABLED 允许了希伯来和阿拉伯语 
SM_MOUSEPRESENT 如安装了鼠标则为TRUE 
SM_MOUSEWHEELPRESENT 如安装了带轮鼠标则为TRUE;只适用于nt 4.0 
SM_NETWORK 如安装了网络,则设置位0。其他位保留未用 
SM_PENWINDOWS 如装载了支持笔窗口的DLL,则表示笔窗口的句柄 
SM_SECURE 如安装了安全(保密)机制,则为TRUE 
SM_SHOWSOUNDS 强制视觉提示播放声音 
SM_SLOWMACHINE 系统速度太慢,但仍在运行中(System is too slow for effective use but is being run anyway) 
SM_SWAPBUTTON 如左右鼠标键已经交换,则为TRUE '注意这里 
注解 
双击区域指定屏幕上一个特定的显示区域,只有在这个区域内连续进行两次鼠标单击,才有可能被当作双击事件处理 
其他 
常数 SM_ARRANGE, SM_CLEANBOOT, SM_CMETRICS, SM_C?MAXIMIZED, SM_C?MAXTRACK, SM_C?SIZEFRAME, SM_C?SMICON, SM_C?SMSIZE, SM_CYSMCAPTION, 
SM_SECURE, SM_SHOWSOUNDS, and SM_SLOWMACHINE 未获 NT 3.51 及更早版本的支持

VC++实现Windows屏幕分辨率设置详解 屏幕分辨率是指显示设备在水平和垂直方向上所能显示的像素点数量,是影响视觉体验和应用程序布局的关键参数。在Windows XP系统中,分辨率设置直接影响桌面图标的排列、窗口大小及图形程序的显示效果。用户可通过“显示属性”手动调整分辨率,适应不同显示器(如CRT、LCD)的物理特性。此外,开发人员在进行图形编程时,也需了解如何通过系统接口获取和设置分辨率,以实现更灵活的界面适配和自动化控制,为后续使用VC++进行编程打下基础。该函数用于检索指定显示设备的显示模式设置。 阅读详情

相关推荐

Speedtree学习笔记(案例)——拥有多种材质的植物如何导入使用(以草为例)

注:Speedtree无论保存还是导入模型其存储路径不可有中文。 第一步拆分草的模型 根据所需的材质去拆分(例:假若草的果实,茎秆和叶子是不同的材质那么就需拆分为三份;假若画的全部颜色及材质一样就没有必要去拆分模型) 第二步导入草的模型 在Mesh面板中依次导入草的模型——Do nothing additional right now 第三步扩大草的生长区域范围(可省略)...

L人青的博客 5721

[MFC] 监控屏幕分辨率

背景 Windows 有一个消息叫 WM_DISPLAYCHANGE ,在 MSDN 的介绍是: 显示分辨率更改后,WM_DISPLAYCHANGE消息将发送到所有窗口。窗口通过其WindowProc函数接收此消息。 LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); 我们要做的就是在 MFC 程序中注册这个消息的消息处理函数。 步骤 打开 MFC 的类向导 -

LYSM 1261

AD936x Evaluation Software 详细配置

作者:ShownSun 工作室:时沿科技 文章目录AD936x Evaluation Software详细配置1 系统概述2 AD9361 Wireless Transceiver Evaluation Setup2.1 标签描述2.2 用户参数2.3详细配置3 AD936x RF Wizard3.1 标签描述3.2 用户参数3.3 详细配置4 AD936x Digital Filter Wizard4.1 标签描述4.1.1 时钟配置4.1.2 滤波器配置4.1.3 接收滤波器配置4.1.4 发射滤..

ShownSun博客 5189

在MFC中WM_DISPLAYCHANGE的消息响应

LRESULT CJHConfDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: Add your specialized code here and/or call the base class switch(message)   {    case WM_CREATE: break;   case WM...

wmnmtm的专栏 1386

STM32F103+LAN9252实战:从站代码迁移中的5个硬件坑与解决方案

本文分享了将EtherCAT从站代码从STM32F767迁移至STM32F103平台时,搭配LAN9252遇到的五个典型硬件问题及解决方案。核心挑战包括时钟源不匹配、FSMC时序配置、中断映射错误、片选资源不足以及Flash烧录异常。文章通过实战经验,强调了硬件差异对代码迁移的关键影响,并提供了具体的调试思路与配置方法。

p5l2m9n4o6q的博客 697

2024年全国大学生电子设计竞赛A题_AC-AC变换电路并联运行

AC-AC变换电路并联运行(A 题)【本科组】

qq_74395263的博客 7833

GetSystemMetrics

GetSystemMetrics VB声明 Declare Function GetSystemMetrics Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long 说明 返回与windows环境有关的信息 返回值 Long,取决于具体的常数索引 参数表 参数 类型及说明 nIndex Long,常数,指定欲获取的

zhsm_0011的专栏 2968

6-2 GPU GART 绑定机制与 TLB 失效

本文详细解析了AMD GPU的GART(Graphics Address Remapping Table)绑定机制实现。主要内容包括: 绑定流程:从ttm_tt_bind()到硬件PTE更新的完整调用链,重点分析amdgpu_gart_bind()函数实现。 关键函数: amdgpu_gart_bind():执行安全检查、记录映射关系、更新页表等操作 amdgpu_gart_map():将CPU页映射为多个GPU页并填充PTE amdgpu_gmc_set_pte_pde():处理硬件特定的PTE格式 内存

图形/计算GPU的驱动与虚拟化技术分享园地 2644

从WM_DISPLAYCHANGE消息的角度谈谈分辨率

  众所周知,WM_DISPLAYCHANGE是当Windows显示器分辨率改变之后发送给所有的窗口的消息。但是不知道你有没有想过,显示器的分辨率不是固定的吗?为什么会有这条消息呢?   这里就要说一下逻辑分辨率和物理(设备)分辨率了:   我们说某个品牌的显示器的分辨率为80DPI(Dots Per Inch),是指在显示器的有效显示范围内,显示器的的显像设备可以在每英寸荧光屏上产生80个光...

weixin_34318326的博客 1117

基于网关实现不同网段S7-1200 CPU的通信方法

在A网段的计算机上ping B网段的计算机:在A网段的计算机上使用ping命令,向B网段的计算机发送数据包。在B网段的计算机上ping A网段的计算机:同样地,在B网段的计算机上使用ping命令,向A网段的计算机发送数据包。数据包也会经过路由器进行转发,最终到达A网段的计算机。配置路由器:在路由器上配置两个网段的IP地址和子网掩码,并设置路由表,使得路由器可以将A网段和B网段之间的数据进行转发。确定两个网络之间的路由器:假设需要将A网段和B网段进行通信,需要在A、B两个网段之间设置一台路由器。

电工 2396

2025华为OD机试真题最新题库 (B+C+D+E+2025A+2025B卷) + 在线OJ在线刷题使用(C++、Java、Python C语言 JS合集)(正在更新2025B卷,目前已收录710道)

2024年,华为目前已经启用D卷,目前D卷和C卷的题目一样一次订阅永久阅读,支持在线刷题,持续更新,有问题随时解答,本专栏题目数量已收录到484道。每篇文章的思路分析都非常详细,题目新增图解思路,问题解疑,多样例测试,超过百字的思路参考解析。

KJ.JK 11万+

VC中获取屏幕分辨率及大小相关

vc得到屏幕的当前分辨率方法: 1.Windows API调用 int width = GetSystemMetrics ( SM_CXSCREEN );  int height= GetSystemMetrics ( SM_CYSCREEN );  如果想动态自适应分辨率的变化,处理WM_DISPLAYCHANGE消息.  2.获得分辨率 BOOL EnumDisplaySettin

天上的猩猩的专栏 1万+

Unity3D实现视频和模型融合效果

在Unity中,视频和3D模型融合通常涉及到将视频表面内嵌到3D场景中。视频不影响模型的展示, 这可以通过使用Shader和Texture来实现。大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。下面就让我们进入正文吧!提示:以下是本篇文章正文内容,下面案例可供参考本次介绍的就是视频和模型融合的实现,以后有其他的需要添加的会继续添加不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒。

心疼你的一切博客 5357

[转]VC获取屏幕分辨率及大小相关

vc得到屏幕的当前分辨率方法: 1.Windows API调用 int width = GetSystemMetrics ( SM_CXSCREEN ); int height= GetSystemMetrics ( SM_CYSCREEN ); 如果想动态自适应分辨率的变化,处理WM_DISPLAYCHANGE消息. 2.获得分辨率 BOOL EnumDisplaySettin

天网冰封专栏 623

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VC获取屏幕分辨率及大小相关(转)

转自:http://hi.baidu.com/ccc10509/item/1c0ea01731269501b98a1a8e vc得到屏幕的当前分辨率方法: 1.Windows API调用 int width = GetSystemMetrics ( SM_CXSCREEN );  int height= GetSystemMetrics ( SM_CYSCREEN );  如

tiantiananan的专栏 794

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【转】获取屏幕分辨率及大小相关

vc得到屏幕的当前分辨率方法:1.Windows API调用int width = GetSystemMetrics ( SM_CXSCREEN ); int height= GetSystemMetrics ( SM_CYSCREEN ); 如果想动态自适应分辨率的变化,处理WM_DISPLAYCHANGE消息. 2.获得分辨率BOOL EnumDisplaySettings( LPCTSTR ...

weixin_30418341的博客 171

在vc中获得windows系统信息,硬盘剩余容量,内存大小

在vc中获得windows系统信息,硬盘剩余容量,内存大小   获得硬盘个数的同时获得硬盘里剩余空间 std::string GetStorgeInfo() {  std::string storgeInfo;  int ch, drive, curdrive;  static char path[_MAX_PATH];  curdrive = _getdrive()

水手柯察金的专栏 1534

mfc获取别的计算机是否在线,VC获取并修改计算机屏幕分辨率(MFC)

//检测当前分辨率int Width = GetSystemMetrics(SM_CXSCREEN);int Height = GetSystemMetrics(SM_CYSCREEN);DEVMODE lpDevMode0;lpDevMode0.dmBitsPerPel=;lpDevMode0.dmPelsWidth=Width;lpDevMode0.dmPelsHeight=Height;lp...

weixin_31128065的博客 311
上一篇: vs2010工程属性配置--输出目录的配置
下一篇: MFC控件添加变量时,control和value的区别
xiaojun11-
博客等级 码龄15年 373粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值