调用GetSystemMetrics(....) 分辨率:800x600当参数为SM_CXCREEN时为800,
当参数为SM_CXMAXIMIZED时是808,
在640x480下面为648,在1024x768下面为1032,为什么每次都多8个像素单位??它是指什么尺寸?参数为SM_CXFULLCREEN又是指什么??
当参数为SM_CXMAXIMIZED时是808,
在640x480下面为648,在1024x768下面为1032,为什么每次都多8个像素单位??它是指什么尺寸?参数为SM_CXFULLCREEN又是指什么??
Width and height of the client area for a full-screen window on the primary display monitor. To get the coordinates of the portion of the screen not obscured by the system taskbar or by application desktop toolbars, call the SystemParametersInfo function with the SPI_GETWORKAREA value.
转自msdn
将工程的窗体初始化时写下代码:
SetWindowPos(NULL, 0,-40, SCREENWIDTH, SCREENHEIGHT+40, SWP_NOZORDER);
SCREENWIDTH ------ GetSystemMetrics(SM_CXCREEN)
SCREENHEIGHT ------ GetSystemMetrics(SM_CYCREEN)看看和你想象中画出的情况一不一样:)
SM_CXMAXIMIZED指的是一个最大化的顶层窗口的宽度;
(CY的那个类似,就是高度吧了);
为什么有8个象素的差别呢?注意这个项目SM_CXFRAME,它是指窗口那个非常窄的立体边缘的大小,结果为4,好了问题解决了,FULLSCREEN是1024没有问题,最大化的窗口立体边缘是不显示的因此它的左上角因改在-SM_CXFRAME和-SM_CYFRAME位置,右下的位置也是一样,就是多了双倍的SM_CXFRAME大小。
如果你改变桌面的外观,比如用一个“黑白高对比度(大)”方案,那么窗口的边缘就会变化,例如SM_CXFRAME的值变成了9,那么SM_FULLSCREEN的值还是1024,SM_CXMAXIMIZED的值就变成了1042了。