- 相关文章
- 评论本文:
背景透明的按钮
Author: 徐艺波 From: xuyibo.org Updated: 2007-09-23
| | 当更新时自动发送邮件通知。 | |||
| | 有什么建议或评论,可以贴一下。 | |||
| | 你的支持,让我们做的更好。 | |||
我在开发txt2chm工具的时候遇到了这个问题。
起先我使用的是static窗口,使用了SS_BITMAP样式,选择了一个24位的位图,可就是不透明,后来我打算使用ICON,因为ICON能够有透明的效果。
我就制作了一个16*16的图标,背景透明的,效果呢?图标显示的特别大,也不知道什么原因,微软的MSDN中说拥有SS_BITMAP和SS_ICON的static窗口,windows会自动调节窗口的大小。
无奈中,我想起了dreamweaver是怎么做的,使用spyxx检查了一下,看到一个有价值的东西:是个拥有BS_OWNDRAW样式的按钮。下面是我的代码,提取自txt2chm项目代码:
case WM_DRAWITEM:
{
HDC hdcMem;
LPDRAWITEMSTRUCT lpdis;
lpdis = (LPDRAWITEMSTRUCT) lParam;
hdcMem = CreateCompatibleDC(lpdis->hDC);
SelectObject(hdcMem, hBitmap);
// Destination
TransparentBlt(
lpdis->hDC, // destination DC
0, 0, 15, 15,
hdcMem, // source device context
0, 0, 15, 15, // x and y upper left
RGB(255,0,255)); // raster operation
DeleteDC(hdcMem);
return TRUE;
}
return TRUE;
WM_DRAWITEM就是负责画按钮的,注意此时不能使用BitBlt,因为BitBlt没有mask的功能。
程序异常捕获库 - CrashRpt
注册表API简易教程
MAPI MAPISendMail
轻量级的浏览器控件HTMLLITE
在XP下使用Link控件
我的电脑软配置
让你的程序支持脱拽