BCM_SETSHIELD Windows API消息的正确返回值是什么?
BCM_SETSHIELD Windows消息返回值及相关文档勘误 核心返回值结论
经多版本Windows环境实测,BCM_SETSHIELD消息的实际返回值与官方公开文档描述存在明确偏差:
- 成功为目标按钮设置UAC盾牌图标时,消息返回值固定为
0 - 官方文档记载的「调用成功返回1,调用失败返回对应错误码」为文档错误,实际实现中不存在成功返回1的逻辑路径。
关联接口的文档与实现差异
以下配套接口同样存在官方文档描述与实际实现不符的问题:
Button_SetElevationRequiredState宏:文档标注返回值类型为void,但实际头文件中的实现返回值类型为LRESULT,直接透传底层发送BCM_SETSHIELD消息的返回结果,即调用成功时返回0。- MFC
CButton类对应方法:文档标注类中存在返回值为BOOL类型的SetElevationRequired方法,该方法实际并不存在;类库中实现对应功能的方法为SetShield,返回值类型为HICON,返回内容是按钮替换为盾牌图标前的原有图标句柄。
验证基准:所有结果基于通用控件库(ComCtl32)v6及以上版本(即正式支持视觉样式、提供UAC盾牌标识接口的版本),更早版本的通用控件库不支持该消息,调用后返回值同样为0。
内容的提问来源于stack exchange,提问作者Jogy
相关产品推荐
相关产品推荐

