小弟刚接触VC近日被一个如何取得TAB控件中DIALOG1对话框句柄所困扰,不知道哪位高人能告知如何取得child类型无title
m_TabCtrl.Create(TCS_DOWN | WS_CHILD | WS_VISIBLE,
         CRect(0,0,100,100),
 &m_LeftCtrBar,
 125);
m_TabCtrl.AddPage(RUNTIME_CLASS(CDialog2), IDD_DIALOG2,    "轴系状态");
m_TabCtrl.AddPage(RUNTIME_CLASS(CDialog1),      IDD_DIALOG1,    "坐标系状态");
m_TabCtrl.UpdateWindow();

解决方案 »

  1.   

    CWnd* ??? = GetDlgItem(IDD_DIALOG1);
      

  2.   

    通常的CTabCtrl是不可能有AddPage函数的,所以你肯定是使用别人的自定义类;
    在这种情况下,有两种办法:
    1、别人的自定义类里面肯定有保存每一页的指针链表或数组,所以你可以在别人的自定义类里面添加一个函数,去得到你所要的东东。
    2、每一页肯定是个窗口,所以可以通过枚举窗口的方法:
    先定义一个保存句柄(全局型的)HWND hDialog1,hDialog2;EnumChildWindows(对话框类指针, EnumChildProc, NULL); BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam) 

        int idChild; 
     
        idChild = GetWindowLong(hwndChild, GWL_ID); 
     
        if (idChild == IDD_DIALOG1) 
            hDialog1 = hwndChild; 
        else if (idChild == IDD_DIALOG2) 
            hDialog2 = hwndChild;     return TRUE;
    }
      

  3.   

    有一个问题EnumChildWindows(对话框类指针, EnumChildProc, NULL); 这句里的对话框类指针是指的哪个一个对话框啊?父对话框?我的程序是个SDI一个tab控件上一页的父对话框是谁啊?
      

  4.   

    在外部程序查找窗体句柄的时候用EnumChildWindows较好,如果是你自己的写的程序用EnumChildWindows感觉有点小题大作了,还是看看你用的TabCtrl怎么写的,是用连表/数组或其他方式保存子对话筐的,然后直接取得句柄的好,每次都要遍历不是很浪费时间吗?
      

  5.   

    EnumChildWindows(对话框类指针, EnumChildProc, NULL); 是父对话框的指针