/*#############################################################################
# VISUALFX.CPP
#
# SCA Software International S.A.
# http://www.scasoftware.com
# scaadmin@scasoftware.com
#
# Copyright (c) 1999 SCA Software International S.A.
#
# Date: 03.01.2000
# Author: Zoran M.Todorovic
#
# This software is provided "AS IS", without a warranty of any kind.
# You are free to use/modify this code but leave this header intact.
#
# Updates:
#
# 14.01.2000 - Courtesy of Frederic Guillet (www.codeproject.com)
# Added optional 16x16 icons to tabs
#
#############################################################################*/
#include "stdafx.h"
#include <afxpriv.h> // Needed for WM_SIZEPARENT
#include "VisualFx.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
//=============================================================================
// class TTabItem
//
//=============================================================================
// Create a tab item
TTabItem::TTabItem(CWnd *pParent, LPCTSTR szLabel, HICON hIcon)
{
m_pWnd = NULL;
m_nMinX = m_nMaxX = 0;
m_bVisible = TRUE;
m_bEnabled = TRUE;
m_bWndEnabled = TRUE;
m_hIcon = hIcon;
RECT rect;
::ZeroMemory(&rect,sizeof(RECT));
m_pCaption = new CStatic;
ASSERT(m_pCaption);
m_pCaption->Create(szLabel, WS_CHILD|SS_CENTER|WS_VISIBLE,rect,pParent);
}
TTabItem::TTabItem(const TTabItem& obj)
{
*this = obj;
}
TTabItem& TTabItem::operator=(const TTabItem& obj)
{
m_pWnd = obj.m_pWnd;
m_pCaption = obj.m_pCaption;
m_bWndEnabled = obj.m_bWndEnabled;
m_bEnabled = obj.m_bEnabled;
m_bVisible = obj.m_bVisible;
m_nMinX = obj.m_nMinX;
m_nMaxX = obj.m_nMaxX;
return *this;
}
TTabItem::~TTabItem()
{
// This is done in TVisualFramework::Destroy()
//if (m_pWnd->IsKindOf(RUNTIME_CLASS(CSplitterWnd)))
// delete m_pWnd;
ASSERT(m_pCaption);
delete m_pCaption;
}
// Set rectangle for tab caption
void TTabItem::SetRect(CRect& rect)
{
ASSERT(m_pCaption);
m_pCaption->MoveWindow(&rect);
}
// Set font for tab caption
void TTabItem::SetFont(CFont *pFont)
{
ASSERT(m_pCaption);
ASSERT(pFont);
m_pCaption->SetFont(pFont,FALSE);
}
// Set icon handle for this tab
void TTabItem::SetIcon(HICON hIcon)
{
m_hIcon = hIcon;
}
// Get tab caption text
CString TTabItem::GetText(void)
{
ASSERT(m_pCaption);
CString str;
m_pCaption->GetWindowText(str);
return str;
}
int TTabItem::GetLength(void)
{
return m_nMaxX - m_nMinX;
}
// Set tab caption text
void TTabItem::SetText(LPCTSTR szLabel)
{
ASSERT(m_pCaption);
ASSERT(szLabel);
m_pCaption->SetWindowText(szLabel);
}
// Enable/disable a window
void TTabItem::Enable(BOOL bEnable)
{
m_bWndEnabled = bEnable;
}
// Enable/disable tab caption
void TTabItem::EnableTab(BOOL bEnable)
{
ASSERT(m_pCaption);
m_bEnabled = bEnable;
m_pCaption->EnableWindow(m_bEnabled);
}
// Show/hide tab caption
void TTabItem::ShowTab(BOOL bShow)
{
ASSERT(m_pCaption);
m_bVisible = bShow;
m_pCaption->ShowWindow(bShow ? SW_SHOW : SW_HIDE);
}
CWnd *TTabItem::GetSafeWnd(void)
{
return (m_pWnd && ::IsWindow(m_pWnd->m_hWnd)) ? m_pWnd : NULL;
}
//=============================================================================
// class TTabWnd
//
//=============================================================================
#define TABWND_DEFAULT_ID 0x2578
#define TABWND_HEIGHT 30 // Height of the gray border between the toolbar
// and the client area
#define TAB_HEIGHT 20 // Height on the normal tab
#define TABSEL_HEIGHT 20 // Height of the selected tab
#define TAB_SPACE 6 // Add to tab caption text width
#define TAB_DEPL 4 // Distance between the tabs and the client area
#define TAB_MAXLEN 200
#define TAB_ICON 16
#define TAB_ICON_X 2
#define TAB_ICON_Y 2
IMPLEMENT_DYNCREATE(TTabWnd,CWnd)
BEGIN_MESSAGE_MAP(TTabWnd, CWnd)
//{{AFX_MSG_MAP(TTabWnd)
ON_MESSAGE(WM_SIZEPARENT, OnSizeParent)
ON_WM_ERASEBKGND()
ON_WM_PAINT()
ON_WM_LBUTTONUP()
ON_WM_DESTROY()
ON_WM_SIZE()
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
TTabWnd::TTabWnd()
{
m_nSelectedTab = 0;
m_bLockFlag = FALSE;
m_nTabPos = TP_BOTTOM;
// cache most used resources
m_BrushBlack.CreateSolidBrush(RGB(0,0,0));
m_BrushLGray.CreateSolidBrush(::GetSysColor(COLOR_BTNFACE));
m_PenBlack.CreatePen(PS_SOLID, 1, (COLORREF)0);
m_PenLGray.CreatePen(PS_SOLID, 1, ::GetSysColor(COLOR_BTNFACE));
m_PenWhite.CreatePen(PS_SOLID, 1, ::GetSysColor(COLOR_BTNHIGHLIGHT));
m_PenWhite2.CreatePen(PS_SOLID, 2, ::GetSysColor(COLOR_BTNHIGHLIGHT));
m_PenDGray.CreatePen(PS_SOLID, 1, ::GetSysColor(COLOR_BTNSHADOW));
m_PenDGray2.CreatePen(PS_SOLID, 2, ::GetSysColor(COLOR_BTNSHADOW));
}
TTabWnd::~TTabWnd()
{
}
// Find a tab within this tab window
TTabItem *TTabWnd::findTabItem(int nIndex)
{
int nNdx = 0;
TTabItemList::iterator iterator;
for (iterator = m_TabList.begin(); iterator != m_TabList.end(); iterator++) {
if (nNdx == nIndex)
return (*iterator);
nNdx ++;
}
return NULL;
}
// Create a tab window
BOOL TTabWnd::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName,
DWORD dwStyle, const RECT& prect, CWnd* pParentWnd,
UINT nID, CCreateContext *pContext)
{
ASSERT(pParentWnd);
dwStyle &= ~WS_BORDER;
CRect rect(prect);
if (!CWnd::Create(NULL, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext))
return FALSE;
if (pParentWnd->IsKindOf(RUNTIME_CLASS(CFrameWnd))) {
((CFrameWnd*)pParentWnd)->ModifyStyleEx(WS_EX_CLIENTEDGE,0,SWP_FRAMECHANGED);
((CFrameWnd*)pParentWnd)->RecalcLayout();
}
ResizeTab();
return TRUE;
}
int TTabWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
createFont();
return 0;
}
void TTabWnd::OnDestroy()
{
CWnd::OnDestroy();
TTabItemList::iterator iterator;
for (iterator = m_TabList.begin(); iterator != m_TabList.end(); iterator ++) {
delete (*iterator);
}
m_TabList.clear();
// This is done in TVisualFramework
//if (GetParent()->IsKindOf(RUNTIME_CLASS(CSplitterWnd)))
// delete this;
}
// Virtual function to check whether switch to new tab can be done
BOOL TTabWnd::CanSetActivePane(CWnd *pOldPane, CWnd *pNewPane)
{
return TRUE;
}
// Virtual function (after the switch is done)
void TTabWnd::OnSetActivePane(CWnd *pOldPane, CWnd *pNewPane)
{
}
// Create fonts for tab labels
void TTabWnd::createFont()
{
NONCLIENTMETRICS metrics;
metrics.cbSize = sizeof(metrics);
::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &metrics, 0);
CWindowDC wdc(NULL);
int nLPixY = GetDeviceCaps(wdc.m_hDC, LOGPIXELSY);
m_Font.CreateFontIndirect(&metrics.lfStatusFont);
}
// Add a tab to this window
TTabItem *TTabWnd::addTab(CWnd *pWnd, LPCTSTR szLabel)
{
ASSERT(pWnd);
ASSERT(szLabel);
TTabItem *pItem = new TTabItem(this,szLabel);
pItem->m_pWnd = pWnd;
m_TabList.insert(m_TabList.end(), pItem);
return pItem;
}
int TTabWnd::GetTabLength()
{
int nLength = 0;
TTabItemList::iterator iterator;
for (iterator = m_TabList.begin(); iterator != m_TabList.end(); iterator++) {
nLength += (*iterator)->GetLength();
}
return nLength;
}
// Get index of currently selected tab
int TTabWnd::GetTabIndex(void)
{
return m_nSelectedTab;
}
// Get number of tabs
int TTabWnd::GetTabCount(void)
{
return m_TabList.size();
}
// Get index of the tab associated with specified window
int TTabWnd::GetTabIndex(CWnd *pWnd)
{
ASSERT(pWnd);
int nIndex = 0;
TTabItem
没有合适的资源?快使用搜索试试~ 我知道了~
VC 布局,拆分窗口,TAB选页的源代码例子
共38个文件
h:13个
cpp:12个
ico:3个
4星 · 超过85%的资源 需积分: 9 77 下载量 151 浏览量
2010-01-26
11:14:09
上传
评论 1
收藏 89KB RAR 举报
温馨提示
记得好像是在CODEPROJECT上下载的。。 挺好用的,功能还比较强大
资源推荐
资源详情
资源评论
收起资源包目录
VisualFxSdi_demo.rar (38个子文件)
VisualFxSdi_demo
TabWnd.ncb 105KB
DummyList.h 2KB
DummyEdit.cpp 1KB
TabWnd.dsw 535B
StdAfx.cpp 208B
TabWndDoc.h 1KB
新建文件夹
resource.h 1KB
TabWnd.rc 14KB
TabWndDoc.cpp 2KB
DummyTree.cpp 2KB
TabWnd.h 1KB
TabWnd.cpp 4KB
FrameworkProperties.cpp 4KB
TabWndView.cpp 3KB
DummyList.cpp 3KB
TabWndView.h 2KB
TabWnd.dsp 6KB
MainFrm.h 2KB
DummySplitter.h 1KB
TabWnd.aps 34KB
DummyEdit.h 1KB
StdAfx.h 1021B
TabWnd.clw 4KB
MainFrm.cpp 12KB
TabWnd.opt 91KB
DummyForm.h 2KB
res
TabWnd.ico 1KB
TabWndDoc.ico 1KB
Toolbar.bmp 1KB
TabWnd.rc2 398B
icon1.ico 1KB
VisualFx.cpp 65KB
DummyForm.cpp 2KB
TabWnd.plg 1KB
DummyTree.h 2KB
FrameworkProperties.h 2KB
DummySplitter.cpp 821B
VisualFx.h 15KB
共 38 条
- 1
king55240470
- 粉丝: 5
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页