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);// 得不到
}

解决方案 »

  1.   

    CCoolTabCtrl ?
    是否必须切换到treeview那个有树的page才会被创建,否则是销毁的
      

  2.   

    这需要知道CCoolTabCtrl类是如何管理子窗口的,看看CCoolTabCtrl类中有没有GetPage之类的函数。
      

  3.   

    可以定义一个CDlgVideoList的全局指针
      

  4.   


    如何是CTabCtrl类,怎么做?
      

  5.   

    谢谢2楼的提醒,问题已解决。
    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);
      

  6.   

    正着急用呢,可是当我用(CDlgVideoList*)pItem->m_pWnd时出现错误,提示如下:
    '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成员变量,非常感谢。