取消 CDockablePane 自动保存界面配置到注册表

因为MFC默认会把的配置信息保存到注册表,如果每次启动程序还原界面,需要手动关闭保存。


默认保存路径:
SetRegistryKey(_T("Local AppWizard-Generated Applications"))不影响程序性能
只有下面有写操作才会写入到这个位置:
hkey_current_user\software\Local AppWizard-Generated Applications
如果不使用注册表信息,此函数没什么用 不写入注册表  



int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

......

// 已创建 Outlook 栏,应允许在左侧停靠。
EnableDocking(CBRS_ALIGN_LEFT);
EnableAutoHidePanes(CBRS_ALIGN_RIGHT);



if(!m_testDockpane.Create(_T("test pane"), this, CRect(0, 0, 200, 200), TRUE, IDD_TEST_DIALOG,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
{
TRACE0("未能创建test pane\n");
return -1;      // 未能创建
}
m_testDockpane.EnableDocking(CBRS_ALIGN_ANY);
//m_testDockpane.SetMinSize(CSize(300, 300));
DockPane(&m_testDockpane);

this->GetDockingManager()->DisableRestoreDockState(TRUE);//关闭自动保存界面到注册表

return 0;
}


推荐方法

方法2: 


//项目名称为TempAreaMoniter
// CTempAreaMoniterApp 初始化


BOOL CTempAreaMoniterApp::InitInstance()
{
// 如果一个运行在 Windows XP 上的应用程序清单指定要
// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
//则需要 InitCommonControlsEx()。否则,将无法创建窗口。
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 将它设置为包括所有要在应用程序中使用的
// 公共控件类。
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);


CWinAppEx::InitInstance();


// 初始化 OLE 库
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
AfxEnableControlContainer();
// 标准初始化
// 如果未使用这些功能并希望减小
// 最终可执行文件的大小,则应移除下列
// 不需要的特定初始化例程
// 更改用于存储设置的注册表项
// TODO: 应适当修改该字符串,
// 例如修改为公司或组织名
//SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
//LoadStdProfileSettings(0);  // 加载标准 INI 文件选项


SetRegistryKey(_T("company"));//保存界面配置信息到注册表
DelRegTree(HKEY_CURRENT_USER, _T("software\\company\\TempAreaMoniter"));//删除注册表配置


....................................




posted @ 2022-03-12 22:05  xiaomodecnblogs  阅读(67)  评论(0编辑  收藏  举报