dll+icon

Тема в разделе "WASM.WIN32", создана пользователем __Ranger, 20 авг 2004.

  1. __Ranger

    __Ranger New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2003
    Сообщения:
    23
    Адрес:
    Russia
    Почему-то после добавления иконки в лист он начинает возвращать какую-то левую:
    Код (Text):
    1.  
    2.  
    3. .data
    4. dll_path db 'main.cpl',0
    5. ...
    6. .code
    7. dll_load_icon proc uses ebx, path:DWORD, id:DWORD
    8.     invoke LoadLibraryEx,path,0,LOAD_LIBRARY_AS_DATAFILE
    9.     mov ebx,eax
    10.     invoke LoadIcon,eax,id
    11.     push eax
    12.     invoke FreeLibrary,ebx
    13.     pop eax
    14.     ret
    15. dll_load_icon endp
    16.  
    17. ...
    18.  
    19. invoke ImageList_Create,32,32,ILC_COLOR32 or ILC_MASK,0,0
    20. mov ilist,eax
    21. invoke dll_load_icon,addr dll_path,100
    22. ;100 - такой ресурс есть
    23. ;если здесь отрисовать иконку через DrawIcon, то будет иконка мышки
    24. invoke ImageList_AddIcon,ilist,eax
    25. ;вовращает 0 - всё правильно
    26. invoke ImageList_GetIcon,ilist,eax,ILD_NORMAL
    27. ;возвращает хендл
    28. push eax
    29. invoke GetDC,0
    30. pop ecx
    31. invoke DrawIcon,eax,0,0,ecx
    32. ;а тут уже иконка приложения :(( Нихрена не понимаю     
    33.  
     
  2. krid24

    krid24 Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    88
    А если вместо LoadIcon юзать ExtractIcon(Ex)?
     
  3. __Ranger

    __Ranger New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2003
    Сообщения:
    23
    Адрес:
    Russia
    Если юзать ExtractIcon(Ex), то всё ок. Мне нужно отобразить иконку аплета панели управления. CPL_INQUIRE возвращает id иконки, она нормально грузится, но после добавления в лист то ли подменяется, то ли становится инвалидной, хотя лист ошибок не возвращает. Сейчас приходится получать id иконки и перечислять все ресурсы типа RT_GROUP_ICON, пока не найду свой id, получая таким образом индекс иконки и затем уже грузить через ExtractIcon(Ex). И через такую задницу всё работает. Но это не есть хорошо.
     
  4. krid24

    krid24 Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    88
    Так ведь в ExtractIcon(Ex) можно указывть и id, только надо минус перед ним поставить (в nIconIndex).



    MSDN:

    "... For example, use -3 to extract the icon whose resource identifier is 3."
     
  5. __Ranger

    __Ranger New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2003
    Сообщения:
    23
    Адрес:
    Russia
    Мля, что значит старым хелпом пользоваться, у меня ни слова про это. Всё работает, сенкс. Но лист попал под подозрение..
     
  6. krid24

    krid24 Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    88
    Ты про LoadIcon? Поправь, если ошибаюсь (нифига под рукой нет - проверить нечем), но имхо, после FreeLibrary handle иконки становится не валидным, т.к. иконка вместе с dll'кой выгружается.
     
  7. __Ranger

    __Ranger New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2003
    Сообщения:
    23
    Адрес:
    Russia
    Дык после FreeLibrary DrawIcon нормально иконку отрисовывает..
     
  8. krid24

    krid24 Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    88
    Да, тогда - хз. Как будет возможность, надо попробовать - самому интересно :)