您好亲爱的经验丰富的用户,

我已经在Windows中编程了一段时间,并且我一直遇到这个问题What is the right thing to do when creating a user interface?
是否在资源脚本中对UI进行处理并调用DialogBox。

还是首先创建WNDCLASS结构,声明字段RegisterClass(&wc)并使用CreateWindow的更乏味的方法,最后使用相同的功能,只是使用DialogBox进行初始化更容易,并且您可以松开对该类的位控制。

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

但是专业人士会做什么呢?

并且请保持在win32区域,因为我不会就是否将QT或Java用于此类应用程序进行辩论,我对框架的立场是它们会增加很多不必要的开销,而Java JRE和QT则是额外的DLL和.NET,所有这些都向用户增加了安装这些文件的要求,如果没有,则要求下载所有这些文件。这些文件的大小> 20 mb。我看不出有什么道理。

感谢您的回答以及您阅读我的文章所花费的时间

最佳答案

以我的经验,使用DialogBox作为主窗口应用程序一开始似乎很容易,但随后会感到非常不舒服,特别是如果您使用DialogBox()(而不是CreateDialog())进行对话框的话

  • 您无法控制消息循环。迟早您将要添加一个TranslateMessage之前的步骤,或一个空闲处理,或类似的操作。为此,您需要编写自己的消息循环。
  • 您不是编写消息过程,而是编写对话框过程。而且有很多差异,我能想到的最重要的是:

    一种。返回值不是消息记录的真实LRESULT,而是在几乎所有仅对话框消息中几乎没有用的BOOL

    b。一些重要的消息不会发送到对话过程,特别是WM_CREATE。
  • 您没有定义窗口的WNDCLASS,因此有些事情您无法更改:默认HBRUSH,默认HICON,wndclass标志等。使用FindWindow成为PITA。
  • 您不能将菜单添加到对话框,工具栏看起来很奇怪。

  • 当然,有针对所有这些缺点的解决方法,但这不是重点。

    以及明显的优势:
  • “您可以使用对话框编辑器轻松地布置控件”:实际上,应用程序主窗口应该没有那么多用户控件。想想您最喜欢的Windows应用程序,它在主窗口中有多少个控件?只需将控件留在选项对话框中即可。
  • “焦点由基础对话框自动处理”:如果主窗口中没有控件,那么这一点尚无定论。而且,如果真的需要,处理焦点很简单。

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

    10-04 14:02