zoukankan      html  css  js  c++  java
  • [百度空间] [原]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跟以前不一样了.

  • 相关阅读:
    腾讯安全上海游戏部门笔试题
    2017
    2016
    2015
    2014
    2013
    2012
    2011
    2010
    2009
  • 原文地址:https://www.cnblogs.com/crazii/p/4512808.html
Copyright © 2011-2022 走看看