按钮自绘,当鼠标点击按钮后,居然又看到按钮上的文字了

liulin2016 liulin2016 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
对话框上有3个按钮,每个按钮子类化,我们的CMyButton类。

代码在下面,所作的工作仅仅是贴图。

可是我发现个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();
}
...全文
评论 11
收藏 已收藏
分享
返回顶部
liulin2016
VC/MFC 16,550 成员 421,606 内容