gpt4 book ai didi

c++ - 如何调整 CDockablePane 的大小?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:41:53 26 4
gpt4 key购买 nike

我正在 Visual Studio 2012 上编写 SDI 应用程序。MFC 向导生成了两个 CDockablePane 派生对象。右侧的 CPropertiesWnd(CDockablePane 派生的)对象被命名为 m_wndProperties。我在 m_wndProperties 中嵌入了一个 CPropertySheet 对象,其中包含一个 CPageNone(CPropertyPage-派生)对象,标题为“帮助”like this(我直接使用 CPropertySheet 类)。但是,CPropertySheet 对象的实际大小是 bigger

我试图在对话框编辑器中调整与 CPageNone 对象(名为 m_pageNone)相关的对话框的大小。这没有效果。在 MainFrm.cpp 中,我能找到的唯一与 m_wndProperties 相关的行是:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
.....
m_wndProperties.EnableDocking(CBRS_ALIGN_RIGHT);
DockPane(&m_wndProperties);
.....
}

.....

BOOL CMainFrame::CreateDockingWindows()
{
.....
CString strPropertiesWnd;
bNameValid = strPropertiesWnd.LoadString(IDS_PROPERTIES_WND);
ASSERT(bNameValid);
if (!m_wndProperties.Create(strPropertiesWnd, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
{
TRACE0("無法建立 [屬性] 視窗\n");
return FALSE; // 無法建立
}
.....
}

.....

void CMainFrame::SetDockingWindowIcons(BOOL bHiColorIcons)
{
.....
HICON hPropertiesBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_PROPERTIES_WND_HC : IDI_PROPERTIES_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
m_wndProperties.SetIcon(hPropertiesBarIcon, FALSE);

}

这是我的 PropertiesWnd.cpp 中的 AdjustLayout():

void CPropertiesWnd::AdjustLayout()
{
if (GetSafeHwnd () == NULL || (AfxGetMainWnd() != NULL && AfxGetMainWnd()->IsIconic()))
{
return;
}

CRect rectClient;
GetClientRect(rectClient);

m_PropertySheet.SetWindowPos (NULL, rectClient.left, rectClient.top, rectClient.Width (), rectClient.Height (), SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE);
}

而在我的PageNone.cpp 中,我只有三个函数:默认构造函数、默认析构函数和DoDataExchange

我的问题是如何调整 m_wndPropertiesm_pageNone 的大小以适应彼此?非常感谢。

最佳答案

我以不同的方式解决了这个问题(代码太大,无法在这个答案中给出,但要点是:

a) 不要在 CMainFrame::OnCreate()

中做任何事情

b) 在CMainFrame::CreateDockingWindows()中,在m_wndProperties.Create()之后,添加如下代码

m_PropertySheet.Create(...);
CRect rc;
m_PropertySheet.GetRect(&rc);
m_wndProperties.SetMinSize(rc.Width(), rc,Height());
m_wndProperties.EnableDocking(CBRS_ALIGN_RIGHT);
DockPane(&m_wndProperties);
ShowPane(&m_wndProperties, TRUE, FALSE, TRUE);

关于c++ - 如何调整 CDockablePane 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48227690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com