Visual c++ Outlook栏自动调整到树控件的大小

Visual c++ Outlook栏自动调整到树控件的大小,visual-c++,autoresize,window-resize,mfc-feature-pack,treecontrol,Visual C++,Autoresize,Window Resize,Mfc Feature Pack,Treecontrol,我创建了一个带有树控件的Outlook栏,希望它能够自动调整大小,以便始终完全显示树控件的文本。理想情况下,图片中的边框将移动,以便“医疗保健商品化”完全可见 newDimbar是在CMInframe中创建的CMFCOutlookBar对象 我试过拉伸它: void CTreeDrill::OnTvnItemexpanded(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPN

我创建了一个带有树控件的Outlook栏,希望它能够自动调整大小,以便始终完全显示树控件的文本。理想情况下,图片中的边框将移动,以便“医疗保健商品化”完全可见

newDimbar是在CMInframe中创建的CMFCOutlookBar对象

我试过拉伸它:

void CTreeDrill::OnTvnItemexpanded(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
HTREEITEM hItem = pNMTreeView->itemNew.hItem;
RECT treeRect;
GetItemRect(GetChildItem(hItem), &treeRect, FALSE);
CMainFrame *pMain = (CMainFrame*)AfxGetMainWnd();
int iStretch = treeRect.right;
pMain->m_ctlNewDimBar.StretchPane(iStretch, FALSE);
EnsureVisible(GetChildItem(hItem));
}
没有运气。我缺少什么?

解决方案 我很高兴我找到了它,因为这是我将来也必须做的事情,你需要使用来更改的大小,检查这个,在你更改的大小之后,你必须使用包含的框架的方法

为什么使用? 我不知道,这是唯一对我有用的

为什么要使用而不仅仅是调用的RecalcLayout()? 因为如果您只是重新计算的布局,则只会更新,然后如果您将任何内容附加到,则不会收到更改,因此您可能会以重叠的其他控件或文档视图结束,调用将使整个框架重新计算,因此如果您有选项卡式文档视图,它们将相应地更新/调整大小

你的案子 您必须计算树的整个宽度,而不仅仅是项目,然后在上使用更新的值width value,但保留项目的高度


你能发布一张图片吗?你的文档的视图有选项卡吗?这是一个MDI应用程序,我正在使用MDI选项卡,如果这是你的意思的话?是的,我找到了解决方案,请在回答部分查看。
void CTreeDrill::OnTvnItemexpanded(NMHDR *pNMHDR, LRESULT *pResult)
{
RECT treeRect;
RECT newRect;
RECT dimRect;
GetItemRect(GetChildItem(hItem), &treeRect, FALSE);
CMainFrame *pMain = (CMainFrame*)AfxGetMainWnd();
pMain->m_ctlNewDimBar.GetWindowRect(&dimRect);
newRect = dimRect;
newRect.right = treeRect.right;
pMain->m_ctlNewDimBar.MoveWindow(newRect);
EnsureVisible(GetChildItem(hItem));
}
newDimbar.GetWindowRect(pos);
ScreenToClient(&pos);
UINT flags = SWP_NOZORDER | SWP_NOMOVE;
newDimbar.SetWindowPos(NULL, 0, 0, iNewWidth, pos.Height(), flags);