【问题标题】:How create custom user interface for Windows?如何为 Windows 创建自定义用户界面?
【发布时间】:2011-02-21 02:11:54
【问题描述】:

现在有许多适用于 Windows 的应用程序不使用本机 Windows 控件,没有标准的窗口框架,并且通常看起来不同。创建此类接口有哪些推荐的技术?

【问题讨论】:

    标签: windows winforms user-interface desktop-application


    【解决方案1】:

    有充分的理由不这样做。就像那样,您很可能不会比 Windows 做得更好。 (也许它会看起来更好(在您看来),但它会表现得更好吗?)。或者这不是大多数用户所期望的。或者它在 Windows 2011 上看起来像 s****。

    也就是说,这并不难。您只需处理 WM_NC* 事件,例如 WM_NCPAINTWM_NCHITTEST。 NC 代表非客户端(窗口区域)。当然,Vista/Win7 有一个技巧(你必须向 DWM 公布)。

    【讨论】:

    • +1:编写不使用操作系统外观的应用程序的正确方法是根本不这样做。
    • 但我认为用户喜欢应用程序的独特外观和感觉,许多公司都这样做。
    • @grigy:你可以为 Windows XP 提出这个论点,也许,但绝对不能用于 Vista/7/next。 Vista 在整个操作系统中引入了一致的外观和感觉,坦率地说,不符合这些标准的应用程序看起来像垃圾。这就像在 Mac OS X 上制作一个 Windows 风格的应用程序——你可能认为它看起来更好,但它与操作系统的其余部分是如此不一致。而且我什至还没有触及可用性方面。
    • De gustibus non est disputandum - 我通常不喜欢它们,尤其是如果它们不使用 Aero。即使我喜欢这些外观,当它失败时也会很烦人。看看蒸汽。如果它挂起,你甚至不能将它拖到一边,因为它正在(不)处理它的 WM_NCHITTEST 消息。
    • 我制作了一个基于 Java 的 UI,我只是结合了人们对旧版 Windows 所称赞的大部分优秀部分、一些 Windows 8 样式(非常少)和一些我自己的设计。这不是试图超越巨头。这是关于做一些不同的事情并使其成为自己的事情。这与那些根植他们的手机和平板电脑的人没有什么不同,只是为了以他们的方式对其进行定制以赋予其个人感觉。而且你不能通过做同样的事情而不去质疑如何让事情变得不同或更好,从而在任何事情上取得进步。还是您喜欢在原木上滚动以从 A 点移动到 B 点?
    【解决方案2】:

    从实现方面来看,假设您为 .NET 编写代码,您可以使用 WPF(Windows Presentation Foundation):) 它有很多可换肤的控件,可能看起来像原生控件,也可能不是。

    【讨论】:

      【解决方案3】:

      从设计方面来看,如果您的界面不遵循文档化标准(如 Windows UI 指南),则它必须是直观的。我认为新一代的 Windows 应用程序将以类似于早期 Web 的方式经历一个成长阶段。一段时间后,一些标准或共同主题将会演变。

      【讨论】:

        【解决方案4】:

        您能给我们一些示例应用程序吗?一些不使用本机 Windows 控件的应用程序使用跨平台 GUI 库,例如 Qt for C++ 或 Tkinker。它们在不同平台上保持相同的外观。

        我真的不建议故意让您的用户界面与众不同。你不会有太多收获。你的控件几乎总是比原生控件更容易出错,而且你要求用户学习新的东西。现在,如果您是控件,则添加足够大的值以值得用户花费时间就可以了。但是让他们习惯不同外观的按钮并不值得。

        【讨论】:

        • 我工作笔记本电脑上的 VPN 和 WiFi 软件(对此我不承担任何责任)都是非标准的 GUI。我不知道为什么。防病毒使用本机边框,但非本机控件,可能是因为没有本机内容列表/选项卡混合。我怀疑它们中的任何一个都是跨平台的。
        • 例如 Google Talk。主窗口看起来不像标准的 Windows 应用程序。
        【解决方案5】:

        我不确定这是否能回答您的问题。

        您可以使用第三方蒙皮控件,例如来自 Infragistics 或 SkinSoft 的控件。 但就像 Bubba 说的那样,我建议使用 WPF。

        【讨论】:

          【解决方案6】:

          模型-视图-控制器!它在这里与在网络应用程序或其他任何地方一样有价值。请务必将生成自定义 UI 的程序部分与刷新 BIOS 的程序部分分开。

          【讨论】:

            【解决方案7】:

            我知道这个问题已有 10 年历史,但没有一个答案提到在 Visual Studio 中使用选项,不知道当时是否存在。

            Visual Studio 中有一个删除窗口边框的选项(称为borderStyle)。这是最简单的方法,使用 C#。删除边框后,您所要做的就是创建一个新界面。如果你想用 C++ 来做,我认为你需要使用 DWM。我会举一个我在这里找到的例子。

            https://github.com/melak47/BorderlessWindow

            另一个例子(可能没有 DWM?没有测试):

            https://social.msdn.microsoft.com/Forums/vstudio/en-US/b98c4c06-9581-44d3-8e5a-4adb2316e653/win32-about-styles-how-can-i-do-a-borderless-window?forum=vclanguage

            在这个帖子中有很多人不鼓励这样做,但没有理由不这样做,如果您知道自己在做什么,您的应用程序会看起来很棒。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-09-08
              • 2020-03-06
              • 1970-01-01
              • 2011-08-27
              • 2022-09-24
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多