CDockablePane 关闭的问题
显示或者隐藏
当点击CDockablePane上的关闭按钮时,并不能将其关闭,知识将其隐藏了起来,如果需要重新显示或隐藏,则相关命令的响应函数如下:
- if(m_Panes.GetSafeHwnd())
- {
- BOOL flag = !m_Panes.IsVisible();
- m_Panes.ShowPane(flag,FALSE,flag);
- }
关闭按钮的响应函数
当点击CDockablePane上的关闭按钮时,主框架会进行响应
- //关闭停靠窗口事件,事实上是隐藏窗体,还是占用资源的
- BOOL CMainFrame::OnCloseDockingPane(CDockablePane* pWnd) ;
- //关闭悬浮窗口事件,事实上液是隐藏窗体,还是占用资源的
- BOOL CMainFrame::OnCloseMiniFrame(CPaneFrameWnd* pWnd)
因此,如果仅仅是重写这两个消息,没做什么处理,那么内存还是消不下去,经过调试,获知如下方式可以真正销毁关闭该Dock窗体:
//停靠窗体关闭
BOOL CMainFrame::OnCloseDockingPane(CDockablePane* pWnd)
{
//处理关闭事件
if(pWnd->IsKindOf(RUNTIME_CLASS(CTabbedPane)))
{ //多个窗口
CTabbedPane* tabpane = (CTabbedPane *)pWnd;
CMFCBaseTabCtrl* pTabWnd =
tabpane->GetUnderlyingWindow();
int num = pTabWnd->GetActiveTab();
if(num >= 0)
{ //这里仅仅关闭活动的面板
CDockablePane* pBar =
DYNAMIC_DOWNCAST(CDockablePane, pTabWnd->GetTabWnd(num));
if (pBar != NULL)
{
ASSERT_VALID(pBar);
//将关闭消息加入该DockPane队列,等待完成本函数后关闭
::PostMessageA(pBar->m_hWnd
,WM_CLOSE, 0 , 0);
}
}
}
else
{
//单个窗口
CDockablePane* pane = (CDockablePane*)pWnd;
if(pane->IsKindOf(RUNTIME_CLASS(CDockablePane))
|| pane->IsKindOf(RUNTIME_CLASS(CPane))
&& !pane>IsKindOf(RUNTIME_CLASS(CMFCToolBar)))
{
//将关闭消息加入该DockPane队列,等待完成本函数后关闭
::PostMessageA(pane->m_hWnd
,WM_CLOSE, 0 , 0);
}
}
return TRUE;
}
//关闭悬浮窗体
BOOL CMainFrame::OnCloseMiniFrame(CPaneFrameWnd* pWnd)
{
//处理关闭事件
CWnd* pwnd = pWnd->GetPane();
if(pwnd->IsKindOf(RUNTIME_CLASS(CTabbedPane)))
{
//多个窗口
CTabbedPane* tabpane = (CTabbedPane *)pwnd;
CMFCBaseTabCtrl* pTabWnd =
tabpane->GetUnderlyingWindow();
//关闭所有的面板
for(int
i=0;i<pTabWnd->GetTabsNum();i++)
{
CDockablePane* pBar
= DYNAMIC_DOWNCAST(CDockablePane, pTabWnd->GetTabWnd(i));
if (pBar != NULL)
{
ASSERT_VALID(pBar);
//将关闭消息加入该DockPane队列,等待完成本函数后关闭
::PostMessageA(pBar->m_hWnd
,WM_CLOSE, 0 , 0);
}
}
}
else
{
//单个窗口
CDockablePane* pane = (CDockablePane *)pwnd;
if(pane->IsKindOf(RUNTIME_CLASS(CDockablePane))
|| pane->IsKindOf(RUNTIME_CLASS(CPane))
&&
pane->IsKindOf(RUNTIME_CLASS(CPaneFrameWnd)))
{
//将关闭消息加入该DockPane队列,等待完成本函数后关闭
::PostMessageA(pWnd->GetPane()->m_hWnd
,WM_CLOSE, 0 , 0);
}
}
return TRUE;
}
//关闭后,如视图需要重新打开,用这句:
if(m_wndClassView.GetSafeHwnd())
{
m_wndClassView.ShowPane(TRUE,FALSE,TRUE);
return ;
}
else
{
UINT Dockstyle = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN
| CBRS_RIGHT |CBRS_FLOAT_MULTI;
BOOL bNameValid;
CString strClassView;
bNameValid = strClassView.LoadString(IDS_CLASS_VIEW);
ASSERT(bNameValid);
if (!m_wndClassView.Create(strClassView, this, CRect(0,
0, 200, 200),
TRUE, ID_VIEW_ONLINE_CLIENT_TERR_PANE,
Dockstyle
,AFX_CBRS_OUTLOOK_TABS))
{
TRACE("未能创建%s窗口\n"
,strClassView);
return ;
}
m_wndClassView.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndClassView);
}
CDockablePane 关闭的问题的更多相关文章
- 在CDockablePane中嵌入CFormView
CDockablePane中嵌入CFormView与嵌入CDialogEx稍有不同,差异主要体现在CFormView类本身与CDialogEx类的不同上,CDockablePane层面的操作完全相同. ...
- CDockablepane风格设置
屏蔽掉pane右上角的几个按钮 即将CDockablePane右上角的三个按钮屏蔽. 1 去掉关闭按钮 在CDockablePane的派生类中,重写方法CanBeClosed即可 ...
- CDockablePane使用总结
基于 http://blog.csdn.net/kikaylee/article/details/8936953 CDockablePane的基本布局和用法 新建一个SDI工程,在CMainFrame ...
- VC++ MFC SDI/MDI Ribbon程序的停靠窗格被关闭后如何再次显示
VC++ 创建基于MFC的SDI应用程序,Visual Studio风格的主界面如下图所示,在该主界面上的视图菜单下包含有队对各个可停靠窗格显示或隐藏的控制菜单项.而基于Ribbon风格的应用程序,所 ...
- 如何远程关闭一个ASP.NET Core应用?
在<历数依赖注入的N种玩法>演示系统自动注册服务的实例中,我们会发现输出的列表包含两个特殊的服务,它们的对应的服务接口分别是IApplicationLifetime和IHostingEnv ...
- CentOS7使用firewalld打开关闭防火墙与端口(转载)
1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld 停止: systemctl disabl ...
- RMS Server打开或关闭日志记录
原文: https://technet.microsoft.com/zh-cn/library/cc732758 在 Active Directory Rights Management Servic ...
- Stack Overflow 排错翻译 - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder
Stack Overflow 排错翻译 - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder 转自:ht ...
- centos6和centos7防火墙的关闭
CentOS6.5查看防火墙的状态: [zh@localhost ~]$service iptable status 显示结果: [zh@localhost ~]$service iptable st ...
随机推荐
- Storm 分配逻辑
ps:都是学习的别人的博客,只是做了个整理所有就写成了原创,其实都是人家的东西 当一个topology在storm cluster中运行时,它的并发主要跟3个逻辑对象相关:worker,executo ...
- 监控自定义信息 —— ESFramework 4.0 快速上手(10)
在ESFramework 4.0 进阶(02)-- 核心:消息处理的骨架流程一文中,我们介绍了通过挂接IMessageSpy到骨架流程,我们就可以监控到所有收发的消息.由于Rapid引擎已经为我们组装 ...
- windows7旗舰版系统自带组件IIS搭建ftp
1.win7,”开始“,打开”控制面板“,点击”程序“,看到”程序和功能“,如图所示: 2.点击”打开或关闭Windows功能“,如图所示: 3.成功后,打开”控制面板“,点击”系统和安全“,点击”管 ...
- HeapSpray初窥(2014.12)
注:环境是xp+ie8 1.HeapSpray简介 Windows的堆因为动态分配和释放的特点,其看起来是不连续(没有规律的),但是仍可以找到一定的规律:大量的连续分配会更倾向使用连续的地址,减少了碎 ...
- MyBatis学习-SQL 符号篇
当我们需要通过 XML 格式处理 SQL 语句时,经常会用到 <,<=,>,>= 等符号,但是很容易引起 XML 格式的错误,这样会导致后台将 XML 字符串转换为 XML文档 ...
- sql 在将 nvarchar 值 转换成数据类型 int 时失败。
假设有存储过程:proc_test2 create proc proc_test2 @Id int begin as declare @sql varchar(max) @sql = 'select ...
- CSS3秘笈:第二章
1.一个样式由两个元素组成:浏览器对其设置格式的网页元素(选择器,selector)和实际的格式化指令(声明块,declaration block). 2.简单的样式也包含了以下几个元素: (1)Se ...
- tomcat 高并发配置 与优化
公司的一个服务器使用Tomcat6默认配置,在后台一阵全点击服务器就报废了,查了一下就要是PERMSIZE默认值过小造成(16-64) TOMCAT_HOME/bin/catalina.sh 添加一行 ...
- centos装openoffice
一.安装openOffice1.使用tar -xzvf OOo_3.2.0_LinuxIntel_install_wJRE_en-US.tar.gz解压缩后,会得到OOO320_m12_native_ ...
- ios 中NSArray
// #import <Foundation/Foundation.h> #import "Animal.h" int main(int argc, const cha ...