前言
在Outlookbar工具欄中,有CTreeCtrl樹控件,點選一個節點,彈出的對話框會嵌入到客戶區中。本文的樣例涉及到BCGControlBar V22.1控件庫,使用的是該庫的自帶例子BCGPOrganizer,可以在\BCGSoft\BCGControlBarPro\Samples下找到。
實作的效果
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX90TQOp3YE10MZRUT4FEVkZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jM1UDOyQzM1EDNyQDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
修改如下
1、建立一個類CMacrosView,該類繼承CView,建立的類用來顯示要彈出的對話框。在該類中聲明LoadDlg函數,原型如下:
LoadDlg函數的定義如下:
void CMacrosView::LoadDlg(UINT nID, CString strName)
{
CRect rect;
GetClientRect(&rect);
ClientToScreen(&rect);
if(strName == "反應堆壓力容器" )
{
CGravityAnalysisDlg* pGADlg = new CGravityAnalysisDlg;
pGADlg->Create(IDD_NEW_REACTOR_PRESSURE, this);
pGADlg->ShowWindow(SW_SHOW);
pGADlg->MoveWindow(, , rect.Width(), rect.Height(), );
}
else if(strName == "蒸汽發生器")
{
...
}
else if(strName == "自重分析")
{
...
}
}
2、CBCGPOrganizerDoc類中添加LoadMacros函數
函數聲明:
函數定義:
void CBCGPOrganizerDoc::LoadMacrosDlg(UINT nID, CString strName)
{
CMacrosView* pView = DYNAMIC_DOWNCAST(CMacrosView, GetView(e_ModeMacros));
if(pView != NULL)
{
ASSERT_VALID(pView);
pView->LoadDlg(nID, strName);
}
}
3、修改CMacrosBar的輕按兩下事件
void CMacrosBar::OnDblclk(NMHDR* /*pNMHDR*/, LRESULT* pResult)
{
HTREEITEM hItem = GetSelectedItem();
if (hItem != NULL /*&& !ItemHasChildren(hItem)*/)
{
CFrameWnd* pFrameWnd = (CFrameWnd*)GetTopLevelFrame ();
ASSERT_VALID (pFrameWnd);
CBCGPOrganizerDoc* pDoc =
DYNAMIC_DOWNCAST(CBCGPOrganizerDoc, pFrameWnd->GetActiveDocument ());
if (pDoc != NULL)
{
/*LoadMacrosDlg函數新定義的函數用來打開選中的應用對話框*/
pDoc->LoadMacrosDlg ((UINT)GetItemData (hItem), GetItemText (hItem));
}
}
*pResult = ;
}
4、其他注意點
需要彈出的對話框,需要把該對話框的Style屬性設定為Child,Border設為None.