背景透明的按钮

    From: xuyibo.org  Updated: 2020-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的功能。

  1. 相关文章
  2. 程序异常捕获库 – CrashRpt
    注册表API简易教程
    MAPI MAPISendMail
    轻量级的浏览器控件HTMLLITE
    在XP下使用Link控件
    我的电脑软配置
    让你的程序支持脱拽

  3. 评论本文:
  4. EMail: