rt.怎么把对话框加进去???

解决方案 »

  1.   

    一个CTabCtrl派生类的例子:
    .h文件:
    #if !defined(AFX_ORGTABCTRL_H__0AE4E6FC_7D5E_42B9_AF38_AC457E8D3D07__INCLUDED_)
    #define AFX_ORGTABCTRL_H__0AE4E6FC_7D5E_42B9_AF38_AC457E8D3D07__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // OrgTabCtrl.h : header file
    ///////////////////////////////////////////////////////////////////////////////
    // COrgTabCtrl windowclass COrgTabCtrl : public CTabCtrl
    {
    // Construction
    public:
    COrgTabCtrl();
    CDialog *m_tabPages[3];
    int m_tabCurrent;
    int m_nNumberOfPages;// Attributes
    public:// Operations
    public:
    void ReInit();
    void Init();
    void SetRectangle();
    void SetActive(long index);
    // Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(COrgTabCtrl)
    virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
    protected:
    virtual void PreSubclassWindow();
    //}}AFX_VIRTUAL// Implementation
    public:
    void SelectObject(int level,DWORD nObjectID);
    virtual ~COrgTabCtrl(); // Generated message map functions
    protected:
    //{{AFX_MSG(COrgTabCtrl)
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    //}}AFX_MSG DECLARE_MESSAGE_MAP()
    };
    ///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_ORGTABCTRL_H__0AE4E6FC_7D5E_42B9_AF38_AC457E8D3D07__INCLUDED_)
      

  2.   

    .cpp文件:
    // OrgTabCtrl.cpp : implementation file
    //#include "stdafx.h"
    #include "WorkFlow.h"
    #include "OrgTabCtrl.h"
    #include "GroupInfoDlg.h"
    #include "RoleInfoDlg.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif/////////////////////////////////////////////////////////////////////////////
    // COrgTabCtrlCOrgTabCtrl::COrgTabCtrl()
    {
    m_tabPages[0] = new CGroupInfoDlg;
    m_tabPages[1]= new CRoleInfoDlg; m_nNumberOfPages = 2;
    }COrgTabCtrl::~COrgTabCtrl()
    {
    for(int nCount=0; nCount < m_nNumberOfPages; nCount++){
    delete m_tabPages[nCount];
    }
    }
    void COrgTabCtrl::ReInit()
    {}void COrgTabCtrl::Init()
    {
    m_tabCurrent=0; m_tabPages[0]->Create(IDD_GROUP_INFO, this);
    m_tabPages[1]->Create(IDD_ROLE_INFO, this); m_tabPages[0]->ShowWindow(SW_SHOW);
    m_tabPages[1]->ShowWindow(SW_HIDE);
    SetRectangle();
    }void COrgTabCtrl::SetRectangle()
    {
    CRect tabRect, itemRect;
    int nX, nY, nXc, nYc; GetClientRect(&tabRect);
    GetItemRect(0, &itemRect); //当标签在窗口上方时,用此注释所设置的区域
    nX=itemRect.left;
    nY=itemRect.bottom+1;
    nXc=tabRect.right-itemRect.left-1;
    nYc=tabRect.bottom-nY-1;
    //当标签在底部时,用此处设置的矩形区域
    // nX = tabRect.left;
    // nY = tabRect.top+1;
    // nXc=tabRect.right-itemRect.left-1;
    // nYc = itemRect.top - nY -1;
    //
    for(int nCount=0; nCount < m_nNumberOfPages; nCount++)
    {
    if(nCount == m_tabCurrent)
    m_tabPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);
    else
    m_tabPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
    }
    }BEGIN_MESSAGE_MAP(COrgTabCtrl, CTabCtrl)
    //{{AFX_MSG_MAP(COrgTabCtrl)
    ON_WM_LBUTTONDOWN()
    ON_WM_ERASEBKGND()
    ON_WM_CREATE()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
    // COrgTabCtrl message handlersvoid COrgTabCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // return;
    //鼠标点击无效
    CTabCtrl::OnLButtonDown(nFlags, point); if(m_tabCurrent != GetCurFocus()){
    m_tabPages[m_tabCurrent]->ShowWindow(SW_HIDE);
    m_tabCurrent=GetCurFocus();
    m_tabPages[m_tabCurrent]->ShowWindow(SW_SHOW);
    m_tabPages[m_tabCurrent]->SetFocus();
    SetCurSel(m_tabCurrent);
    }
    }void COrgTabCtrl::SetActive(long index)
    {
    if(index>=m_nNumberOfPages)
    return;
    if(index<0)
    return;
    if(m_tabCurrent == index)
    return;
    for(long i=0;i<m_nNumberOfPages;i++)
    {
    m_tabPages[i]->ShowWindow(SW_HIDE);
    }
    m_tabPages[index]->ShowWindow(SW_SHOW);
    m_tabPages[index]->SetFocus();
    SetCurFocus(index);
    SetCurSel(index);
    m_tabCurrent = index;
    }//目录树中选择了对象 
    //level -- 对象的层次 0为根目录,1为部门,3为角色
    //sObjectID--被选中对象的编号 根目录为0
    void COrgTabCtrl::SelectObject(int level, DWORD nObjectID)
    {
    ((CGroupInfoDlg*)m_tabPages[0])->ReInit(level,nObjectID);
    ((CRoleInfoDlg*)m_tabPages[1])->ReInit(level,nObjectID);
    if(level == 0 || level == 1 || level == 3)
    SetActive(0);
    else
    SetActive(1);
    }BOOL COrgTabCtrl::OnEraseBkgnd(CDC* pDC) 
    {
    CRect rc;
    GetClientRect(rc);
    pDC->FillSolidRect(rc,COLOR_BACKCOLOR);
    return true;
    }int COrgTabCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    if (CTabCtrl::OnCreate(lpCreateStruct) == -1) return -1;
    ModifyStyle(0, TCS_OWNERDRAWFIXED);

    return 0;
    }void COrgTabCtrl::PreSubclassWindow() 
    {
    CTabCtrl::PreSubclassWindow();
    ModifyStyle(0, TCS_OWNERDRAWFIXED);
    }void COrgTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
    {
    CRect rect = lpDrawItemStruct->rcItem;
    int nTabIndex = lpDrawItemStruct->itemID;
    if (nTabIndex < 0) return;
    BOOL bSelected = (nTabIndex == GetCurSel()); char label[64];
    TC_ITEM tci;
    tci.mask = TCIF_TEXT|TCIF_IMAGE;
    tci.pszText = label;     
    tci.cchTextMax = 63;    
    if (!GetItem(nTabIndex, &tci )) return; CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
    if (!pDC) return;
    int nSavedDC = pDC->SaveDC(); // For some bizarre reason the rcItem you get extends above the actual
    // drawing area. We have to workaround this "feature".
    rect.top += ::GetSystemMetrics(SM_CYEDGE); pDC->SetBkMode(TRANSPARENT);
    pDC->FillSolidRect(rect, ::GetSysColor(COLOR_BTNFACE)); // Draw image
    CImageList* pImageList = GetImageList();
    if (pImageList && tci.iImage >= 0) { rect.left += pDC->GetTextExtent(_T(" ")).cx; // Margin // Get height of image so we 
    IMAGEINFO info;
    pImageList->GetImageInfo(tci.iImage, &info);
    CRect ImageRect(info.rcImage);
    int nYpos = rect.top; pImageList->Draw(pDC, tci.iImage, CPoint(rect.left, nYpos), ILD_TRANSPARENT);
    rect.left += ImageRect.Width();
    }
    if (bSelected) {
    pDC->SetTextColor(COLOR_BLUE);
    rect.top -= ::GetSystemMetrics(SM_CYEDGE);
    pDC->FillSolidRect(rect,COLOR_TABCOLOR);
    pDC->DrawText(label, rect, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
    } else {
    pDC->SetTextColor(COLOR_PURPLE);
    pDC->FillSolidRect(rect,COLOR_TABCOLOR);
    /* HICON hIcon = AfxGetApp()->LoadIcon(IDI_ROLE);
    ::DrawIconEx(pDC->m_hDC, 
     rect.left, 
     rect.top, 
     hIcon, 
     16, 16, 0, 
       NULL, 
     DI_NORMAL);
    */
    pDC->DrawText(label, rect, DT_SINGLELINE|DT_BOTTOM|DT_CENTER);
    } pDC->RestoreDC(nSavedDC);
    }
      

  3.   

    朋友,这里有你想要学习的东西:
    http://www.vckbase.com/document/viewdoc.asp?id=398
      

  4.   

    CDialog  dlg1;
    CDialog  dlg2;
    CTabCtrl m_tab;
    TCITEM item;
    item.mask = TCIF_TEXT;
    item.pszText = "name1";
    m_tab1.InsertItem (0,&item);
    item.pszText = "name2";
    m_tab1.InsertItem (1,&item);
    CRect r;
    m_tab.GetClientRect (&r);
    //显示
    dlg1.SetWindowPos (NULL,0,20,r.right -5,r.bottom -20,SWP_SHOWWINDOW);
    dlg2.SetWindowPos (NULL,0,20,r.right -5,r.bottom -20,SWP_HIDEWINDOW ); 
    //控制在OnSelchangeTab事件中加入CRect r;
    m_tab1.GetClientRect (&r);
    switch(m_tab1.GetCurSel())
    {
    case 0:
    tabdialog1.SetWindowPos (NULL,0,25,r.right ,r.bottom -20,SWP_SHOWWINDOW);
    tabdialog2.SetWindowPos (NULL,0,25,r.right ,r.bottom -20,SWP_HIDEWINDOW ); 
    tabdialog3.SetWindowPos (NULL,0,25,r.right ,r.bottom -20,SWP_HIDEWINDOW ); 
    break;
    case 1:
    tabdialog1.SetWindowPos (NULL,0,25,r.right,r.bottom -20,SWP_HIDEWINDOW);
    tabdialog2.SetWindowPos (NULL,0,25,r.right ,r.bottom -20,SWP_SHOWWINDOW ); 
    tabdialog3.SetWindowPos (NULL,0,25,r.right ,r.bottom -20,SWP_HIDEWINDOW ); 
    break;dlg1.Create(IDD_DIALOG1,&m_tab);
    dlg2.Create(IDD_DIALOG2,&m_tab);