如何通过MFC活动子窗口实现窗口的隐藏与显示

频道:游戏攻略 日期: 浏览:1

如何让MFC活动子窗口玩捉迷藏?

最近帮同事调试程序时,发现他正为窗口管理发愁——就像整理杂乱的书桌,明明摆着十几个工具窗口,却总找不到想要的那个。其实用MFC处理活动子窗口的隐藏显示,就像给每个抽屉贴上标签,找东西时唰地拉开,不用时就轻轻推回去。

窗口捉迷藏的三把钥匙

在MFC框架里,CChildFrameCView就像连体婴儿,想要精准控制子窗口,得先摸清它们的活动规律。上周调试打印机设置窗口时,我发现这三个方法最管用:

  • ShowWindow(SW_HIDE):就像关灯睡觉,直接把窗口藏进被窝
  • 修改WS_VISIBLE样式:给窗户拉上窗帘,但窗框还在那儿
  • 动态调整窗口位置:把窗口挪到屏幕外,像把玩具收到床底下

实战:给文档窗口装开关

如何通过MFC活动子窗口实现窗口的隐藏与显示


// 在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);

方法对比手册

如何通过MFC活动子窗口实现窗口的隐藏与显示

方法响应速度内存占用适用场景
ShowWindow闪电级5-10KB频繁切换的工具栏
修改样式中等基本不变需要保留布局的窗口
位移法稍慢增加2-3KB需要保持数据状态的窗口

藏在代码里的陷阱

上周五加班时,实习生小李的窗口突然"失踪"了。原来他在隐藏窗口后忘记禁用消息循环,导致隐藏的窗口还在后台处理消息。后来我们在隐藏代码里加上了这两行:

如何通过MFC活动子窗口实现窗口的隐藏与显示

  • EnableWindow(FALSE) 禁用输入
  • ModifyStyle(WS_VISIBLE, 0) 清除可见标志

现在看着调试成功的界面,就像看到整理好的工具墙——每个窗口都有了自己的专属位置,点击按钮时它们像训练有素的士兵,唰地出现又整齐退场。窗外的夕阳把代码染成金色,顺手保存了今天的工程文件。

网友留言(0)

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。