如何通过MFC活动子窗口实现窗口的隐藏与显示
如何让MFC活动子窗口玩捉迷藏?
最近帮同事调试程序时,发现他正为窗口管理发愁——就像整理杂乱的书桌,明明摆着十几个工具窗口,却总找不到想要的那个。其实用MFC处理活动子窗口的隐藏显示,就像给每个抽屉贴上标签,找东西时唰地拉开,不用时就轻轻推回去。
窗口捉迷藏的三把钥匙
在MFC框架里,CChildFrame和CView就像连体婴儿,想要精准控制子窗口,得先摸清它们的活动规律。上周调试打印机设置窗口时,我发现这三个方法最管用:
- ShowWindow(SW_HIDE):就像关灯睡觉,直接把窗口藏进被窝
- 修改WS_VISIBLE样式:给窗户拉上窗帘,但窗框还在那儿
- 动态调整窗口位置:把窗口挪到屏幕外,像把玩具收到床底下
实战:给文档窗口装开关
// 在CMainFrame中添加成员变量
CChildFrame m_pActiveChild;
// 响应窗口激活事件
void CMainFrame::OnMDIActivate(BOOL bActivate, CWnd pActivateWnd, CWnd pDeactivateWnd)
m_pActiveChild = dynamic_cast(pActivateWnd);
CMDIFrameWnd::OnMDIActivate(bActivate, pActivateWnd, pDeactivateWnd);
// 隐藏当前活动窗口
void CMainFrame::HideActiveChild
if(m_pActiveChild && m_pActiveChild->GetSafeHwnd)
m_pActiveChild->ShowWindow(SW_HIDE);
m_pActiveChild->EnableWindow(FALSE);
方法对比手册
方法 | 响应速度 | 内存占用 | 适用场景 |
---|---|---|---|
ShowWindow | 闪电级 | 5-10KB | 频繁切换的工具栏 |
修改样式 | 中等 | 基本不变 | 需要保留布局的窗口 |
位移法 | 稍慢 | 增加2-3KB | 需要保持数据状态的窗口 |
藏在代码里的陷阱
上周五加班时,实习生小李的窗口突然"失踪"了。原来他在隐藏窗口后忘记禁用消息循环,导致隐藏的窗口还在后台处理消息。后来我们在隐藏代码里加上了这两行:
- EnableWindow(FALSE) 禁用输入
- ModifyStyle(WS_VISIBLE, 0) 清除可见标志
现在看着调试成功的界面,就像看到整理好的工具墙——每个窗口都有了自己的专属位置,点击按钮时它们像训练有素的士兵,唰地出现又整齐退场。窗外的夕阳把代码染成金色,顺手保存了今天的工程文件。
评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
网友留言(0)