如果讯息是发送给非模态对话方块的,那么IsDialogMessage将它发送给对话方块中视窗讯息处理程式,并传回TRUE(非0);否则,它将传回FALSE(0)。只有hDlgModeless为0或者讯息不是该对话方块的讯息时,才必须呼叫TranslateMessage和DispatchMessage函式。如果您将键盘加速键用於您的程式视窗,那么讯息回圈将如下所示:
由於整体变数被初始化为0,所以hDlgModeless将为0,直到建立对话方块为止,从而保证不会使用无效的视窗代号来呼叫IsDialogMessage。在清除非模态对话方块时,您也必须注意这一点,正如最後一点所说明的。
hDlgModeless变数也可以由程式的其他部分使用,以便对非模态对话方块是否存在加以验证。例如,程式中的其他视窗可以在hDlgModeless不等於0时给对话方块发送讯息。
最後一项重要的区别:使用DestroyWindow而不是EndDialog来结束非模态对话方块。当您呼叫DestroyWindow後,将hDlgModeless整体变数设定为0。
使用者习惯於从系统功能表中选择「Close」来结束非模态对话方块。尽管启用了「Close」选项,Windows内的对话方块视窗讯息处理程式并不处理WM_CLOSE讯息。您必须自己在对话方块程序中处理它: