13

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

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

谢谢

4

3 回答 3

6

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

是的,这很常见。

因此,无需通过 RegisterClassEx 注册任何用户类?

对话框通常是预定义的窗口类,因此通常不需要注册。

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

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

此外,对话框使用对话框过程而不是窗口过程,它会为您执行一些默认处理,例如初始化一些控件等。

于 2012-06-19T21:54:33.840 回答
2

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

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

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

于 2012-06-19T21:34:57.893 回答
2

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

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

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

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

如果您有一个应用程序,它基本上专注于允许用户指定某些设置然后执行某些任务,那么对话框效果相当好。如果您有一些需要更复杂的用户交互的东西,那么作为基础的应用程序窗口将更加必要,您的所有其他对话框和控件都将从该窗口中进行管理和操作。

于 2012-06-19T22:08:31.737 回答