@EDIT:我发现它似乎是Windows 8 RC的问题,因为我尝试使用Windows 7和VS 2012,经典和Aero视图,它工作正常.感谢@Werner Henze和@Ven Boigt的反馈
编辑2:原来这是Windows中的一个错误,因为它是测试版,它已在新版本中修复,所以我不必再担心这个了.无论如何,感谢您的反馈.
我曾经做过以下工作来创建一个800*600客户区的窗口:
dwStyle = WS_OVERLAPPED | WS_THICKFRAME | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | WS_MINIMIZEBOX;
hWindowHandle = CreateWindow( L"CGFramework", wszWndCaption,
pWindowData->dwStyle, pWindowData->nPositionX, pWindowData->nPositionY,
800 + GetSystemMetrics( SM_CXSIZEFRAME )*2,
600 + GetSystemMetrics( SM_CYSIZEFRAME ) *2
+ GetSystemMetrics( SM_CYCAPTION ),
0, 0, hInstance, 0
);
Run Code Online (Sandbox Code Playgroud)
然后当用GetClientRect查询客户端rect时,我曾经得到800*600,但现在我将我的Visual Studio 2008项目升级到VS2012,现在GetClientRect()函数返回792*592.
最重要的是,正在创建的窗口的实际大小是804*629,我认为没有理由因为可调整大小的帧(来自WS_THICKFRAME)明显大于每侧2个像素.
我认为这是Windows 8的Aero行为的一个问题,但后来我意识到这只发生在我的VS2012版本而不是我的VS2008版本中.如果我在Aero或经典样式上运行它没有任何区别,该行为将仅适用于VS2012构建.为什么?我可以在我的VS2012项目配置上更改一些东西以修复这种可怕的行为吗?
我尝试更改项目配置的"DPI Awareness"设置,但这没有任何区别.我还删除了在同一个配置页面中使用manifest,仍然看不到生成窗口的任何变化.
这是我的测试代码:
#include <Windows.h>
#include <cstdio>
LRESULT CALLBACK MainWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch( uMsg )
{ …Run Code Online (Sandbox Code Playgroud)