背景透明的按钮

Author: 徐艺波(xuyibo) Views: 769 UpdateTime:2007-3-8
      留言

    我在开发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的功能。

留言: (留言使用了AJAX,提交的留言将自动显示在下面)Top
User:

Email:beyond5776@163.com QQ:85521028
Copyright ©2002-2007 XuYibo All rights reserved. License | Contributor