mfc中dialog如何基于系统风格_MFC技巧系列(三)--对话框(1).

本文详细介绍了MFC中对话框的风格设定,包括等闲风格和伸展风格,并探讨了模态和非模态对话框的消息处理机制。重点解析了CWnd的RunModalLoop方法以及CDialog的DoModal实现,强调了模态对话框中消息循环的特点。同时,文章讨论了在模态对话框存在时如何操作非模态窗口。
摘要由CSDN通过智能技术生成

对话框(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来告终模态循环,但

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值