通常使用Dialog作为主Windows吗?那么没有通过RegisterClassEx注册任何用户类?我可以通过CreateWindow()完成我所做的一切吗?为什么我应该通过CreateWindow()创建按钮,编辑框等控件,而不是只创建一个Dialog并将其用作主窗口?
我也想知道对话框和窗口之间的主要区别,以及为什么要使用第一个而不是第二个。
由于
答案 0 :(得分:4)
通常使用Dialog作为主Windows吗?
是的,这很常见。
所以没有通过RegisterClassEx注册任何用户类?
对话框通常是预定义的窗口类,因此通常不需要注册。
我也想知道对话框和窗口之间的主要区别,以及为什么要使用第一个而不是第二个。
嗯,两个很大的区别是你不能调整对话框的大小,它没有最小化或最大化按钮(默认情况下,但有一些解决方法)。请记住名称对话框框。换句话说,它们用于与用户建立对话框(接收输入并向用户显示消息)。从某种意义上说,它们就像任何其他窗口一样,在CreateWindowxx等下面被调用等等。但是,它们是有些预定义的窗口,可以快速制作,并且你可以用它们做什么有限制。
此外,对话框使用对话框程序而不是窗口程序,它会为您执行一些默认处理,例如初始化某些控件等。
答案 1 :(得分:2)
是的,应用程序可以基于对话框。如果您使用VisualStudio和MFC,甚至还有一个向导。
在VS2010中,创建新项目> MFC应用程序。在“应用程序类型”中,选择基于对话框的。点击向导的其余部分,即可参加比赛。
基于对话框的应用程序在架构上比文档/视图等其他设计简单得多。因此,简单的事情很容易快速“敲出”,但当你尝试做更复杂的事情时,设计的局限性就会变得明显。您最终可能会在基于对话框的应用程序中复制大部分Doc / View体系结构,以构建基于对话框的生产质量应用程序。在那种情况下,你真的省了什么吗?
答案 2 :(得分:2)
对话框是一种窗口,就像按钮之类的各种控件都只是窗口一样。您可以将对话视为一种具有许多额外功能的窗口,以支持对话框所使用的各种内容。
有两种类型的对话框,模式显示并希望您使用它们然后将它们关闭,非模态显示但不捕获并保持输入焦点直到它们被解除。您可以在应用程序中看到这两种类型,其中模式对话框用于显示错误或要求用户进行某些设置,非模态用作一种保持显示的工具箱,当您需要时,单击在它上面做某事,有时你在应用程序中使用其他窗口。
通常情况下,对话框没有菜单栏,但会通过标签或其他类型的演示文稿显示所有控件,或者可以轻松访问它们。 Visual Studio和其他IDE具有对话框设计器,允许放置各种控件以及向导,以允许控件绑定到类和类成员。
这会在对话框和窗口之间产生重大差异。窗口是一种空白页面,对页面执行操作需要更多工作。一个对话框有一些工具可以使设计变得简单,但是你也很大程度上受到工具箱的限制。
如果您的应用程序主要关注基本上允许用户指定某些设置然后执行某项任务,则对话框可以正常工作。如果您需要更复杂的用户交互,则需要以应用程序窗口为基础来管理和操作所有其他对话框和控件。