可以給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);