在ToolBar上使用半透明图像

   MFC的CToolBar类中对图标的处理仅提供了三个函数:SetImageList()、 SetHotImageList()和SetDisabledImageList()。对于图像的透明,也仅支持镂空效果,即要么图标显示前景,要么显示背景。而PNG图像中的半透明效果、边缘羽化后的效果均无法表现。CToolBar没有提供图标自画功能,如何实现更漂亮的ToolBar呢?
    答案就是:自已画!
    虽然CToolBar没有提供自画方法,但使用它提供的三个函数,我们仍可以把自己画的内容应用到CToolBar上。
    我们先按ToolBar上图标的大小创建一个位图,然后用系统的颜色画上背景,再使用GDI+的函数把PNG画到到位图中,最后使用生成的位图生成CImgList,再使用CToolBar的三个函数把新的CImgList传给CToolBar,这样,一个使用带有半透明效果的ToolBar就出现了。
    CImageToolBar从CToolBar继承,源代码如下
ImageToolBar.h
class CImageToolBar : public CToolBar
{
 DECLARE_DYNAMIC(CImageToolBar)
public:
 ULONG_PTR           gdiplusToken;
 CImageToolBar();
 virtual ~CImageToolBar();
 enum SET_ERR { SUCCESS = 0, RESOURCE_ERR, TOOBAR_ERR, SIZE_ERR, ERR };
 int SetImage(const char * imgPath);
 int SetImage(int sourceId);
 int SetImage(HBITMAP h_bmp);
 int RefreshImg();
protected:
 Image * m_pImage;
 void ColorReplace(CBitmap & bmpImg, COLORREF from, COLORREF to);
 int GetButtonCount();
 void GetButtonImgSize(CSize & size);
 void GetToolImgRect(CRect & imgRect);
 virtual void DrawBarImg(CBitmap & bmpImg);
 virtual void RendHotImg(CBitmap & bmpImg);
 virtual void RendDisableImg(CBitmap & bmpImg);
protected:
 DECLARE_MESSAGE_MAP()
public:
};
ImageToolBar.cpp
IMPLEMENT_DYNAMIC(CImageToolBar, CToolBar)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值