按钮自绘,当鼠标点击按钮后,居然又看到按钮上的文字了
对话框上有3个按钮,每个按钮子类化,我们的CMyButton类。
代码在下面,所作的工作仅仅是贴图。
可是我发现个bug,当点击后,按钮又恢复了 原来的样子(这里所谓的原来的样子,指的是,你用mfc拖一个按钮到界面上,此时按钮是原生的,没有绘制过的, 上面有文字。 这就是我这里说的原来的样子)
由于原来按钮上有文字,当我点击按钮后,我惊奇的发现, 按钮恢复了原生态,现在不知道该怎么办,
我想简单处理,不想搞复杂。多谢
代码在下面,所作的工作仅仅是贴图。
可是我发现个bug,当点击后,按钮又恢复了 原来的样子(这里所谓的原来的样子,指的是,你用mfc拖一个按钮到界面上,此时按钮是原生的,没有绘制过的, 上面有文字。 这就是我这里说的原来的样子)
由于原来按钮上有文字,当我点击按钮后,我惊奇的发现, 按钮恢复了原生态,现在不知道该怎么办,
我想简单处理,不想搞复杂。多谢
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();
}
...全文


