#pragma once
#include "afxwin.h"
#define BTN_WIDTH 36
#define BTN_HIGHT 36
class CSplitButton :public CButton
{
public:
CSplitButton(void);
~CSplitButton(void);
void LoadImg(const char* strPath);
void selectBtn(bool bselect);
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
private:
CBitmap m_bmpImg;
bool m_bselect;
};
#include "StdAfx.h"
#include "SplitButton.h"
CSplitButton::CSplitButton(void):m_bselect(false)
{
}
CSplitButton::~CSplitButton(void)
{
m_bmpImg.DeleteObject();
}
void CSplitButton::LoadImg(const char* strPath)
{
HBITMAP hBitmap =(HBITMAP)::LoadImage(
NULL,
strPath, // 图片全路径
IMAGE_BITMAP, // 图片格式
0,0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);
m_bmpImg.Attach(hBitmap);
}
void CSplitButton::selectBtn(bool bselect)
{
m_bselect = bselect;
Invalidate();
}
void CSplitButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: 添加您的代码以绘制指定项
CRect lRect;
GetClientRect(&lRect);
CDC dc;
dc.Attach(lpDrawItemStruct->hDC); //得到设备环境类CDC
if (m_bselect/*lpDrawItemStruct->itemState & ODS_SELECTED*/)
{
COLORREF DownColor = RGB(209,208,208);
CBrush brush(DownColor);
dc.FillRect(&(lpDrawItemStruct->rcItem), &brush);
}
else
{
COLORREF DownColor = RGB(239,239,239);
CBrush brush(DownColor);
dc.FillRect(&(lpDrawItemStruct->rcItem), &brush);
}
CDC dcMem;
dcMem.CreateCompatibleDC(&dc); //内存
//位图加载到内存dc中
CBitmap *pOldBitmap=dcMem.SelectObject(&m_bmpImg);
BITMAP bmp;
m_bmpImg.GetBitmap(&bmp); //获取位图信息
int x = (lRect.Width() - bmp.bmWidth)/2;
int y = (lRect.Height() - bmp.bmHeight)/2;
dc.StretchBlt(x,y,bmp.bmWidth,bmp.bmHeight,&dcMem,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
//清理
dcMem.SelectObject(&pOldBitmap);
}
效果: