• [百度空间] [原]CImageList支持32位透明位图


    32位的位图主要是包含Alpha值(0-255)可以有半透效果的.
    之前用FreeImage加载 的DIB, CImageList直接绘制会有黑色背景.
    即便用了ILC_MASK,也创建了mask map, 这种是旧式的图标/光标透明效果, 遮罩透明, 没有alpha通道和渐变,效果仍然很差.
    所以以前的toolbar/menu/tab control 都是ownerdraw, 先ExtractIcon,用DrawStat (DST_ICON)来绘制图标,这样绘的制是支持32位图标的.
    但是最近给toolbar加了下拉功能,自绘感觉很麻烦,所以想让控件自己绘制.

    最后发现之前不能绘制半透是因为ILC_COLOR32只有在comctl32 6.0以上版本才支持.

    http://msdn.microsoft.com/en-us/library/windows/desktop/bb761522(v=vs.85).aspx

    When you finish using the image list, destroy it by calling the ImageList_Destroy function.

    Note  Comctl32.dll version 6 is not redistributable but it is included in Windows XP or later. To use Comctl32.dll version 6, specify it in a manifest. For more information on manifests, see Enabling Visual Styles.

    -_-! 以上是MSDN链接和说明,只提到如何使用6.0, 但对于ILC_COLOR32 必须用6.0这一点,好像只字未提, 我在google group讨论组搜到的结果是这么说的.感觉被M$坑的好苦.

    如何使用6.0版本的common control库呢?

    http://msdn.microsoft.com/en-us/library/windows/desktop/bb773175(v=vs.85).aspx
    可以手写manifest,或者用VC的pragma,比如:

    #pragma comment(linker,""/manifestdependency:type='win32' 
    name='Microsoft.Windows.Common-Controls' version='6.0.0.0' 

    processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"")

    会通知链接器将6.0的依赖信息添加到manifest. 上面提到XP以后系统就带了6.0的common control了,据说这也是XP/2000 才开始支持图标半透的原因,所以基本上不用担心系统的comctl32版本太低.启用以后发现视觉样式也开启了,很明显的toolbar和tab control跟以前不一样了.

  • 相关阅读:
    触发器
    数据库function和procedure
    java连接数据库
    单例模式
    python入门相关笔记
    ubuntu 系统备份到移动硬盘(tar) 还原到另一台电脑
    大白菜pe 通用pe 安装心得
    18 java 代理模式 (转)
    5 HBase 常用Shell命令
    1、shell 简介
  • 原文地址:https://www.cnblogs.com/crazii/p/4512808.html
Copyright © 2020-2023  润新知