Bitmap Button 不可用的情况

根据CButtonST类写了一个可以加载Bitmap 、Icon的按钮

但是缺陷是设置Bitmap按钮为不可用的时候 

按钮就变成一个灰色框框 

想实现设置Bitmap按钮为不可用的时候 只是让Bitmap变为灰色 

这个怎么实现啊 

望高手赐教

PS:下面是CButtonST类中重画Bitmap的代码

void CButtonST::DrawTheBitmap(CDC* pDC, BOOL bHasTitle, RECT* rpItem, CRect* rpCaption, BOOL bIsPressed, BOOL bIsDisabled)
{
HDC hdcBmpMem = NULL;
HBITMAP hbmOldBmp = NULL;
HDC hdcMem = NULL;
HBITMAP hbmT = NULL;

BYTE byIndex = 0;

// Select the bitmap to use
if ((m_bIsCheckBox && bIsPressed) || (!m_bIsCheckBox && (bIsPressed || m_bMouseOnButton)))
byIndex = 0;
else
byIndex = (m_csBitmaps[1].hBitmap == NULL ? 0 : 1);

CRect rImage;
PrepareImageRect(bHasTitle, rpItem, rpCaption, bIsPressed, m_csBitmaps[byIndex].dwWidth, m_csBitmaps[byIndex].dwHeight, &rImage);

hdcBmpMem = ::CreateCompatibleDC(pDC->m_hDC);

hbmOldBmp = (HBITMAP)::SelectObject(hdcBmpMem, m_csBitmaps[byIndex].hBitmap);

hdcMem = ::CreateCompatibleDC(NULL);

hbmT = (HBITMAP)::SelectObject(hdcMem, m_csBitmaps[byIndex].hMask);

if (bIsDisabled && m_bShowDisabledBitmap) //按钮为不可用的时候的处理代码 m_bShowDisabledBitmap为TRUE
{
HDC hDC = NULL;
HBITMAP hBitmap = NULL;

hDC = ::CreateCompatibleDC(pDC->m_hDC);
hBitmap = ::CreateCompatibleBitmap(pDC->m_hDC, m_csBitmaps[byIndex].dwWidth, m_csBitmaps[byIndex].dwHeight);
HBITMAP hOldBmp2 = (HBITMAP)::SelectObject(hDC, hBitmap);

RECT rRect;
rRect.left = 0;
rRect.top = 0;
rRect.right = rImage.right + 1;
rRect.bottom = rImage.bottom + 1;
::FillRect(hDC, &rRect, (HBRUSH)RGB(255, 255, 255));

COLORREF crOldColor = ::SetBkColor(hDC, RGB(255,255,255));

::BitBlt(hDC, 0, 0, m_csBitmaps[byIndex].dwWidth, m_csBitmaps[byIndex].dwHeight, hdcMem, 0, 0, SRCAND);
::BitBlt(hDC, 0, 0, m_csBitmaps[byIndex].dwWidth, m_csBitmaps[byIndex].dwHeight, hdcBmpMem, 0, 0, SRCPAINT);

::SetBkColor(hDC, crOldColor);
::SelectObject(hDC, hOldBmp2);
::DeleteDC(hDC);

pDC->DrawState( CPoint(rImage.left/*+1*/, rImage.top), 
CSize(m_csBitmaps[byIndex].dwWidth, m_csBitmaps[byIndex].dwHeight), 
hBitmap, DST_BITMAP | DSS_DISABLED);

::DeleteObject(hBitmap);
} // if
else
{
::BitBlt(pDC->m_hDC, rImage.left, rImage.top, m_csBitmaps[byIndex].dwWidth, m_csBitmaps[byIndex].dwHeight, hdcMem, 0, 0, SRCAND);

::BitBlt(pDC->m_hDC, rImage.left, rImage.top, m_csBitmaps[byIndex].dwWidth, m_csBitmaps[byIndex].dwHeight, hdcBmpMem, 0, 0, SRCPAINT);
} // else

::SelectObject(hdcMem, hbmT);
::DeleteDC(hdcMem);

::SelectObject(hdcBmpMem, hbmOldBmp);
::DeleteDC(hdcBmpMem);
} // End of DrawTheBitmap

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果您使用 MFC(Microsoft Foundation Classes)框架开发应用程序,并且想要将 BMP 文件定义为 MFC 按钮控件的背景,可以按照以下步骤进行操作: 1. 在资源编辑器中导入 BMP 图像:打开您的 MFC 项目的资源文件(通常是 `.rc` 文件),然后将 BMP 文件添加到资源编辑器中。右键单击资源编辑器窗口中的某个文件夹(如 "Bitmap"),选择"导入",并选择 BMP 文件。 2. 创建一个按钮控件:在您的对话框或窗体上添加一个按钮控件。可以使用 MFC 类向导自动生成对应的控件变量和消息映射。 3. 设置按钮的样式:在对话框或窗体的初始化代码中,使用按钮控件变量的成员函数来设置按钮的样式。例如,使用 `CButton` 类的 `SetBitmap` 函数将 BMP 图像设置为按钮的背景: ```cpp CButton* pButton = (CButton*)GetDlgItem(IDC_BUTTON1); // 替换为您的按钮 ID HBITMAP hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); pButton->SetBitmap(hBitmap); ``` 在上面的代码中,`IDC_BUTTON1` 应替换为您实际的按钮 ID,`IDB_BITMAP1` 应替换为您导入的 BMP 图像资源 ID。 4. 处理按钮的点击事件:根据需要,在您的对话框或窗体类中添加按钮的点击事件处理程序,以响应按钮的点击操作。 请注意,上述步骤是基于 MFC 框架的方式实现的,您需要根据您的实际情况进行适当的调整和修改。同时,记得处理资源加载和异常情况,以确保代码的可靠性和稳定性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值