MFC调整屏幕分辨率

MFC调整屏幕分辨率

2023年7月17日发(作者:)

MFC调整屏幕分辨率

vc得到屏幕的当前分辨率方法:

s 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

intGetDeviceCaps(

HDC hdc, // handle to the device context

intnIndex // 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); ("%d*%d",,);

(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);

intheigh= 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如何排列最小化窗口的一个标志。参考中的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 及更早版本的支持

发布者:admin,转转请注明出处:http://www.yc00.com/news/1689608779a270290.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信