TabCtrl怎么用啊~~ rt.怎么把对话框加进去??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一个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{// Constructionpublic: COrgTabCtrl(); CDialog *m_tabPages[3]; int m_tabCurrent; int m_nNumberOfPages;// Attributespublic:// Operationspublic: 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// Implementationpublic: void SelectObject(int level,DWORD nObjectID); virtual ~COrgTabCtrl(); // Generated message map functionsprotected: //{{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_) .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_FILEstatic 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_MAPEND_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--被选中对象的编号 根目录为0void 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);} 朋友,这里有你想要学习的东西:http://www.vckbase.com/document/viewdoc.asp?id=398 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); 刚看新闻联播,说威客网的。。。都有些什么威客网站啊? 基于对话框的mfc工程调用动态链接库问题 期待串口方面的高手解决..EscapeCommFunction()问题. 急:不能卸载VS.net 2005 beta2 怎样在WINDOWS下接收中文!!!(WM_CHAR ) 如何在CChildView里显示文字。 谁 用过! 以下的服务器网卡。。 Help!如何通过传统方式创建Button 如何作报表数据库应用程序 如何在对话框上画图 实现IcontextMenu的com(shell扩展)怎么替换弹出菜单? 如何获得一个cab文件的版本号?谢谢!
.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_)
// 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);
}
http://www.vckbase.com/document/viewdoc.asp?id=398
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);