Как вытягивать системные иконки типа SIID_SHIELD и вставлять в меню. - VB
Формулировка задачи:
Поразвлекся.
Научился вытягивать системные иконки (они на каждой OS свои).
А то все в ресурсы обычно кладу.
Особенно радует значок "Run As Admin".
Наваял тест-проект, м.б. кому интересно -приложен.
На XP это не работает, на всех новых без проблем.
SHGetStockIconInfo function
Потом можно напр. конвертануть в альфа-битмап и запихнуть в меню.
Хотя на "классическом" стиле проще рисовать через коллбэки:
А вот интересно, чтоб наляпать значок администратора на кнопку, достаточно одной команды:
Научился вытягивать системные иконки (они на каждой OS свои).
А то все в ресурсы обычно кладу.
Особенно радует значок "Run As Admin".
Наваял тест-проект, м.б. кому интересно -приложен.
На XP это не работает, на всех новых без проблем.
SHGetStockIconInfo function
Потом можно напр. конвертануть в альфа-битмап и запихнуть в меню.
Хотя на "классическом" стиле проще рисовать через коллбэки:
А вот интересно, чтоб наляпать значок администратора на кнопку, достаточно одной команды:
Решение задачи: «Как вытягивать системные иконки типа SIID_SHIELD и вставлять в меню.»
textual
Листинг программы
Public Sub SetStockIcon( _ ByVal hwnd As Long, _ ByVal siid As SHSTOCKICONID, _ Optional ByVal bSetAsAppIcon As Boolean = True, _ Optional ByRef hIconLarge As Long, _ Optional ByRef hIconSmall As Long) 'устаналивает иконку формы (и приложения) соотв. системной иконке из SHSTOCKICONID '16x16 + 32х32 для отображении в Alt+TAB на >=Виста, а также на панели задач >=Win7(?) 'если по честному, то хэндлы hMeIconLarge и hMeIconSmall надо возвращать, чтоб их потом удалить 'удалять хэндлы сразу нельзя, пока иконки используются Dim lhWndTop As Long Dim lhWnd As Long If (bSetAsAppIcon) Then ' Find VB's hidden parent window: lhWnd = hwnd lhWndTop = lhWnd Do While Not (lhWnd = 0) lhWnd = GetWindow(lhWnd, GW_OWNER) If Not (lhWnd = 0) Then lhWndTop = lhWnd End If Loop End If 'to retrieve the large version of the icon, 'as specified by the SM_CXICON and SM_CYICON system metrics hIconLarge = GetStockIcon(siid, True) If (bSetAsAppIcon) Then SendMessageLong lhWndTop, WM_SETICON, ICON_BIG, hIconLarge End If SendMessageLong hwnd, WM_SETICON, ICON_BIG, hIconLarge 'to retrieve the small version of the icon, 'as specified by the SM_CXSMICON and SM_CYSMICON system metrics hIconSmall = GetStockIcon(siid, False) If (bSetAsAppIcon) Then SendMessageLong lhWndTop, WM_SETICON, ICON_SMALL, hIconSmall End If SendMessageLong hwnd, WM_SETICON, ICON_SMALL, hIconSmall End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д