📄 imagetextbutton.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 + -