我有一个在Windows旧版本下开发的工具栏,由于窗口有新的边框填充,因此在Vista下很大程度上被截断了。使用默认的边框填充为4时,工具栏上的所有内容都会向下和向右推四个像素,然后从底部和右侧裁剪四个像素。我并不真正关心水平尺寸,但是垂直这意味着应用程序会丢失八个可见内容像素。
“工具栏”是指创建类似于以下内容的窗口:
APPBARDATA AppBarData;
AppBarData.hWnd = CreateWindowEx(WS_EX_TOOLWINDOW | WS_EX_TOPMOST, MAIN_WNDCLASS,
"", WS_POPUP | WS_THICKFRAME | WS_CLIPCHILDREN,
0, 0, 400, TOOLBAR_HEIGHT, NULL, NULL,
AppInstance, NULL);
// more initialization ....
SHAppBarMessage(ABM_NEW, &AppBarData);
由于边框填充是Vista中似乎不熟悉的配置项,因此在XP和Vista中运行的应用程序如何处理?我的问题是:
答案 0 :(得分:1)
一个选项是使用不同的窗口样式,从WS_THICKFRAME开始。
找出使用GetClientRect和GetWindowRect的填充尝试,并从另一个中减去一个。
答案 1 :(得分:1)
另外需要注意的另一点是,如果您已经尝试使用GetSystemMetrics
或类似方法考虑窗口边框,则编译的子系统会对边框影响客户区域产生影响。< / p>
A link at objectmix试图解释这一点。通过子系统,我相信当您链接/subsystem
或Visual Studio中的相应设置时,它们的意思是.exe
标志。
〜珠宝
答案 2 :(得分:0)
好吧,我想出来了,好吧。在我的情况下,问题的原因是在调用WS_THICKFRAME
时使用CreateWindowEx()
,这是我不需要的。之前,此设置用于在工具栏中垂直居中。我想在WinXP(经典视图)和之前,WS_THICKFRAME
可预测地在所有尺寸上添加了3个像素的填充。
因此,我删除了该选项并更改了代码,将所有内容向下和向右移动三个像素。现在,WinXP和Vista下的工具栏看起来完全相同,我没有烦人且不必要的(对于这个工具栏)额外的填充。
这并不能解决一般情况,但由于我的回答可能会帮助其他人遇到这种情况,我想我会发布我的解决方案。我希望这有助于其他人。