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函数需要加载这个类库。
TransparentBlt函数的使用注意事项的更多相关文章
- 程序员之---C语言细节22(函数返回指针注意事项<悬空指针>、查看进程能够分配的内存大小)
主要内容:函数返回指针注意事项<悬空指针>.查看进程能够分配的内存大小 #include <stdio.h> char * favorite_fruit() { static ...
- memset函数用法及注意事项
头文件 #include<cstring>// or #include<memory.h> ------------------------------------------ ...
- C++ vector erase函数的使用注意事项
最近使用了顺序容器的删除元素操作,特此记录下该函数的注意事项. 在C++primer中对c.erase(p) 这样解释的: c.erase(p) 删除迭代器p所指向的元素,返回一个指向被删元素 ...
- Linux system 函数的一些注意事项
在日常的代码编程中 , 我们可以利用system 函数去调用一些我们自己想调用的命令 , 并获取他的返回值. 函数的原型如下: int system(const char *command); 上一 ...
- Python的内置函数open()的注意事项
用法 : open("file_address","open_mode")例子 : f = open("D:\PycharmProjects\log. ...
- 【C】——使用creat()函数需要注意的事项
#include<fcntl.h> int creat(const char *pathname, mode_t mode); 若成功则返回为只写打开的文件描述符,若出错则返回-1: 有时 ...
- Java String.split()函数分隔回车注意事项
作者:Sun1956 原文:https://blog.csdn.net/sun1956/article/details/45096117 --------------------- 我们在Java中如 ...
- sql强大的行转列功能(内置函数pivot及注意事项)
语法: PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) ) ...
- 79)PHP,session函数编写的注意事项
(1)先执行 session_set_save_handler() 在session_start(). (2)那么开启session_start(),有两种方法,一个就是session_start ...
随机推荐
- 使用GLSL实现更多数量的局部光照 【转】
原文 http://www.cnblogs.com/CGDeveloper/archive/2008/07/02/1233816.html 众所周知,OpenGL固定管线只提供了最多8盏灯光.如何使得 ...
- delphi 去掉TreeView水平滚动条
使用API函数:声明 FUNCTION ulong ShowScrollBar(ulong hwnd,ulong wBar,ulong bShow) LIBRARY "user32. ...
- JUnit---Java单元测试必备工具
在我们每天业务代码都写不完,为什么还要写测试代码呢,项目完成之后我再测不行吗? 看起来像是增加了代码量,但是它恰恰帮你减少了后期测试排错的时间,每个team,每个人都是有Bug指标的,首先,每次你 ...
- iOS开发——UI篇&下拉弹出列表选择项效果
下拉弹出列表选择项效果 右边菜单中的按键,点击弹出一个列表可选择,选择其中一个,响应相应的事件并把文字显示在右边的菜单上:弹出下拉效果使用LMDropdownView插件,可以用POD进行加载pod ...
- 也谈OpenFlow, SDN, NFV
Copyright (2014) 郭龙仓. All Rights Reserved. OpenFlow 传统的网络环境中,仅仅有路由器/交换机之间的接口/协议是标准化的,可是在网络设备内部,数据平面和 ...
- .net控件Control透明
public partial class tspControl : UserControl { public tspControl() { InitializeComponent(); SetStyl ...
- DataBase 之 实用积累
(1)分页:(性能效果最好的是top/max 和Row_number()两种方法) [1]写法1,not in/top select top pagesize * from pagetest wher ...
- JavaScript实现复选框的全选,反选,不选
<script> window.onload=function(){ var CheckAll=document.getElementById('All'); var UnCheck=do ...
- 关于 VS2012 创建 MVC4 Empty 项目的一个小问题
今天下午发现一个新建的项目工作异常,主要表现为应该返回JSON的Action没有返回JSON字符串,而是返回了JsonResult的对象名,即字符串“System.Web.Mvc.JsonResult ...
- ubunutu_install_sublime_china
保存下面的代码到文件sublime_imfix.c(位于~目录) #include <gtk/gtkimcontext.h> void gtk_im_context_set_client_ ...