gpt4 book ai didi

c++ - 正确的做法是 DialogBox 还是 CreateWindow

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:12 28 4
gpt4 key购买 nike

您好亲爱的有经验的用户,

我在 Windows 中编程已经有一段时间了,我一直有这个问题创建用户界面时正确的做法是什么?

是否在资源脚本中对 UI 进行操作并调用 DialogBox。

或者首先创建一个 WNDCLASS 结构声明字段,RegisterClass(&wc) 并使用 CreateWindow 是更乏味的方法,最后它的相同功能只是使用 DialogBox 初始化更容易并且您对类失去了一点控制.

我猜你会问这个应用程序的目的是什么,当然我可以说它是一个皮肤应用程序(然后我会使用 CreateWindow),如果它是一个简单的计算器应用程序,我会选择 Dialogbox。

但是专业人士的目的是什么?

并且请保持在 win32 区域,因为我不会争论是否为这些类型的应用程序使用 QT 或 Java,我对框架的立场是它们增加了很多不必要的开销,java JRE 和 QT额外的 DLL 和 .NET 所有这些都增加了用户安装这些文件的要求,如果没有,他们需要下载所有这些文件。这些文件的面积 > 20 mb。我看不出有什么理由。

感谢您的回答以及您花时间阅读我的随笔

最佳答案

根据我的经验,使用 DialogBox 作为主窗口应用程序一开始似乎很容易,但随后就会变得非常不舒服,特别是如果您使用 DialogBox()(而不是 CreateDialog ():

  1. 您无法控制消息循环。您迟早会想要添加 pre-TranslateMessage 步骤、空闲处理或类似的东西。为此,您需要编写自己的消息循环。

  2. 您不编写消息过程,而是编写对话过程。并且有很多差异,我能想到的最重要的差异:

    一个。返回值不是消息中记录的真实 LRESULT,而是一个 BOOL,它在除极少数纯对话消息之外的所有消息中几乎没有用。

    一些重要的消息没有发送到对话过程,特别是 WM_CREATE。

  3. 您没有定义窗口的 WNDCLASS,因此有些事情您无法更改:默认 HBRUSH、默认 HICON、wndclass 标志等。使用 FindWindow 成为皮塔饼。

  4. 您不能向对话框添加菜单,而且工具栏看起来很奇怪。

诚然,所有这些缺点都有解决方法,但这不是重点。

关于明显的优势:

  1. “您可以使用对话框编辑器轻松布置您的控件”:实际上,应用程序主窗口不应该有那么多用户控件。想一想您最喜欢的 Windows 应用程序,它的主窗口中有多少个控件?只需将控件留给选项对话框或其他内容即可。

  2. “焦点由底层对话框自动处理”:如果主窗口中没有控件,这一点没有实际意义。此外,如果确实需要,处理焦点是微不足道的。

我并不是说制作基于对话框的应用程序毫无意义;只是如果有更好的方法,您应该三思而后行,尤其是对于非平凡的方法。

关于c++ - 正确的做法是 DialogBox 还是 CreateWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8840497/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com