【问题标题】:Windows in Win32 API GUI ProgrammingWin32 API GUI 编程中的 Windows
【发布时间】:2010-12-01 05:47:36
【问题描述】:

我正在开始 GUI 编程,但我有一个关于 Windows 的问题。我已经阅读了一些教程,他们通过创建一个新的 WNDCLASS、调用 RegisterClass 然后使用新类的名称执行 CreateWindow 来创建一个窗口。我还看到,要创建一个 Button 或其他东西,您在 CreateWindow 时使用类名 Button。所以这使我得出这个结论:要创建一个窗口(带有边框和最小化/最大化按钮等的窗口),您需要创建一个新的 WNDCLASS。否则,您不需要创建 WNDCLASS,而是使用预定义的类名之一,例如 BUTTON。这是正确的吗?

【问题讨论】:

    标签: c++ user-interface class window winapi


    【解决方案1】:

    正确。您需要为您的窗口定义自己的WNDCLASS 的主要原因是分配您自己的窗口过程来处理发送到您的窗口的消息。标准控件(如按钮和编辑控件)已经具有由其标准窗口过程定义的明确定义的行为,因此您可以只使用预定义的类名。

    【讨论】:

      【解决方案2】:

      如果您使用老式 Win API 编程,我不能推荐Programming Windows by Charles Petzold。最新版本已绝版,IMO 太疯狂了。这关于该主题的经典书籍。因为它已经绝版,所以使用版本的成本更高。如果您想更便宜,请购买previous edition,您只需 0.01 美元即可使用。基本都是一样的。

      【讨论】:

        【解决方案3】:

        你完全正确。窗口类定义了窗口的外观和行为;您可以通过更改样式和响应窗口消息在一定程度上覆盖这些,但如果其中一个预定义的窗口类不起作用,最好定义您自己的窗口类。

        CreateWindowEx 文档中有一个预定义的窗口类列表。

        【讨论】:

        • 只是指出指示的列表非常不完整,但是一个很好的起点。
        【解决方案4】:

        .

        是的,你是对的。有几个 predefined 控件\窗口具有 predefined(外观和)行为。这些被称为系统类

        例如,

        “Button”就是这个类,你可以用它来创建一个按钮。

        请看MSDN中的表格

        Button :: 按钮的类。

        ComboBox :: 组合框的类。

        Edit :: 编辑控件的类。

        ListBox :: 列表框的类。

        MDIClient :: MDI 客户端窗口的类。

        ScrollBar :: 滚动条的类。

        Static :: 静态控件的类。

        现在,您可以在 MSDN 上自行阅读。点击这个:About Window Classes

        希望对你有帮助。

        .

        【讨论】:

          【解决方案5】:

          请记住,创建一个新的“对话框”,例如“关于”窗口,不需要新的 RegisterClass()。 我不同意 John Dibling 关于在 Windows API 之前或代替 Windows API 学习 MFC。

          MFC 是建立在 Windows API 之上的,换句话说,MFC 是 Windows API,但封装在 C++ 类中,所以无论如何,如果你想学习 MFC,你必须了解 Windows API。

          祝你好运。

          【讨论】:

            【解决方案6】:

            首先,您将从 WINAPI 开始学习 Windows GUI 编程。这不是我推荐的。相反,我会先学习一个 Windows GUI 库,例如 MFC。 Windows GUI 编程已经够难了。不要让它变得比你刚开始学习时的难度。

            窗口类对于屏幕上的窗口就像 C++ 类对于 C++ 对象一样。它是如何在屏幕上构建 Window 的蓝图,它包含有关处理消息的函数在哪里、使用什么样的设备上下文等信息。

            不同种类的窗口需要不同的窗口类。在所谓的“公共控件库”中预定义了许多窗口类。常用控件包括您在典型窗口中找到的大多数控件。按钮、滑块、文本框、网格等。你可以创建这些通用控件,而无需自己注册类,因为通用控件库在初始化的时候已经为你做好了。

            屏幕上的一切都是某种形式的窗口。这个网络浏览器、“返回”按钮、我正在输入的编辑框——每个都是一个单独的窗口。并且每个都必须与适当的窗口类相关联。您使用的大多数控件将与一个通用控件窗口类相关联。如果您正在创建的窗口(例如应用程序的主窗口)不是公共控件或具有预定义窗口类的某种其他类型的窗口,则您必须自己注册该类。

            【讨论】:

            • 其实,我是那种认为你应该先学习长除法,然后再学习如何在计算器上计算的类型。而且我对 C++ 已经很熟悉了,所以一点也不难。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-17
            • 2012-09-11
            • 2010-09-17
            • 1970-01-01
            相关资源
            最近更新 更多