給Vista/7程序——添加“盾牌圖標”

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章