16,471
社区成员
发帖
与我相关
我的任务
分享
BEGIN_MESSAGE_MAP(CMyButton, CButton)
ON_WM_PAINT()
END_MESSAGE_MAP()
// CMyButton 消息处理程序
void CMyButton::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CButton::OnPaint()
TCHAR strModuelName[MAX_PATH]={0};
GetModuleFileName(GetModuleHandle(NULL),strModuelName,MAX_PATH);
TCHAR* pstr = _tcsrchr(strModuelName,_T('\\'));
ASSERT(pstr);
*(pstr+1) = _T('\0');
lstrcat(strModuelName,_T("\\ButtonPics\\"));
CString strTmp = strModuelName;
strTmp += m_strBitmapResources;
HBITMAP hBitmap = (HBITMAP)::LoadImage(GetModuleHandle(NULL), strTmp, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
//背景贴图实现
CDC MemDC;
//CBitmap对象
CBitmap Bitmap,*pOldBitmap;
//BITMAP句柄
BITMAP bm;
ASSERT(hBitmap);
Bitmap.Attach(hBitmap);
//加载位图
//将位图资源与句柄绑定
Bitmap.GetObject(sizeof(BITMAP),&bm);
//创建与内存兼容的DC
MemDC.CreateCompatibleDC(&dc);
//替换原位图
pOldBitmap=(CBitmap*)(MemDC.SelectObject(&Bitmap));
//获取绘制的区域
CRect rcClient;
GetClientRect(&rcClient);
//dc.DrawFrameControl(&rcClient,DFC_BUTTON ,DFCS_BUTTONPUSH);
//绘制到客户区
SetStretchBltMode( dc.GetSafeHdc(), HALFTONE );
dc.StretchBlt(0,0,rcClient.Width(),rcClient.Height(),&MemDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
//dc.BitBlt(0,0,rcClient.Width(),rcClient.Height(),&MemDC,0,0,SRCCOPY);
ASSERT(pOldBitmap);
MemDC.SelectObject(pOldBitmap);
Bitmap.Detach();
Bitmap.DeleteObject();
pOldBitmap->DeleteObject();
MemDC.DeleteDC();
}