TabCtrl怎么用啊~~

狂放之歌 2004-04-05 04:48:47
rt.怎么把对话框加进去???
...全文
190 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangjinbao 2004-05-14
  • 打赏
  • 举报
回复
gz
muxinqionghuo1980 2004-04-05
  • 打赏
  • 举报
回复
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);




vollin 2004-04-05
  • 打赏
  • 举报
回复
朋友,这里有你想要学习的东西:
http://www.vckbase.com/document/viewdoc.asp?id=398
快乐鹦鹉 2004-04-05
  • 打赏
  • 举报
回复
.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

/////////////////////////////////////////////////////////////////////////////
// COrgTabCtrl

COrgTabCtrl::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 handlers

void 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);
}
快乐鹦鹉 2004-04-05
  • 打赏
  • 举报
回复
一个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 window

class 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_)
狂放之歌 2004-04-05
  • 打赏
  • 举报
回复
3q
看的头都晕了...~~
正在看,看懂了结帖.

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧