none
如何解析和获取CDockablePane的注册表含义? RRS feed

  • 问题

  • 程序退出时记录各窗口位置,重启后回复退出后布局。

    CDockablePane的缺省记录的注册表条目,哪里有相关文档说明关于格式、获取方式等的说明?

    比如:

    注册表值

    RectRecendDocked    REG_BINARY   00 00 00 4b 02 00 00 6c 07 00 00 be 02 00 00

    这个注册表的值怎么获取?怎么解析?

    2020年1月2日 12:27

答案

  • 你好,

    感谢您在MSDN论坛发帖提问

    请问"RectRecendDocked"是什么?你所指的是不是"RectRecentDocked"?

    根据你之前发过的这个帖子:如何记录CDockablePane的窗口大小? 你是否想要得到CDockablePane的位置和状态?如果是,我建议你可以尝试使用CBasePane :: LoadState从注册表加载窗格的状态。

    BOOL CPane::LoadState(LPCTSTR lpszProfileName, int nIndex, UINT uiID)
    {
    	CString strProfileName = ::AFXGetRegPath(strControlBarProfile, lpszProfileName);
    
    	if (nIndex == -1)
    	{
    		nIndex = GetDlgCtrlID();
    	}
    
    	CString strSection;
    	if (uiID == (UINT) -1)
    	{
    		strSection.Format(AFX_REG_SECTION_FMT, (LPCTSTR)strProfileName, nIndex);
    	}
    	else
    	{
    		strSection.Format(AFX_REG_SECTION_FMT_EX, (LPCTSTR)strProfileName, nIndex, uiID);
    	}
    
    	CSettingsStoreSP regSP;
    	CSettingsStore& reg = regSP.Create(FALSE, TRUE);
    
    	if (!reg.Open(strSection))
    	{
    		return FALSE;
    	}
    
    	reg.Read(_T("RectRecentDocked"), m_rectSavedDockedRect);
    
    	
    
    	return CBasePane::LoadState(lpszProfileName, nIndex, uiID);
    }



    >>这个注册表的值怎么获取?怎么解析?

    关于注册表的数值类型, 我建议你可以参考这个链接:https://docs.microsoft.com/en-us/windows/win32/sysinfo/registry-value-types

    Best Regards,

    Jeanine Zhang

    2020年1月3日 6:34
    版主

全部回复

  • 你好,

    感谢您在MSDN论坛发帖提问

    请问"RectRecendDocked"是什么?你所指的是不是"RectRecentDocked"?

    根据你之前发过的这个帖子:如何记录CDockablePane的窗口大小? 你是否想要得到CDockablePane的位置和状态?如果是,我建议你可以尝试使用CBasePane :: LoadState从注册表加载窗格的状态。

    BOOL CPane::LoadState(LPCTSTR lpszProfileName, int nIndex, UINT uiID)
    {
    	CString strProfileName = ::AFXGetRegPath(strControlBarProfile, lpszProfileName);
    
    	if (nIndex == -1)
    	{
    		nIndex = GetDlgCtrlID();
    	}
    
    	CString strSection;
    	if (uiID == (UINT) -1)
    	{
    		strSection.Format(AFX_REG_SECTION_FMT, (LPCTSTR)strProfileName, nIndex);
    	}
    	else
    	{
    		strSection.Format(AFX_REG_SECTION_FMT_EX, (LPCTSTR)strProfileName, nIndex, uiID);
    	}
    
    	CSettingsStoreSP regSP;
    	CSettingsStore& reg = regSP.Create(FALSE, TRUE);
    
    	if (!reg.Open(strSection))
    	{
    		return FALSE;
    	}
    
    	reg.Read(_T("RectRecentDocked"), m_rectSavedDockedRect);
    
    	
    
    	return CBasePane::LoadState(lpszProfileName, nIndex, uiID);
    }



    >>这个注册表的值怎么获取?怎么解析?

    关于注册表的数值类型, 我建议你可以参考这个链接:https://docs.microsoft.com/en-us/windows/win32/sysinfo/registry-value-types

    Best Regards,

    Jeanine Zhang

    2020年1月3日 6:34
    版主
  • 非常感谢,我试试看。应该就是要的这个
    2020年1月3日 10:10
  • 重载LoadState,拿到的m_rectSavedDockedRect看,信息是保存的信息。但是程序展现出来的大小不是这个大小。

    比如,保存时以及从注册表取回来的高度时99像素高,很窄的一条。但是程序展现的是大约窗口三分之一高。应该是重新计算的缺省高度了。

    现在怎么看mfc是如何没用保存的高度,而重新计算的?

    现在就想恢复到保存的99高度问题就解决了。

    2020年1月4日 12:17