大多数应用程序使用对话框提示需要用户输入的命令的其他信息。使用对话框是应用程序检索输入的唯一推荐方法。例如,文件打开命令需要打开文件的名称,因此应用程序应使用对话框提示用户输入名称。在这种情况下,当用户选择命令并在用户提供信息后立即销毁对话框,应用程序将创建对话框。
许多应用程序还使用对话框来显示信息或选项,而用户在另一个窗口中工作。例如,文字处理应用程序通常使用带有文本搜索命令的对话框。当应用程序搜索文本时,对话框保留在屏幕上。然后,用户可以返回到对话框并重新搜索相同的单词;或者用户可以更改对话框中的条目并搜索新的单词。以这种方式使用对话框的应用程序通常在用户选择命令时创建一个,并在应用程序运行或用户显式关闭对话框之前继续显示它。
为了支持应用程序使用对话框的不同方式,Windows提供了两种类型的对话框:模态和无模式。A 【模态对话框】要求用户在允许应用程序继续之前提供信息或取消对话框。应用程序使用模态对话框与需要其他信息的命令结合起来才能继续。A 【无模式对话框】允许用户提供信息并返回到上一个任务,而不关闭对话框。模态对话框比无模式对话框更容易管理,因为它们被创建,执行任务,并通过调用单个函数来销毁。
要创建模态或无模式对话框,应用程序必须提供对话框模板来描述对话框的样式和内容;应用程序还必须提供一个对话框程序来执行任务。【对话框模板】是对话框及其包含的控件的二进制描述。开发人员可以将该模板创建为从应用程序的可执行文件加载的资源,或者在应用程序运行时在内存中创建。【对话框过程】是一个应用程序定义的回调函数,Windows将在对话框的输入或对话框的任务执行时调用该函数。虽然对话框过程与窗口过程类似,但它没有相同的责任。
应用程序通常使用DialogBox或CreateDialog功能创建一个对话框。DialogBox创建一个模态对话框; CreateDialog创建无模式对话框。这两个函数从应用程序的可执行文件中加载一个对话框模板,并创建一个与模板规范相匹配的弹出窗口。还有其他功能可以通过在内存中使用模板来创建一个对话框;当创建对话框时,它们会将附加信息传递给对话框过程。
对话框通常属于预定义的独家窗口类。Windows使用此窗口类及其对应的窗口过程来进行模态和无模式对话框。当函数被调用时,它将创建对话框的窗口,以及对话框中控件的窗口,然后将选定的消息发送到对话框过程。当对话框可见时,预定义的窗口过程管理所有消息,处理一些消息并将其他消息传递给对话框过程,以便该过程可以执行任务。应用程序不能直接访问预定义的窗口类或窗口过程,但可以使用对话框模板和对话框过程来修改对话框的样式和行为。