给Vista/7程序——添加“盾牌图标”

本文介绍如何在Vista/7应用程序中为按钮添加盾牌图标,以提示用户操作需要提升权限。文章详细说明了两种实现方式:通过Button_SetElevationRequiredState宏或发送BCM_SETSHIELD消息,并提供了必要的代码示例。
摘要由CSDN通过智能技术生成

 可以给Vista/7程序中的按钮添加一个“盾牌图标”,以表示点击这个按钮后它所做的操作需要“提权”。 “盾牌图标” :

需要在“程序清单”中指出程序使用的是Vista/7的“控件样式”,否则它不会显示“盾牌图标”因为以前的Windows版本没有UAC这个概念。

 

程序的头文件中添加

// Add support for Vistaenabled common-controls

#ifdef_UNICODE

#if defined _M_IX86

#pragma comment(linker,"/manifestdependency:\"type='win32'name='Microsoft.Windows.Common-Controls' version='6.0.0.0'processorArchitecture='x86' publicKeyToken='6595b64144ccf1df'language='*'\"")

#elif defined _M_IA64

#pragmacomment(linker,"/manifestdependency:\"type='win32'name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64'publicKeyToken='6595b64144ccf1df' language='*'\"")

#elif defined _M_X64

#pragmacomment(linker,"/manifestdependency:\"type='win32'name='Microsoft.Windows.Common-Controls' version='6.0.0.0'processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df'language='*'\"")

#else

#pragmacomment(linker,"/manifestdependency:\"type='win32'name='Microsoft.Windows.Common-Controls' version='6.0.0.0'processorArchitecture='*' publicKeyToken='6595b64144ccf1df'language='*'\"")

#endif

#endif

 

或者在程序的“程序清单”资源中添加

  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*' />
    </dependentAssembly>
  </dependency>

 

指定好了Vista/7的控件样式以后就能够在程序中显示“盾牌图标”了。

有两种方法:

1. 调用Button_SetElevationRequiredState宏 

它有两个参数:第一个是窗口句柄(一般是按钮的窗口句柄)第二个是一个BOOL值(TRUE为显示“盾牌图标”FALSE为不显示)

2. 向窗口发送BCM_SETSHIELD消息

实际上Button_SetElevationRequiredState就是通过发送BCM_SETSHIELD消息来控制的。

它的wParam参数留空,lParam参数为BOOL(TRUE为显示“盾牌图标”FALSE为不显示)

 

还有可以使用一个函数来得到“盾牌图标” 来自己进行绘制。它就是SHGetStockIconInfo它的原型为:

HRESULT SHGetStockIconInfo(  SHSTOCKICONID siid,  UINT uFlags,  __inout  SHSTOCKICONINFO *psii);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值