【问题标题】:How does a Windows non-native user interface work?Windows 非本机用户界面如何工作?
【发布时间】:2011-04-20 20:24:39
【问题描述】:

通过经验我发现原生的 windows 窗体/组件不喜欢被改变。我知道使用 Delphi 或 Visual Studio 会给你提供本地 Windows 组件来填充表单或窗口,然后你在这些组件可能执行的事件上附加代码(例如 onClick)。

但是,所有这些程序(如 Word 或谷歌的 Chrome 浏览器)如何改变标准 Windows 的窗口?我以为它受到了某种保护?

Chrome 似乎实际上在窗口的框架上有标签?

我知道您还可以获得像 Swing 和 QT 这样的工具包,它们有自己的控件/组件来填充表单。这些是如何工作的? (操作系统/计算机如何知道非本机按钮的行为?例如;Chrome 的后退和前进按钮,它们不是本机组件?)。

我可以理解 OpenGL/DirectX 窗口的工作原理,因为您正在告诉计算机使用多边形/四边形绘制什么。

我希望这个问题很清楚!

【问题讨论】:

    标签: windows user-interface


    【解决方案1】:

    某些 Windows 控件具有“所有者绘制”模式。如果您使用它,您可以绘制控件(或至少是控件的重要部分),而 Windows 会以标准方式负责响应用户输入。

    【讨论】:

    【解决方案2】:

    Windows 不保护 GUI 元素。可以对窗口和控件进行子类化,以自定义方式处理各种绘图操作。例如,windows 可以覆盖并重新实现 WM_NCPAINT 消息的处理以绘制自定义标题栏和框架:

    http://msdn.microsoft.com/en-us/library/dd145212(VS.85).aspx

    【讨论】:

      【解决方案3】:

      没有什么神奇的:非本地控件只是简单地绘制在一个空白窗口上。或者,不是被绘制,它们可以表示为基于状态的几个位图之一(即:一个按钮可以表示为正常状态的 .png,按下状态的另一个 .png 等)

      【讨论】:

        【解决方案4】:

        Qt 不久前移至本机控件。至于swing是怎么做的,它从操作系统那里得到一个基本的窗口。然后就像 Opengl\Directx 一样,它在该窗口中完成所有绘图。至于在哪里放置东西是布局管理器所做的。每个管理器都有一个布局样式水平、垂直、网格、它必须绘制的组件以及它预期要填充的窗口部分。从那里它做了一些非常简单的数学运算来分配它的空间给它的控件。

        【讨论】:

          【解决方案5】:

          Swing ant QT 使用基本原语在低级别绘制自己的小部件,但它们也有可以模仿本机控件的主题引擎。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-01-07
            • 1970-01-01
            • 2012-01-24
            • 1970-01-01
            • 2011-09-08
            • 1970-01-01
            • 2010-09-05
            相关资源
            最近更新 更多