// GraphMember.cpp: implementation of the CTaskItem class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Clb.h"
#include "GraphMember.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// CTaskFrame Class
//////////////////////////////////////////////////////////////////////
CTaskFrame::CTaskFrame(const CString& title)
: m_rSize(CRect(0, 0, 0, 0)), m_strTitle(title)
{
m_FrmColor = RGB(203, 203, 203);
m_BKColor = RGB(255, 255, 255);
LOGFONT logFont;
logFont.lfHeight = 12;
logFont.lfEscapement = 0;
logFont.lfOrientation = 0;
logFont.lfWeight = FW_BOLD;
logFont.lfItalic = FALSE;
logFont.lfUnderline = FALSE;
logFont.lfStrikeOut = FALSE;
logFont.lfOutPrecision = OUT_STROKE_PRECIS;
logFont.lfClipPrecision = CLIP_STROKE_PRECIS;
logFont.lfQuality = DEFAULT_QUALITY;
logFont.lfPitchAndFamily = VARIABLE_PITCH|FF_MODERN;
logFont.lfCharSet = GB2312_CHARSET;
strcpy(logFont.lfFaceName, "宋体");
m_Font.CreateFontIndirect(&logFont);
m_nTitleHeight = 28;
m_nLeftMargin = 10;
m_nRightMargin = 10;
m_nTopMargin = 4;
m_nBottomMargin = 5;
}
CTaskFrame::~CTaskFrame()
{
}
CRect CTaskFrame::GetWorkRect() const
{
CRect rect(m_rSize);
rect.top = m_nTopMargin + m_nTitleHeight;
rect.left = m_nLeftMargin;
rect.right -= m_nRightMargin;
rect.bottom -= m_nBottomMargin;
return rect;
}
void CTaskFrame::Draw(CDC* pDC)
{
CRect rect(m_rSize);
CBrush brush;
brush.CreateSolidBrush(m_BKColor);
pDC->FillRect(&rect, &brush);
brush.DeleteObject();
rect.bottom = m_nTitleHeight;
brush.CreateSolidBrush(m_FrmColor);
pDC->FillRect(&rect, &brush);
brush.DeleteObject();
LOGBRUSH logBrush = { BS_NULL, NULL, NULL };
brush.CreateBrushIndirect(&logBrush);
CPen pen;
pen.CreatePen(PS_SOLID, 1, m_FrmColor);
CBrush* pOldBrush = pDC->SelectObject(&brush);
CPen* pOldPen = pDC->SelectObject(&pen);
pDC->Rectangle(&m_rSize);
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldBrush);
CFont* pOldFont = pDC->SelectObject(&m_Font);
pDC->SetBkMode(TRANSPARENT);
pDC->TextOut(6, (m_nTitleHeight - 12) / 2, m_strTitle.Left(14));
pDC->SetBkMode(OPAQUE);
pDC->SelectObject(pOldFont);
}
//////////////////////////////////////////////////////////////////////
// CIconBtn Class
//////////////////////////////////////////////////////////////////////
CIconBtn::CIconBtn()
: m_rSize(CRect(0, 0, 0, 0)), m_bFocusedState(false)
{
}
CIconBtn::~CIconBtn()
{
}
void CIconBtn::SetFocusedState(bool bFocused)
{
m_bFocusedState = bFocused;
Draw();
}
//////////////////////////////////////////////////////////////////////
// CPuckerBtn Class
//////////////////////////////////////////////////////////////////////
CPuckerBtn::CPuckerBtn(CWnd* pWnd)
: m_pWnd(pWnd), m_bPressState(false)
{
}
CPuckerBtn::~CPuckerBtn()
{
}
void CPuckerBtn::Draw()
{
if(m_pWnd == NULL)
return;
CDC* pDC = m_pWnd->GetDC();
CBrush brush;
brush.CreateSolidBrush(RGB(203, 203, 203));
CRect rectFill(m_rSize);
rectFill.bottom += 1;
rectFill.right += 1;
pDC->FillRect(&rectFill, &brush);
brush.DeleteObject();
CRect rect(m_rSize);
if(GetFocusedState())
{
CPen pen;
pen.CreatePen(PS_SOLID, 1, RGB(255, 255, 255));
CPen* pOldPen = pDC->SelectObject(&pen);
pDC->MoveTo(rect.left, rect.top);
pDC->LineTo(rect.right, rect.top);
pDC->MoveTo(rect.left, rect.top);
pDC->LineTo(rect.left, rect.bottom);
pDC->SelectObject(pOldPen);
pDC->MoveTo(rect.left, rect.bottom);
pDC->LineTo(rect.right, rect.bottom);
pDC->MoveTo(rect.right, rect.top);
pDC->LineTo(rect.right, rect.bottom);
}
CPoint point = rect.CenterPoint();
if(!m_bPressState)
{
pDC->MoveTo(point.x, point.y - 1);
pDC->LineTo(point.x + 4, point.y - 5);
pDC->MoveTo(point.x, point.y - 1);
pDC->LineTo(point.x - 4, point.y - 5);
pDC->MoveTo(point.x, point.y + 3);
pDC->LineTo(point.x + 4, point.y - 1);
pDC->MoveTo(point.x, point.y + 3);
pDC->LineTo(point.x - 4, point.y - 1);
}
else
{
pDC->MoveTo(point.x, point.y - 4);
pDC->LineTo(point.x + 4, point.y);
pDC->MoveTo(point.x, point.y - 4);
pDC->LineTo(point.x - 4, point.y);
pDC->MoveTo(point.x, point.y);
pDC->LineTo(point.x + 4, point.y + 4);
pDC->MoveTo(point.x, point.y);
pDC->LineTo(point.x - 4, point.y + 4);
}
}
void CPuckerBtn::Click()
{
m_bPressState = !m_bPressState;
if(m_pWnd == NULL)
return;
Draw();
if(m_bPressState)
{
if(m_pWnd == NULL)
return;
m_pWnd->GetWindowRect(&m_wndRect);
m_pWnd->GetParent()->ScreenToClient(&m_wndRect);
CRect rect(m_wndRect);
rect.bottom = rect.top + 28;
DWORD dwStyle = m_pWnd->GetExStyle();
DWORD dwNewStyle = WS_EX_DLGMODALFRAME|WS_EX_CLIENTEDGE;
if((dwStyle & dwNewStyle) == dwNewStyle)
{
rect.bottom += 10;
}
else if((dwStyle & WS_EX_CLIENTEDGE) == WS_EX_CLIENTEDGE)
{
rect.bottom += 4;
}
else if((dwStyle & WS_EX_DLGMODALFRAME) == WS_EX_DLGMODALFRAME)
{
rect.bottom += 6;
}
else if((dwStyle & WS_EX_STATICEDGE) == WS_EX_STATICEDGE)
{
rect.bottom += 2;
}
m_pWnd->MoveWindow(&rect);
}
else
m_pWnd->MoveWindow(&m_wndRect);
}
/////////////////////////////////////////////////////////////////////
// CItem Class
//////////////////////////////////////////////////////////////////////
CItem::CItem()
: m_pWnd(NULL), m_nCtrlId(NULL)
{
}
CItem::CItem(CWnd* pWnd, UINT id)
: m_pWnd(pWnd), m_nCtrlId(id)
{
}
CItem::~CItem()
{
}
void CItem::SetItem(const ItemInfo& item)
{
if(item.type < II_ICONTEXT || item.type > II_COLOR)
{
m_ItemInfo.type = -1;
return;
}
m_ItemInfo.type = item.type;
m_ItemInfo.index = item.index;
m_ItemInfo.text = item.text;
m_ItemInfo.color = item.color;
m_ItemInfo.icon = CopyIcon(item.icon);
}
//////////////////////////////////////////////////////////////////////
// CTaskItem Class
//////////////////////////////////////////////////////////////////////
CTaskItem::CTaskItem(CWnd* pWnd, UINT id)
: CItem(pWnd, id)
{
m_LogFont.lfHeight = 12;
m_LogFont.lfEscapement = 0;
m_LogFont.lfOrientation = 0;
m_LogFont.lfWeight = FW_NORMAL;
m_LogFont.lfItalic = FALSE;
m_LogFont.lfUnderline = FALSE;
m_LogFont.lfStrikeOut = FALSE;
m_LogFont.lfOutPrecision = OUT_STROKE_PRECIS;
m_LogFont.lfClipPrecision = CLIP_STROKE_PRECIS;
m_LogFont.lfQuality = DEFAULT_QUALITY;
m_LogFont.lfPitchAndFamily = VARIABLE_PITCH|FF_MODERN;
m_LogFont.lfCharSet = GB2312_CHARSET;
strcpy(m_LogFont.lfFaceName, "宋体");
m_Font.CreateFontIndirect(&m_LogFont);
}
CTaskItem::CTaskItem(const CTaskItem& rhs)
{
CItem::operator=(rhs);
m_LogFont = rhs.m_LogFont;
m_Font.CreateFontIndirect(&m_LogFont);
}
CItem* CTaskItem::Clone()
{
return new CTaskItem(*this);
}
CTaskItem::~CTaskItem()
{
}
void CTaskItem::Draw()
{
if(m_ItemInfo.type != II_ICONTEXT)
return;
if(m_pWnd == NULL)
return;
CDC* pDC = m_pWnd->GetDC();
HDC hdc = pDC->m_hDC;
CRect rect(m_rSize);
COLORREF cl = GetFocusedState() ? RGB(128, 255, 255) : RGB(255, 255, 255);
CBrush brush;
brush.CreateSolidBrush(cl);
pDC->FillRect(&rect, &brush);
brush.DeleteObject();
DrawIconEx(hdc, m_rSize.left, m_rSize.top, m_ItemInfo.icon, 16, 16, NULL, NULL, DI_NORMAL);
CFont* pOldFont = pDC->SelectObject(&m_Font);
pDC->SetBkMode(TRANSPARENT);
TEXTMETRIC tm;
GetTextMetrics(hdc, &tm);
int max_len = (rect.Width() - 16 - 5) / tm.tmAveCharWidth;
pDC->TextOut(rect.left + 16 + 5, rect.top + 2, m_ItemInfo.text.Left(max_len));
pDC->SetBkMode(OPAQU
没有合适的资源?快使用搜索试试~ 我知道了~
一个可折叠的VC++自定义列表控件
共34个文件
ico:12个
h:7个
cpp:6个
4星 · 超过85%的资源 需积分: 34 97 下载量 47 浏览量
2010-09-04
17:27:27
上传
评论 1
收藏 39KB RAR 举报
温馨提示
一个可折叠的VC++自定义列表控件 一款VC++自定义的列表控件,可以展开、折叠。 WINDOWS应用程序的创建一般都需要使用控件,像VB、DELPHI等编程环境都提供了相当多的控件供程序员调用,这些控件基本上能满足程序开发的要求,但有时也会有些不尽如意的地方,因此学会创建自定义控件有一定的重要性。本程序实现了一个可以折叠、可以更换成员类型的特效列表控件。
资源推荐
资源详情
资源评论
收起资源包目录
xpCLB.rar (34个子文件)
codefans.net
CLB
StdAfx.cpp 205B
resource.h 1KB
Clb.h 1KB
GraphMember.h 3KB
Clb.dsp 5KB
Clb.dsw 529B
Clb.ncb 65KB
Clb.plg 2KB
TaskList.h 648B
TaskList.cpp 4KB
StdAfx.h 1KB
Clb.rc 6KB
TaskListBox.h 853B
ClbDlg.cpp 4KB
ClbDlg.h 1KB
TaskListBox.cpp 2KB
Clb.opt 54KB
res
NOTE06.ICO 1KB
icon2.ico 1KB
BOOK02.ICO 1KB
BINOCULR.ICO 1KB
NOTE18.ICO 1KB
BOOKS04.ICO 1KB
BOOK03.ICO 1KB
Clb.ico 1KB
Clb.rc2 395B
EARTH.ICO 1KB
Thumbs.db 19KB
toolbar1.bmp 1KB
TRFFC10A.ICO 1KB
SNOW.ICO 1KB
CLOCK06.ICO 766B
Clb.cpp 1KB
GraphMember.cpp 9KB
共 34 条
- 1
资源评论
- zhiqiang_pobo2012-08-13功能很强,很好很强大。谢谢分享
- shamrock3462013-01-17用着还可以,谢谢分享
- 子弹头儿2014-02-14没有那么强大,谢谢分享
- mymodian2014-04-19不是CListCtl也不是GridCtrl,不太实用
- lfaiym2013-12-08根本就不是clistctrl。
mirage1982
- 粉丝: 59
- 资源: 1049
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功