c++ 创建时自动隐藏CDockablePane

mspsb9vt  于 2023-06-07  发布在  其他
关注(0)|答案(2)|浏览(583)

我有3个可停靠的窗格,每个窗格包含1个图像。一个在左边,一个在右边,一个看不见。问题是,我想有一个在默认情况下隐藏的权利,让一个在左边采取整个空间。我已经搜索了整个文档,以找到我应该在我的窗格上调用以下内容,但什么也没有发生。

ToggleAutoHide();

我不知道我错过了什么。下面是我的创建代码,以防它有帮助:

// image docking panel creation
if (!m_wndRawImage.Create(_T("Raw Image"), this, imgRect, TRUE, ID_VIEW_RAWIMGWND, dwPaneStyle| CBRS_RIGHT, AFX_CBRS_REGULAR_TABS, AFX_CBRS_RESIZE))
{
    TRACE0("Failed to create image tab window\n");
    return -1;
}

if (!m_wndRefImage.Create(_T("Reference Image"), this, imgRect, TRUE, ID_VIEW_REFIMGWND, dwPaneStyle| CBRS_RIGHT))
{
    TRACE0("Failed to create image tab window\n");
    return -1;
}

if (!m_wndCalibImage.Create(_T("Calibrated Image"), this, imgRect, TRUE, ID_VIEW_CALIBIMGWND, dwPaneStyle| CBRS_RIGHT))
{
    TRACE0("Failed to create image tab window\n");
    return -1;
}

m_wndImagePane1.EnableDocking(CBRS_ALIGN_RIGHT | CBRS_ALIGN_LEFT);
m_wndImagePane2.EnableDocking(CBRS_ALIGN_RIGHT | CBRS_ALIGN_LEFT);
m_wndImagePane3.EnableDocking(CBRS_ALIGN_RIGHT | CBRS_ALIGN_LEFT);

CDockingManager::SetDockingMode(DT_SMART);

EnableDocking(CBRS_ALIGN_ANY);
EnableAutoHidePanes(CBRS_ALIGN_ANY);

// image panes
DockPane(&m_wndImagePane3);
CDockablePane* pTabbedBar2 = NULL;
m_wndImagePane2.AttachToTabWnd(&m_wndImagePane3, DM_SHOW, FALSE, &pTabbedBar2);
m_wndImagePane2.ShowPane(FALSE, FALSE, FALSE);
m_wndImagePane3.ShowPane(TRUE, FALSE, TRUE);
m_wndImagePane3.ToggleAutoHide(); //<---- Problem is here

DockPane(&m_wndImagePane1);
m_wndImagePane1.ShowPane(TRUE, FALSE, TRUE);

谢谢!

u0njafvf

u0njafvf1#

如果我对您问题理解正确的话,您希望在应用程序启动中隐藏一个窗格。
我使用ON_WM_SHOWWINDOW()消息来隐藏窗格。就像这样:
将其添加到CMainFrame类声明中:

afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);

并将其添加到消息Map:

ON_WM_SHOWWINDOW()

并将其添加到主代码中:

void CMainFrame::OnShowWindow(BOOL bShow, UINT nStatus)
{
    CFrameWndEx::OnShowWindow(bShow, nStatus);

    // Hide Properties pane in startup
    m_wndProperties.SetAutoHideMode(FALSE, CBRS_ALIGN_ANY);
    m_wndProperties.ShowPane(FALSE, FALSE, FALSE);
}

希望可以帮到你!

r6vfmomb

r6vfmomb2#

为了子孙后代。
1.在CMainFrame类中添加新的公共方法:

void CMainFrame::HidePanes()
{
    m_wndProperties.ShowPane(FALSE, FALSE, FALSE);
}

1.从CMyApp::InitInstance方法的末尾调用此方法:

BOOL CMyApp::InitInstance()
{
    ...
    CMainFrame* pMainFrame = new CMainFrame;
    ...
    
    pMainFrame->HidePanes();
    pMainFrame->ShowWindow(m_nCmdShow);
    pMainFrame->UpdateWindow();
}

相关问题