何时应该使用一个对话框
大多数应用程序使用对话框来为那些需要用户输入的菜单项提示额外的信息。如果一个程序需要输入,那么使用对话框是唯一推荐的方式。例如,一个典型的“打开”菜单项需要一个文件的名字来打开文件,因此程序应该使用一个对话框来提示用户输入文件名。在这种情况下,当用户点击菜单项时,应用程序会创建一个对话框,当用户提供信息之后,应用程序会立即撤销对话框。
当用户在另一些窗口工作时,许多应用程序也会使用对话框显示信息或选择。例如,字处理程序通常使用一个文字搜索选择对话框。当程序搜索文字时,这个对话框会显示在屏幕上。用户之后可以返回到这个对话框,并再次搜索同样的文字。或者,用户可以改变对话框中的条目,搜索一个新的单词。当用户点击菜单选项,一个通过上面的方式使用对话框的应用程序会创建一个对话框。并且会一直显示这个对话框,直到用户明确的关闭这个对话框。
为了支持不同的方式,Win32API提供两种不同类型的对话框:模态和非模态。一个模态对话框在允许程序继续之前需要用户提供信息或者取消对话框。应用程序在继续进行之前需要模态对话框与那些需要额外信息的菜单项相关联。一个非模态对话框允许用户提供信息,并且在不关闭对话框的情况下返回之前的任务。模态对话框比非模态对话框更容易管理,因为可以通过调用一个简单的函数来创建,执行任务,以及被销毁。
无论是创建模态或非模态对话框,应用程序必须提供一个对话框模板来描述对话框的风格和内容。应用程序也必须提供一个对话框过程来处理任务。对话框模板是一个对话框的二进制描述文件和对话框包含的控件。开发者可以创建这个模板作为资源。通过应用程序执行文件载入,或者当程序运行时在内存中创建。对话框过程是应用程序定义的回调函数,当对话框有输入时,或需要处理任务时,系统会调用这个回调函数。尽管对话框过程类似于窗口过程,但是对话框没有同样的职责。
应用程序通过使用DialogBox或CreateDialog函数来创建一个对话框。DialogBox函数创建一个模态对话框,CreateDialog函数创建一个非模态对话框。这两个函数从程序的可执行文件中载入一个对话框模板,并创建一个弹出式的窗口来匹配模板的说明。也有其它的函数通过在内存中使用模板来创建对话框,在对话框被创建时,它们把额外的信息传递给对话框过程。
对话框通常属于一个预先定义的独有的窗口类,系统会为了模态和非模态对话框使用这个窗口类和它的相对应的窗口过程。当函数被调用时,它为对话框创建窗口,当然也包括对话框上面控件的窗口,之后发送被选择的消息到对话框过程。当对话框在可见状态下,那个预先定义的窗口过程管理所有的消息,处理一些消息,传递其它的消息到对话框过程,这样对话框过程就可以执行任务了。应用程序对预先定义的窗口类或窗口过程没有直接的控制,但是它们可以使用对话框模板和对话框过程来修改一个对话框的风格和行为。
大多数应用程序使用对话框来为那些需要用户输入的菜单项提示额外的信息。如果一个程序需要输入,那么使用对话框是唯一推荐的方式。例如,一个典型的“打开”菜单项需要一个文件的名字来打开文件,因此程序应该使用一个对话框来提示用户输入文件名。在这种情况下,当用户点击菜单项时,应用程序会创建一个对话框,当用户提供信息之后,应用程序会立即撤销对话框。
当用户在另一些窗口工作时,许多应用程序也会使用对话框显示信息或选择。例如,字处理程序通常使用一个文字搜索选择对话框。当程序搜索文字时,这个对话框会显示在屏幕上。用户之后可以返回到这个对话框,并再次搜索同样的文字。或者,用户可以改变对话框中的条目,搜索一个新的单词。当用户点击菜单选项,一个通过上面的方式使用对话框的应用程序会创建一个对话框。并且会一直显示这个对话框,直到用户明确的关闭这个对话框。
为了支持不同的方式,Win32API提供两种不同类型的对话框:模态和非模态。一个模态对话框在允许程序继续之前需要用户提供信息或者取消对话框。应用程序在继续进行之前需要模态对话框与那些需要额外信息的菜单项相关联。一个非模态对话框允许用户提供信息,并且在不关闭对话框的情况下返回之前的任务。模态对话框比非模态对话框更容易管理,因为可以通过调用一个简单的函数来创建,执行任务,以及被销毁。
无论是创建模态或非模态对话框,应用程序必须提供一个对话框模板来描述对话框的风格和内容。应用程序也必须提供一个对话框过程来处理任务。对话框模板是一个对话框的二进制描述文件和对话框包含的控件。开发者可以创建这个模板作为资源。通过应用程序执行文件载入,或者当程序运行时在内存中创建。对话框过程是应用程序定义的回调函数,当对话框有输入时,或需要处理任务时,系统会调用这个回调函数。尽管对话框过程类似于窗口过程,但是对话框没有同样的职责。
应用程序通过使用DialogBox或CreateDialog函数来创建一个对话框。DialogBox函数创建一个模态对话框,CreateDialog函数创建一个非模态对话框。这两个函数从程序的可执行文件中载入一个对话框模板,并创建一个弹出式的窗口来匹配模板的说明。也有其它的函数通过在内存中使用模板来创建对话框,在对话框被创建时,它们把额外的信息传递给对话框过程。
对话框通常属于一个预先定义的独有的窗口类,系统会为了模态和非模态对话框使用这个窗口类和它的相对应的窗口过程。当函数被调用时,它为对话框创建窗口,当然也包括对话框上面控件的窗口,之后发送被选择的消息到对话框过程。当对话框在可见状态下,那个预先定义的窗口过程管理所有的消息,处理一些消息,传递其它的消息到对话框过程,这样对话框过程就可以执行任务了。应用程序对预先定义的窗口类或窗口过程没有直接的控制,但是它们可以使用对话框模板和对话框过程来修改一个对话框的风格和行为。