VC SDI程序,在MainFrm中有一停靠窗口m_wndVideoBar(CCoolBar类),
在停靠窗口上有一tab control,m_tabVideoControl(CCoolTabCtrl类),
tab control有2个tab页,分别对应CDialog类CDlgVideoList和CDlgGroupList,
在类CDlgVideoList里有一tree control,
现在要在MainFrm中对tree control进行操作,调用CDlgVideoList中的方法,
请问如何获取CDlgVideoList的实例或指针?MainFrm.h
CCoolBar m_wndVideoBar;
CCoolTabCtrl m_tabVideoControl;MainFrm.cpp
if (!m_wndVideoBar.Create(_T("视频控制区"), this, CSize(240,80), TRUE, IDD_BARVIDEOCONTROL))
{
TRACE0("Failed to create mybar\n");
return -1;
}m_tabVideoControl.Create(TCS_TABS|WS_CHILD|WS_VISIBLE,CRect(0,0,240,50),&m_wndVideoBar,IDD_TABVIDEOCONTROL);m_tabVideoControl.AddPage(RUNTIME_CLASS(CDlgVideoList),IDD_DLG_VIDEOLIST,"视频列表",IDI_APPMAIN);
m_tabVideoControl.AddPage(RUNTIME_CLASS(CDlgGroupList),IDD_DLG_GROUPLIST, "逻辑分组", IDI_APPMAIN);void CMainFrame::AddVideo(CString sVideoName)
{
CWnd *pWnd, *pWnd2;
pWnd = m_wndVideoBar.GetDlgItem(IDD_TABVIDEOCONTROL);// 可以得到
// pWnd2 = m_tabVideoControl.GetDlgItem(IDC_TREE_VIDEOLIST);// 得不到
// pWnd2 = m_tabVideoControl.GetDlgItem(IDD_DLG_VIDEOLIST);// 得不到
// pWnd2 = pWnd->GetDlgItem(IDC_TREE_VIDEOLIST);// 得不到
}
在停靠窗口上有一tab control,m_tabVideoControl(CCoolTabCtrl类),
tab control有2个tab页,分别对应CDialog类CDlgVideoList和CDlgGroupList,
在类CDlgVideoList里有一tree control,
现在要在MainFrm中对tree control进行操作,调用CDlgVideoList中的方法,
请问如何获取CDlgVideoList的实例或指针?MainFrm.h
CCoolBar m_wndVideoBar;
CCoolTabCtrl m_tabVideoControl;MainFrm.cpp
if (!m_wndVideoBar.Create(_T("视频控制区"), this, CSize(240,80), TRUE, IDD_BARVIDEOCONTROL))
{
TRACE0("Failed to create mybar\n");
return -1;
}m_tabVideoControl.Create(TCS_TABS|WS_CHILD|WS_VISIBLE,CRect(0,0,240,50),&m_wndVideoBar,IDD_TABVIDEOCONTROL);m_tabVideoControl.AddPage(RUNTIME_CLASS(CDlgVideoList),IDD_DLG_VIDEOLIST,"视频列表",IDI_APPMAIN);
m_tabVideoControl.AddPage(RUNTIME_CLASS(CDlgGroupList),IDD_DLG_GROUPLIST, "逻辑分组", IDI_APPMAIN);void CMainFrame::AddVideo(CString sVideoName)
{
CWnd *pWnd, *pWnd2;
pWnd = m_wndVideoBar.GetDlgItem(IDD_TABVIDEOCONTROL);// 可以得到
// pWnd2 = m_tabVideoControl.GetDlgItem(IDC_TREE_VIDEOLIST);// 得不到
// pWnd2 = m_tabVideoControl.GetDlgItem(IDD_DLG_VIDEOLIST);// 得不到
// pWnd2 = pWnd->GetDlgItem(IDC_TREE_VIDEOLIST);// 得不到
}
是否必须切换到treeview那个有树的page才会被创建,否则是销毁的
如何是CTabCtrl类,怎么做?
CCoolTabCtrl类有一内嵌类CPageItem,表示tab页;
CPageItem类有一属性CWnd* m_pWnd,是作为tab页添加进来的CDialog类的指针;
CCoolTabCtrl类增加tab页的方法是
BOOL AddPage(CRuntimeClass* pClass,UINT nIDTemplate,LPCTSTR sText,UINT IconID = NULL);
CPageItem* AddPage(CWnd *pWnd,LPCTSTR sText,UINT IconID = NULL);
所以先通过CPageItem类的实例获取CPageItem类的指针,再将m_pWnd强制转换为窗口类,就可以对窗口类进行操作了。CCoolTabCtrl::CPageItem *pItem;
CDlgVideoList *pDlgVideoList;
pItem = (CCoolTabCtrl::CPageItem *)m_tabVideoControl.GetPageItem(nIndex);
pDlgVideoList = (CDlgVideoList*)pItem->m_pWnd;
pDlgVideoList->AddItem(sVideoName);
'm_pWnd' : cannot access private member declared in class 'CCoolTabCtrl::CPageItem'
see declaration of 'm_pWnd'
我查看了'CCoolTabCtrl::CPageItem'定义如下:
class CPageItem
{
friend class CCoolTabCtrl; CWnd* m_pWnd; ///窗口,可以为NULL
UINT m_nStyle; ///窗口类型,0:普通,1:对话框
CString m_sText; ///文字
HICON m_hIcon; ///图标
public:
CRect m_rect;
public:
UINT GetAreaWidth(CDC *pDC);
void Draw(CDC *pDC,UINT nStyle,BOOL bActive); };
请问如何修改才能调用m_pWnd成员变量,非常感谢。