当前位置: 首页 > 科技观察

说说菜单符号的绘制技巧,你学会了吗?

时间:2023-03-18 23:52:54 科技观察

我们看到了如何绘制主题和原始非主题单选按钮,我提到绘制菜单符号有点复杂。复杂的是这些符号是用单色位图实现的,而不是漂亮的全彩色位图。首先,我们将通过一种错误的方法来观察它的实际效果,然后我们将展示如何修复它。请看下面的代码:在上面的代码中,我们使用DrawFrameControlAPI函数在菜单项上绘制了一个复选标记。如果你运行的是WindowsXP默认主题,你可能不会发现任何问题,但是如果你将主题切换到WindowsClassic,你会发现在经典主题下,虽然菜单的背景颜色是灰色的,但是我们绘制的复选标记以黑色和白色绘制。出现这种现象的原因在DrawFrameControl的文档描述中已经写得很清楚了,请看下面:如果uType设置为DFC_MENU或DFC_BUTTON,且uState不是DFCS_BUTTONPUSH,那么frame控件会使用黑白mask(即a白色背景上的黑色框架控件)。我们能从DrawFrameControl得到的只是一个黑白蒙版。开发商有责任将其涂成其他颜色。怎么做?首先,我们将这个蒙版绘制成单色位图,然后使用BitBlt函数将其绘制成其他颜色。你是否记得?将单色位图转换为彩色位图时,源位图中的黑色将成为目标DC的文本颜色,源位图中的白色将成为目标DC的背景色。在上面的代码中,有三个关键点:1)绘制到一个单色位图上,得到一个遮罩。2)设置目标DC的文字颜色和背景颜色。3)使用BitBlt实现颜色映射。修改代码后,我们可以观察到绘制的对勾已经可以正确反映系统菜单颜色,因为我们将它们设置为单色转色的文字颜色和背景颜色。经过今天这篇文章的讲解,我想你应该能帮到这样一群绞尽脑汁在菜单上画透明复选标记的人了。我可能会想到两种不同的方案来实现它。总结希望大家对单色位图有更进一步的了解。