首页 > 其他分享 >绘制菜单符号的技法

绘制菜单符号的技法

时间:2022-12-31 10:34:28浏览次数:33  
标签:菜单 符号 单色 勾选 技法 掩码 绘制


在上一篇文章中,我们了解了如何绘制主题化的和原始未主题化的单选按钮,我曾提到,绘制菜单符号会更加复杂一些。复杂之处在于,这些符号是通过单色位图实现的,而不是漂亮的全彩色位图。
首先,我们将通过一种错误的做法来看看实际的效果,然后我们将展示如何修复它。
请看下面的代码:

>> 请移步至 topomel.com 以查看图片 <<

在上面的代码中,我们使用了 DrawFrameControl 这个 API 函数,往菜单项上绘制一个勾选符号。如果你正在运行的是 Windows XP 默认主题,你可能不会发现有什么问题,但是如果将主题切换至 Windows 经典,则你会发现,在经典主题下,菜单的背景色虽然是灰色,但是我们绘制的勾选符号是以黑白色来绘制的。

产生这种现象的原因已经明明白白地写在了 DrawFrameControl 的文档描述中,请看下文:
如果 uType 被设定为 DFC_MENU 或 DFC_BUTTON,且 uState 不为 DFCS_BUTTONPUSH,则框架控件将使用一个黑白色掩码(也就是说,一个白色背景下的黑色框架控件)。

我们从 DrawFrameControl 所能得到的全部,只是一个黑白色掩码。使用其他颜色来绘制它则是开发者的责任。具体如何做呢?

首先,我们绘制这个掩码到一个单色位图,然后使用 BitBlt 这个函数来为它涂上其他颜色。还记得吗?当将一张单色位图传送至一张彩色位图时,源位图中的黑色将会成为目标DC的文本颜色,且源位图中的白色将会变成目标DC的背景色。

>> 请移步至 topomel.com 以查看图片 <<

上面代码中,有三个关键点:
1) 往一个单色位图中绘制,从而得到一个掩码。
2) 设置目标DC的文字颜色和背景色。
3) 使用 BitBlt 来实现颜色映射。

修改代码之后,我们可以观察到,绘制的勾选符号已经可以正确地反映系统菜单颜色了,因为我们将它们设置为单色到彩色传输的文本颜色和背景色了。

经过今天文章的讲解,我想你应该可以帮助这样一批人,他们绞尽脑汁想在菜单上绘制一个透明的勾选符号。我大概可以想到实现它的两种不同方案。

总结

希望各位对单色位图有进一步的理解。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。

绘制菜单符号的技法_windows

 

标签:菜单,符号,单色,勾选,技法,掩码,绘制
From: https://blog.51cto.com/u_15805075/5981998

相关文章

  • 创建菜单与游戏界面
    今天学习完成构建蛇与蛇的移动自己的vscode没有自动导入Snake,下次记得手动导入接下来,实现蛇的连贯移动思路:设置一个虚拟的头部。每次移动只有头和尾巴移动回合制游戏......
  • html+css:小米顶部菜单+二级菜单
    1、源码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>.header{/*height:38px;*/......
  • #yyds干货盘点# LeetCode程序员面试金典:绘制直线
    题目:已知一个由像素点组成的单色屏幕,每行均有 w​ 个像素点,所有像素点初始为 0​,左上角位置为 (0,0)。现将每行的像素点按照「每 32​ 个像素点」为一组存放在一个 i......
  • VSCode添加到右键菜单命令
    一、打开注册表win+R输入regedit,打开注册表编辑器二、文件添加右键VScode打开命令依次找到HKEY_CLASSES_ROOT>*>shell,右键新建,项,命名为VSCode,点击VScode文件夹,双击......
  • PS教程!教你五分钟快速绘制大气磅…
    我也不知道这种中国风​​字体设计​​Banner什么时候火爆起来。我觉得首先应该感谢淘宝,每当淘宝大促的时候必然有很多这样的风格的Banner充斥着你的眼球。有非常强烈的视觉......
  • VTK_Learning_体绘制讨论_颜色传输函数
    1.颜色传输函数颜色传输函数与不透明度传输函数的使用类似,二者的不同之处在于颜色传输函数是将一个标量值映射为颜色值。这个颜色值可以是RGB值,也可以是HSV值。VTK颜色传输......
  • VTK_Learning_体绘制讨论_光照&阴影、VTKLODProp3D
    1.光照与阴影通过VTKVolumeProperty可以设置体绘制阴影效果(Shading)。阴影效果主要受环境光系数、散射光系数、反射光系数和高光强度四个参数影响。vtkVolumeProperty::SetAm......
  • VTK_Learning_体绘制_固定点光线投影体绘制与GPU加速光线投影体绘制
    1.固定点光线投影算法vtkFixedPointVolumeRayCastMapper是一个较好的vtkVolumeRayCastMapper的替代者。该类能够实现基于Alpha合成的体绘制方法和最大密度投影体绘制方法,能......
  • 创建菜单与游戏界面
    本节课任务,实现游戏界面,页面导航栏先写前端在写后端。从上往下,减少代码重构导航栏专门拿出来,做组件前端的框架,模仿一遍格式:组件名称需要有两个大写字母bootstrap实现......
  • python 绘制简易折线图
    #简易折线图绘制#encoding=utf-8#引入对应库文件importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(0,20,100)#类似于平滑度0表示x坐标原......