• TransparentBlt函数的使用注意事项


      今天客户需要在软件上需要添加一个自己公司的Logo,要求使用镂空透明的形式展现,本来以为很简单的工作没想到在MFC下这么复杂。
    Logo为BMP格式,白色背景。

      以为和在按钮上显示控件差不多,先导入BITMAP资源,比如叫IDB_BITMAP1,按钮名比如叫IDC_BUTTON1,
    按钮上贴图的代码:
    CBitmap m_bmp;
    m_bmp.LoadBitmap(IDB_BITMAP1);
    HBITMAP hBitmap = (HBITMAP)m_bmp.GetSafeHandle();
    ((CButton*)GetDlgItem(IDC_BUTTON1))->SetBitmap(hBitmap);

      本来以为和Delphi里面的按钮一样,设置熟悉为Transparent以后会自动根据BMP图片左上角的像素颜色作为透明色,结果是让人失望的。
    这个属性只有在显示文字时有用。

      无奈只好派生CStatic类重载OnPaint函数,在函数里使用TransparentBlt将白色设置为透明色。

    代码大致如下:

    CPaintDC dc(this);
    CDC memDc;
    memDc.CreateCompatibleDC(&dc);
    BITMAP bm;
    m_bitmap.GetBitmap(&bm);
    memDc.SelectObject(&m_bitmap);
    dc.TransparentBlt(10, 10, bm.bmWidth, bm.bmHeight, &memDc, 0, 0, bm.bmWidth, bm.bmHeight, RGB(255, 255, 255));

      修改完成后运行程序,居然显示不出图像,怎么回事?改为BitBlt测试一切正常。经过调试后发现原来是TransparentBlt参数的问题。
    原来TransparentBlt的倒数第2,3个参数必须小于图片实际大小,这个行为和BitBlt不同,需要格外注意。修改完成后,运行达到要求。

      忘了还有,#pragma comment( lib, "msimg32.lib" )TransparentBlt函数需要加载这个类库。

  • 相关阅读:
    All about Python
    All about TestComplete
    All about Ranorex
    围观大神们的博客
    CRP实施方法论(转)
    启发式测试策略模型(Heuristic Test Strategy Model,简称HTSM)(转)
    soapUI学习笔记---断言的小使用(转)
    soapUI学习笔记--用例字段参数化(转)
    常用功能测试点汇总(转)
    记一次性能测试实践1
  • 原文地址:https://www.cnblogs.com/cartler/p/3287797.html
Copyright © 2020-2023  润新知