代码之家  ›  专栏  ›  技术社区  ›  Eddie

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

  •  1
  • Eddie  · 技术社区  · 16 年前

    我在旧版本的Windows下开发了一个工具栏,由于新的窗口边框填充,该工具栏在Vista下基本上被切断。默认边框填充为4时,工具栏上的所有内容都向下向右移动四个像素,然后从底部和右侧剪切四个像素。我不太关心水平维度,但垂直维度意味着应用程序会丢失8个像素的可见内容。

    我所说的“工具栏”是指创建的类似于以下内容的窗口:

    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 回复  |  直到 16 年前
        1
  •  1
  •   Jewel S Jewel S    16 年前

    一个选项是使用不同的窗口样式,从WS_THICKFRAME开始。

        2
  •  1
  •   Eddie    16 年前

    另一件需要单独注意的事情是,如果您已经尝试使用 GetSystemMetrics 或者类似的,您编译的子系统在边界如何影响您的客户区域方面产生了不同的影响。

    A link at objectmix 试图解释这一点。关于子系统,我相信他们的意思是 /subsystem 当您链接 .exe ,或Visual Studio中相应的设置。

        3
  •  0
  •   Eddie    16 年前

    好吧,我想出来了。在我的案例中,问题的原因是使用了 WS_THICKFRAME 打电话的时候 CreateWindowEx() 粗框 不出所料,在所有尺寸上都添加了3个像素的填充。

    因此,我删除了该选项,并更改了代码,将所有内容向下和向右移动三个像素。现在,在WinXP和Vista下,工具栏看起来一模一样,我没有恼人和不必要的额外填充(对于这个工具栏)。