mfc 按钮从绘贴图

来源:互联网 发布:高中网络辅导班哪家好 编辑:程序博客网 时间:2024/05/21 06:17
#pragma once#include "afxwin.h"#define BTN_WIDTH 36#define BTN_HIGHT 36class 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); //得到设备环境类CDCif (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);}

效果:


0 0
原创粉丝点击