首先,对不起,如果我在这里听起来傲慢/粗鲁。
好的,所以现在每个人都遇到了这个(我希望);我只是在任何地方都没有找到任何适当的答案。我们从 Common Controls 6 清单开始,然后
case WM_CTLCOLORSTATIC:
if (/* window has WS_EX_TRANSPARENT */) {
SetBkMode((HDC) wParam, TRANSPARENT);
return (LRESULT) GetStockObject(HOLLOW_BRUSH);
}
并给出我们的标签WS_EX_TRANSPARENT
。它们变得透明;到目前为止,一切都很好。现在我们必须将该样式添加到我们的复选框中(因为复选框响应该样式而不是WM_CTLCOLORBTN
出于某种原因)。而且...复选框变黑了!
有没有办法让它们完全透明而不诉诸所有者绘制?我宁愿自己不画复选框;我宁愿不必猜测它看起来是否正确,或者如果主题 API 在我身上失败,我将不得不自己绘制复选框(当我将自定义复选框添加到我的列表视图时,我将不得不自己绘制复选框)而且我已经对所涉及的猜测数量不满意)。
这些复选框被绘制在主题选项卡控件上。到目前为止,我在 Windows XP 中发现了五个对话框,主题选项卡上带有透明复选框:快捷方式属性的常规选项卡、任务栏和开始菜单属性的任务栏选项卡、系统属性的系统还原选项卡、文件夹选项的常规选项卡(单选按钮)和辅助功能选项的键盘选项卡。所以这肯定是可能的!我确信 Windows UI 作者不必在整个操作系统中使用自定义绘图...我们都缺少什么?
如果我需要子类,那很好(无论如何我已经有一个子类用于事件处理目的),但我仍然不想自己画。
作为奖励,按钮呢?覆盖WM_CTLCOLORBTN
给按钮一个黑色边框,但我注意到上面提到的标准对话框都没有让按钮的角透明,所以嗯:/
谢谢!