用于同步多个窗口的活动状态的类。





5.00/5 (1投票)
2002年3月11日
2分钟阅读

44740

526
用于同步多个窗口的活动状态的类。
引言
通过本文中的 ISyncActiveImpl
类,您可以拥有与所有者窗口同步活动状态的窗口。
已实现的功能
- 可以与所有者窗口同步活动状态的窗口;
- 当应用程序停用以及当所有者窗口最小化或隐藏时,自动隐藏的窗口;
- 当所有者窗口禁用时,自动禁用的窗口。
用法
我将基于本文中包含的演示应用程序的源代码来举例说明。
-
在您的源代码文件中包含 ISyncActiveImpl.h 头文件。
-
从
ISyncActiveImpl<>
派生您的类。class CMainDlg : public CDialogImpl<CMainDlg> , public ISyncActiveImpl<CMainDlg> , public CMessageFilter
-
在您的类构造函数中,确保使用适合您窗口类型的正确参数实例化
ISyncActiveImpl<>
类。例如,对于创建对话框或框架窗口
CMainDlg() // this dialog does not sync the active state with // owner and it must be always visible. : ISyncActiveImpl<CMainDlg>(FALSE, TRUE) { }
或者对于创建浮动或工具栏窗口
CFloatingWindow() // this window will synchronize the active state with // owner and will automatically be hidden when owner // is hidden/minimized or when application looses the // active state. : ISyncActiveImpl<CFloatingWindow>(TRUE) { }
-
在您的类的消息映射中添加一个
CHAIN_MSG_MAP
宏。BEGIN_MSG_MAP(CMainDlg) CHAIN_MSG_MAP(ISyncActiveImpl<CMainDlg>) . . . END_MSG_MAP()
注意:确保将其插入到消息映射的第一个条目中。这是必要的,因为
ISyncActiveImpl<>
类需要拦截一些常规消息(例如WM_CREATE
)。
幕后
同步窗口活动状态的关键在于 WM_NCACTIVATE
消息。通过处理或发送此消息,我们可以强制窗口以活动或非活动状态进行绘制。
窗口的自动隐藏是通过处理 WM_ACTIVATEAPP
消息来实现的。
另外两个需要处理的重要消息是 WM_ACTIVATE
和 WM_SHOWWINDOW
,您可以在源代码和 MSDN 中找到有关它们的信息。
最后,我想说的是,在实现这个类时,我遇到了两个“奇怪”的激活问题,请在源代码中阅读所有相关信息。
历史
- 2002年3月11日
- 首次公开版本。
您有什么问题或意见吗?请联系 我!