windows – ImageList上的透明度?
编辑:我提供了赏金,因为我怀疑否则我会得到任何答案.
最近我一直在使用listviews,我决定为每个项目添加一个图标,指示它是输入还是输出.图标添加正常,但它们不透明: 可以看出,图标显然不透明.我正在做这样的事情加载图标: hImageList = ImageList_Create(16,16,ILC_MASK | ILC_COLOR32,2,2); if (hImageList != NULL) { iIN = ImageList_AddIcon(hImageList,LoadIcon(hInstance,MAKEINTRESOURCE(101))); iOUT = ImageList_AddIcon(hImageList,MAKEINTRESOURCE(102))); } 我已经尝试搞乱ImageList_Create&的标志了. LoadIcon / LoadImage,但没有运气,说实话,我已经没有想法了. 任何帮助将非常感激.
首先,ImageList_ReplaceIcon在将图标数据添加到图像列表时复制图标数据.因此HICON需要在之后发布.
接下来,图像列表是本机位图,而不是图标.而您创建图像列表的方式使得图标到位图的转换非常模糊. ILC_COLOR32意味着图像列表应该创建为32位dib部分,它通常包含通过嵌入式alpha通道的透明度信息.相反,ILC_MASK意味着内部位图是DDB位图,透明度信息存储为1bpp掩码位图. 解决问题的最快方法 – 带上两个图标: >将它们合并为一个32位宽,16位高的位图资源.用面具颜色填充背景: – 紫色或其他东西. 或者,为了更好的视觉效果…… >将PNG数据导出为包含预乘Alpha通道数据的32×16 32bpp位图文件. (最后一个选项有点棘手,因为支持使用正确预乘的alpha通道写出32位bmp文件的工具数量相当低). 编辑添加以下代码示例.使用在开发环境中创建的4bpp位图,这非常有用: – HWND hwndCtl = CreateWindowEx(0,WC_LISTVIEW,TEXT("ListView1"),WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL,cx,cy,hWnd,(HMENU)101,hModule,NULL); HBITMAP hbm = (HBITMAP)LoadImage(hModule,MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,0); COLORREF crMask=RGB(255,255); HIMAGELIST himl = ImageList_Create(16,ILC_COLOR|ILC_MASK,0); ImageList_AddMasked(himl,hbm,crMask); ListView_SetImageList(hwndCtl,himl,LVSIL_NORMAL); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Windows上的XAMPP – Apache没有启动
- Windows程序集堆和堆栈?
- 解决Windows磁盘占用过高的几种方法
- Win10操作系统无法访问局域网共享文件夹的问题
- Microsoft Excel错误:“将命令发送到程序时出现问题.”
- Windows – AppFabric Powershell新缓存异常
- 窗口 – 是否可以在批处理文件中的回线中放置新的行字符?
- windows-8 – 在Windows 8 Metro App中加载自定义字体
- .net – WPF中的Window StateChanging事件
- windows-8 – 如何在Windows 8 metro app live tile中禁用徽