Vista工具栏如何忽略或找出边框填充设置?

时间:2009-07-09 03:06:49

标签: windows windows-vista toolbar padding appbar

我有一个在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中运行的应用程序如何处理?我的问题是:

  1. 工具栏是否可以告诉Vista“忽略'边框填充'设置;我的边框填充为0”?
  2. 如果没有,应用程序如何确定边框填充的设置,以使其窗口高出两倍的数量?
  3. 对于这两个问题,如何以允许相同的可执行文件在XP,Vista,Win2003等下运行的方式执行此操作?

3 个答案:

答案 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下的工具栏看起来完全相同,我没有烦人且不必要的(对于这个工具栏)额外的填充。

这并不能解决一般情况,但由于我的回答可能会帮助其他人遇到这种情况,我想我会发布我的解决方案。我希望这有助于其他人。