【问题标题】:Dialog as main Window?对话框作为主窗口?
【发布时间】:2024-08-05 01:35:02
【问题描述】:

通常使用对话框作为主窗口吗?因此,无需通过 RegisterClassEx 注册任何用户类?我可以通过 CreateWindow() 完成所有操作吗?为什么我应该通过 CreateWindow() 创建按钮、编辑框等控件,而不是仅仅创建一个对话框并将其用作主窗口?

我还想知道对话框和窗口之间的主要区别以及为什么使用第一个而不是第二个。

谢谢

【问题讨论】:

  • 你看起来有点困惑……这 5 个问题可能需要很长的答案。开始阅读msdn.microsoft.com/en-us/library/windows/desktop/… 了解有关windows 的概述和此msdn.microsoft.com/en-us/library/windows/desktop/… 的注释以了解对话框是什么。
  • 简短答案(我相信有人会提供更广泛的答案):1)是的,很多; 2) 不需要注册您将使用的窗口; 3) 不(如果你的意思是你不需要任何其他代码),是的,如果你的意思是你真的不需要创建对话资源; 4) 通常您不必这样做,如果它发生通常,那是因为您在编译时不知道窗口的真实内容; 5)对话框(或多或少)是一个窗口,只是模态的。
  • 我的 2 美分:如果您使用 Visual Basic、Delphi 或 .NET,则无需担心此类低级内容,而且您的工作效率会大大提高。窗口被抽象为一个带有属性的矩形可视容器。
  • @SteveWellens 你是对的,但是如果有人从基础开始理解这些东西,你不感到高兴吗?即使他只使用 Windows API 编写一个应用程序。
  • 谢谢,我没有使用 VB、Delphi 或 .NET,只使用 C/C++

标签: windows winapi dialog


【解决方案1】:

通常使用对话框作为主窗口吗?

是的,这很常见。

所以不用通过 RegisterClassEx 注册任何用户类?

对话框通常是一个预定义的窗口类,所以通常不需要注册。

我还想知道对话框和窗口之间的主要区别以及为什么使用第一个而不是第二个。

嗯,两个很大的区别是您无法调整对话框的大小,并且它没有最小化或最大化按钮(默认情况下,但有解决方法)。请记住名称,对话框框。换句话说,它们用于与用户进行对话(接收输入并向用户显示消息)。从某种意义上说,它们就像任何其他窗口一样,在 CreateWindowxx 下调用等等。但是,它们是某种预定义的窗口,可以快速制作,并且您可以使用它们进行操作。

另外,对话框使用对话框过程而不是窗口过程,它会为你做一些默认的处理,比如初始化一些控件等。

【讨论】:

  • 向导自动生成最小化对话框的代码,添加调整大小和最大化也不难——见*.com/a/5739620/5987
  • @MarkRansom:确实如此。我在考虑更多关于“默认设置”的问题,但由于对话框“只是窗口”,因此几乎所有内容都可能有解决方法。
【解决方案2】:

是的,应用程序可以是基于对话框的。如果您使用 VisualStudio 和 MFC,甚至还有一个向导。

在 VS2010 中,创建新项目 > MFC 应用程序。在“应用程序类型”中选择基于对话框。单击向导的其余部分,您就可以参加比赛了。

基于对话框的应用程序在架构上比其他设计(例如文档/视图)要简单得多。因此,简单的事情更容易快速“完成”,但当您尝试做更复杂的事情时,设计的局限性就会变得明显。您最终可能会在基于对话框的应用程序中复制大部分 Doc/View 架构,以构建生产质量的基于对话框的应用程序。那样的话,你真的救了自己什么吗?

【讨论】:

    【解决方案3】:

    对话框是一种窗口,就像按钮等各种控件实际上只是窗口一样。您可以将对话框视为一种具有许多额外功能的窗口,以支持对话框用于执行的各种操作。

    有两种类型的对话框,模态对话框显示并希望您使用它们然后关闭它们,非模态对话框显示但不会捕获并保持输入焦点,直到它们被关闭。您可以在应用程序中看到这两种类型,其中模态对话框用于显示错误或要求用户进行一些设置,非模态对话框充当一种保持显示的工具框,当您需要它时,您单击在它上面做某事,而其他时候你正在使用应用程序中的其他窗口。

    通常,对话框不会有菜单栏,而是所有控件都可见或可通过选项卡或某些其他类型的演示文稿轻松访问。 Visual Studio 和其他 IDE 具有对话框设计器,允许放置各种控件以及允许将控件绑定到类和类成员的向导。

    这带来了对话框和窗口之间的主要区别。窗口是一种空页面,对页面进行操作需要更多的工作。对话框具有使设计变得容易的工具,但是您在很大程度上也受到工具箱的限制。

    如果您的应用程序主要关注允许用户指定某些设置然后执行某些任务,则对话框效果相当好。如果您有一些需要更复杂的用户交互的东西,那么将更需要一个应用程序窗口作为您所有其他对话框和控件将被管理和操作的基础。

    【讨论】: