对话框(Dialog)是利用中常用的界面形态。一个标兵的对话框的风格如下:
等闲风格:WS_CAPTION | WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_SYSMENU
伸展风格:WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE | WS_EX_CONTROLPARENT | WS_EX_APPWINDOW
Dialog从消息处理的角度又能够分为模态和非模态对话框。其中,模态对话框切实是调用了CWnd的RunModalLoop措施(代码位置:%Program Files%/Microsoft Visual Studio .NET 2003/Vc7/atlmfc/src/mfc/dlgcore.cpp)。该措施的中心为一个消息处理循环,这个过程同CWinThread所封装的消息循环相仿,利用了PeekMessage非阻塞地获取消息,可分为两个阶段:
第一阶段:安逸事态处理。此刻,消息队列中未曾任何消息,此刻无法退出模态循环。利用能够穿越一些符号(Flag)来扼制是否发生安逸消息,这些符号如下:
1. MLF_SHOWONIDLE:在安逸时,万一窗口不可见则让其可见
2. MLF_NOIDLEMSG:不发生WM_ENTERIDLE消息
3. MLF_NOKICKIDLE:不发生WM_KICKIDLE消息
注:安逸消息重要指WM_ENTERIDLE和WM_KICKIDLE。
第二阶段:非安逸消息处理。此刻,能够穿越调用EndModalLoop来告终模态循环,但