⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imagetextbutton.cpp

📁 离线的RSS阅读器
💻 CPP
字号:
// ImageTextButton.cpp : implementation file
//

#include "stdafx.h"
#include "DiamondReader.h"
#include "ImageTextButton.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CImageTextButton

CImageTextButton::CImageTextButton()
{
	m_click = false;
	m_mousein = false;
}

CImageTextButton::~CImageTextButton()
{
	delete[] text;
}

CImageTextButton::CImageTextButton(LPTSTR imagePath,LPTSTR buttonText,CSize imageSize,COLORREF rgbin,COLORREF rgbnot,COLORREF rgbClick){
	m_click = false;
	m_mousein = false;
	HBITMAP h = (HBITMAP)::LoadImage(NULL,imagePath,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
	bmp.Attach(h);
	text = new char[255];
	strcpy(text,buttonText);
	m_imageSize = imageSize;
	m_rgb_in = rgbin;
	m_rgb_not = rgbnot;
	m_rgb_click = rgbClick;
	
}

BEGIN_MESSAGE_MAP(CImageTextButton, CButton)
	//{{AFX_MSG_MAP(CImageTextButton)
	ON_WM_DRAWITEM()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONDOWN()
	ON_WM_ERASEBKGND()
	ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)
	ON_WM_LBUTTONUP()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CImageTextButton message handlers

void CImageTextButton::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	// TODO: Add your message handler code here and/or call default

// 	CDC dcMem;
// 	CDC *pDc = CDC::FromHandle(lpDrawItemStruct->hDC);
// 	dcMem.CreateCompatibleDC(pDc);
// 	CBitmap* pOldBitmap = dcMem.SelectObject(&bmp);
// 	CRect rect;
// 	GetClientRect(&rect);
// 	pDc->BitBlt(0,0,rect.right,rect.bottom,&dcMem,0,0,SRCCOPY);
// 	dcMem.SelectObject(pOldBitmap);
	
	CButton::OnDrawItem(nIDCtl, lpDrawItemStruct);
}

void CImageTextButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	// TODO: Add your code to draw the specified item
	CDC dcMem;
	CDC *pDc = CDC::FromHandle(lpDrawItemStruct->hDC);
	dcMem.CreateCompatibleDC(pDc);
	CBitmap* pOldBitmap = dcMem.SelectObject(&bmp);
	CRect rect;
	GetClientRect(&rect);
	
	rect.left = rect.left+m_imageSize.cx+5;
	pDc->BitBlt(3,3,m_imageSize.cx,m_imageSize.cy,&dcMem,0,0,SRCCOPY);
	rect.top = rect.top+5;
	LOGFONT lf;
	memset(&lf,0,sizeof(LOGFONT));
	lf.lfHeight = 13;
	strcpy(lf.lfFaceName,"宋体");
	CFont cf;
	cf.CreateFontIndirect(&lf);
	CFont *old = pDc->SelectObject(&cf);
	pDc->SetBkMode(TRANSPARENT);
	pDc->DrawText(text,&rect,DT_LEFT);
	pDc->SelectObject(old->m_hObject);
	dcMem.SelectObject(pOldBitmap);
	UINT nState = lpDrawItemStruct->itemState; 
	if(nState & ODS_SELECTED) 
		{ 
			GetClientRect(&rect);
			pDc->Draw3dRect(&rect,RGB(10,36,106),RGB(255,255,255));
		} 
	else if (nState & ODS_DISABLED)
	{
// 		GetClientRect(&rect);
// 		pDc->Draw3dRect(&rect,RGB(10,36,106),RGB(10,36,106));
	}
}

void CImageTextButton::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_mousein = true;
	this->Invalidate();
	TRACKMOUSEEVENT tme;
	tme.cbSize = sizeof(tme);
	tme.hwndTrack = m_hWnd;
	tme.dwFlags = TME_LEAVE;
	_TrackMouseEvent(&tme);
	CButton::OnMouseMove(nFlags, point);
}

BOOL CImageTextButton::OnEraseBkgnd(CDC* pDC){
	CRect   rect;   
	//pDC->GetClipBox(&rect);   
	this->GetClientRect(&rect);
	CBrush *brush;   
	if (m_mousein)
	{
		if (m_click)
		{
			brush = new CBrush(m_rgb_click);
		}
		else{
			brush = new CBrush(m_rgb_in);
		}
	}
	else{
		brush = new CBrush(m_rgb_not);
	}
	CBrush* pOldBrush=pDC->SelectObject(brush);   
	pDC->PatBlt(rect.left,rect.top,rect.Width(),rect.Height(),PATCOPY);   
	if (m_mousein&&!m_click)
	{
		GetClientRect(&rect);
		pDC->Draw3dRect(&rect,RGB(255,255,255),RGB(10,36,106));
	}
	if (!m_mousein)
	{
		GetClientRect(&rect);
		//pDC->Draw3dRect(&rect,RGB(10,36,106),RGB(10,36,106));
	}
	pDC->SelectObject(pOldBrush); 
	delete brush;
	return true;
}

LPARAM CImageTextButton::OnMouseLeave(WPARAM wp, LPARAM lp){
	m_mousein = false;
	this->Invalidate();
	return 0;
}

void CImageTextButton::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_click = true;
	this->Invalidate();
	CButton::OnLButtonDown(nFlags, point);
}

void CImageTextButton::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_click = false;
	this->Invalidate();
	CButton::OnLButtonUp(nFlags, point);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -