Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Работа с иконками + WinAPI

Ответить
Настройки темы
Работа с иконками + WinAPI

Аватара для Yashied

Старожил


Сообщения: 206
Благодарности: 88

Профиль | Отправить PM | Цитировать


Доброй ночи. Подскажите пожалуйста, кто имел с этим дело. Я пытаюсь создать с помощью функции CreateIconIndirect() новою иконку, при этом Bitmap я беру из одной (Back) иконки, а маску из другой (Front). Обе иконки 32x32x32bpp. По идеи должна получится иконка Back "обрезанная" по маске из иконки Front. Но этого не происходит. Результирующая иконка эквивалентна иконке Back, т.е. маска из иконки Front вообще не воспринимается. В чем здесь может быть дело? Подозреваю, что я что-то упустил, но ... что?

Спасибо.

Код: Выделить весь код
#Include <WinAPI.au3>

local $Form, $sBackInfo, $sFrontInfo, $hBackIcon, $hFrontIcon, $hResultIcon

$Form = GUICreate('', 100, 100)
GUISetState()

; Получаем иконки
$hBackIcon = _WinAPI_PrivateExtractIcon('shell32.dll', 0, 32, 32)
$hFrontIcon = _WinAPI_PrivateExtractIcon('shell32.dll', 28, 32, 32)

; Получаем информацию о иконках
$sBackInfo = DllStructCreate('int fIcon;dword xHotspot;dword yHotspot;ptr hbmMask;ptr hbmColor')
DllCall('user32.dll', 'int', 'GetIconInfo', 'hwnd', $hBackIcon, 'ptr', DllStructGetPtr($sBackInfo))
$sFrontInfo = DllStructCreate('int fIcon;dword xHotspot;dword yHotspot;ptr hbmMask;ptr hbmColor')
DllCall('user32.dll', 'int', 'GetIconInfo', 'hwnd', $hFrontIcon, 'ptr', DllStructGetPtr($sFrontInfo))

; Задаем иконке Back маску из иконки Front
DllStructSetData($sBackInfo, 'hbmMask', DllStructGetData($sFrontInfo, 'hbmMask'))
;DllStructSetData($sBackInfo, 'hbmColor', DllStructGetData($sFrontInfo, 'hbmColor'))

; Создаем новую иконку на основе структуры $sBackInfo с измененной информацией
$hResultIcon = _WinAPI_CreateIconIndirect($sBackInfo)

; Выводим результат (???)
_WinAPI_DrawIcon(_WinAPI_GetDC($Form), 34, 34, $hResultIcon)

do
until GUIGetMsg() = -3

#Region Additional Function (На нижеследующие функции можно не обращать внимание)

func _WinAPI_CreateIconIndirect($tICONINFO)

    local $Ret = DllCall('user32.dll', 'int', 'CreateIconIndirect', 'ptr', DllStructGetPtr($tICONINFO))

    if (@error) or ($Ret[0] = 0) or ($Ret[0] = Ptr(0)) then
        return SetError(1, 0, 0)
    endif
    return SetError(0, 0, $Ret[0])
endfunc; _WinAPI_CreateIconIndirect

func _WinAPI_PrivateExtractIcon($sIcon, $iIndex, $iWidth, $iHeight)

    local $hIcon, $tIcon = DllStructCreate('hwnd'), $tID = DllStructCreate('hwnd')
    local $Ret = DllCall('user32.dll', 'int', 'PrivateExtractIcons', 'str', $sIcon, 'int', $iIndex, 'int', $iWidth, 'int', $iHeight, 'ptr', DllStructGetPtr($tIcon), 'ptr', DllStructGetPtr($tID), 'int', 1, 'int', 0)

    if (@error) or ($Ret[0] = 0)then
        return SetError(1, 0, 0)
    endif

    $hIcon = DllStructGetData($tIcon, 1)

    if ($hIcon = Ptr(0)) or (not IsPtr($hIcon)) then
        return SetError(1, 0, 0)
    endif
    return SetError(0, 0, $hIcon)
endfunc; _WinAPI_PrivateExtractIcon

#EndRegion Additional Function

Отправлено: 04:19, 14-05-2009

 


Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Работа с иконками + WinAPI

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - Глюк с иконками в панели задач BoTar Microsoft Windows Vista 2 23-10-2008 14:01
Проблема с иконками RADIOHAM Хочу все знать 5 22-08-2007 20:32
Проблема с иконками Yoghurt Microsoft Windows 2000/XP 7 25-06-2004 18:09
Проблемы с иконками в Вин98!!!! Guest Microsoft Windows 95/98/Me (архив) 5 07-11-2002 03:44




 
Переход