非模态对话框

来源:互联网 发布:客车订票用什么软件 编辑:程序博客网 时间:2024/06/14 09:08
非模态对话框
    一个非模态对话框应该是一个拥有窗口菜单,标题栏和一个窄边框的弹出式窗口。即,对话框模板应该指定WS_POPUP,WS_CAPTION,WS_BORDER和WS_SYSMENU风格。系统不会自动的显示对话框,除非对话框模板指定了WS_VISIBLE风格。
    应用程序通过调用CreateDialog函数或CreateDialogIndirect函数来创建一个非模态对话框。CreateDialog函数需要一个包含对话框模板的资源的名字或标识符。CreateDialogIndirect函数需要一个指向一个包含对话框模板的内存单元的句柄。还有另外两个函数,CreateDialogParam函数和CreateDialogIndirectParam函数也可以创建非模态对话框。当对话框被创建时,这两个函数会传递一个指定参数到对话框过程。
    CreateDialog函数和其它创建函数会为对话框返回一个窗口句柄。应用程序和对话框过程可以使用这个句柄管理对话框。例如,如果WS_VISIBLE风格没有在对话框模板中指定,应用程序可以通过把窗口句柄传递给ShowWindow函数来显示对话框。
    一个非模态对话框既不会使主窗口失效,也不会发送消息给主窗口。当创建对话框时,系统会把这个对话框变成活动的窗口,但是用户或程序可以改变在任何时候改变这个活动的窗口。如果对话框变得不活跃,那么这个对话框以Z顺序保留在主窗口的上方,尽管主窗口是活动的。
    程序负责获取和分配对话框的输入消息。大多数应用程序使用主消息循环来做这件事。为了让用户通过使用键盘选择控件,应用程序必须调用IsDialogMessage函数。
    非模态对话框不能像模态对话框那样,返回一个值给应用程序。但是对话框过程可以通过使用SendMessage函数发送信息到主窗口。
    应用程序在终结前必须撤销所有的对话框。可以通过使用DestroyWindow函数来撤销非模态对话框。大多数情况下,对话框过程调用DestroyWindow函数来响应用户输入。例如,点击Cancel按钮。如果用户不用这种方式关闭对话框,那么应用程序必须调用DestroyWindow函数。
    DestroyWindow函数可以使对话框的窗口句柄失效,这样任何使用这个句柄的函数会返回错误的值。为了防止错误发生,对话框过程应该通知对话框的主窗口,对话框已经被撤销。许多应用程序包含一个对话框句柄全局变量。当对话框过程撤销了对话框,它必须把全局变量设置为NULL,标志着对话框不再有效。
    对话框过程不能调用EndDialog函数来撤销一个非模态对话框。
原创粉丝点击