Данные иконки по её хендлу

Тема в разделе "WASM.BEGINNERS", создана пользователем niakris, 28 фев 2011.

  1. niakris

    niakris Дмитрий

    Публикаций:
    0
    Регистрация:
    3 сен 2008
    Сообщения:
    45
    Как добраться до данных иконки зная её хендл?
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    niakris
    Иконки системные?
     
  3. niakris

    niakris Дмитрий

    Публикаций:
    0
    Регистрация:
    3 сен 2008
    Сообщения:
    45
    Mikl___, нет, загружаются ExtractIcon или через SHGetFileInfo.
     
  4. niakris

    niakris Дмитрий

    Публикаций:
    0
    Регистрация:
    3 сен 2008
    Сообщения:
    45
    Появился ещё один вопрос, рисую иконку
    Код (Text):
    1.     mov eax, [edi].bmiHeader.biWidth
    2.     mov ebx, [edi].bmiHeader.biHeight
    3.     mov iWidth, eax
    4.     shr ebx, 1
    5.     mov iHeight, ebx
    6.    
    7.  
    8.     mov eax, edi
    9.     add eax, sizeof BITMAPINFOHEADER +32 + 32
    10.     mov lpArrayColor, eax
    11.  
    12.    
    13.     invoke GetDC,0
    14.     mov hDC, eax
    15.     mov pcolorBits, 0
    16.     invoke CreateDIBSection,hDC,edi,DIB_RGB_COLORS,addr pcolorBits,NULL,0
    17.     mov colorBitmap, eax
    18.     invoke CreateCompatibleDC,hDC
    19.     mov hdcColor, eax
    20.     invoke ReleaseDC,NULL,hDC
    21.     invoke SelectObject,hdcColor,colorBitmap
    22.     mov hOldC, eax
    23.    
    24.     invoke SetDIBitsToDevice,hdcColor,0,0,iWidth, iHeight,0,0,0,iHeight,lpArrayColor,edi, DIB_RGB_COLORS
    25.     invoke BitBlt,static_hdc,0,0,iWidth,iHeight,hdcColor,0,0,SRCCOPY
    В результате получаю иконку на черном фоне.
    Откуда мог взятся черный фон?
     
  5. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
     
  6. niakris

    niakris Дмитрий

    Публикаций:
    0
    Регистрация:
    3 сен 2008
    Сообщения:
    45
    iZzz32, так ?
    Код (Text):
    1.     mov eax, [edi].bmiHeader.biWidth
    2.     mov ebx, [edi].bmiHeader.biHeight
    3.     mov iWidth, eax
    4.     shr ebx, 1
    5.     mov iHeight, ebx
    6.    
    7.     xor eax, eax
    8.     mov ax, [edi].bmiHeader.biBitCount
    9.     mul iWidth
    10.     add eax, 31
    11.     mov ecx, 32
    12.     mov edx, 0
    13.     div ecx
    14.     shl eax, 2
    15.     mul iHeight
    16.     mov iSizeColor, eax
    17.  
    18.     mov eax, iWidth
    19.     add eax, 31
    20.     shr eax, 5
    21.     shl eax, 2
    22.     mul iHeight
    23.     mov iSizeMask, eax
    24.    
    25.     mov eax, edi
    26.     add eax, sizeof BITMAPINFOHEADER +32 + 32
    27.     mov lpArrayColor, eax
    28.     add eax, iSizeColor
    29.     mov lpArrayMask, eax
    30.  
    31.     xor eax, eax
    32.     mov ebx, iWidth
    33.     mov edx, iHeight
    34.     mov ecx, iSizeMask
    35.     mov BmpInfoMask.bmiHeader.biSize, sizeof BITMAPINFOHEADER
    36.     mov BmpInfoMask.bmiHeader.biWidth, ebx
    37.     mov BmpInfoMask.bmiHeader.biHeight, edx
    38.     mov BmpInfoMask.bmiHeader.biPlanes, 1
    39.     mov BmpInfoMask.bmiHeader.biBitCount, cx
    40.     mov BmpInfoMask.bmiColors[0].rgbReserved, al
    41.     mov BmpInfoMask.bmiColors[0].rgbRed, al
    42.     mov BmpInfoMask.bmiColors[0].rgbBlue, al
    43.     mov BmpInfoMask.bmiColors[0].rgbGreen, al
    44.     mov BmpInfoMask.bmiColors[1].rgbReserved, al
    45.     mov al, 255
    46.     mov BmpInfoMask.bmiColors[1].rgbRed, al
    47.     mov BmpInfoMask.bmiColors[1].rgbBlue, al
    48.     mov BmpInfoMask.bmiColors[1].rgbGreen, al
    49.    
    50.     invoke GetDC,0
    51.     mov hDC, eax
    52.     mov pcolorBits, 0
    53.     invoke CreateDIBSection,hDC,edi,DIB_RGB_COLORS,addr pcolorBits,NULL,0
    54.     mov colorBitmap, eax
    55.     invoke CreateCompatibleDC,hDC
    56.     mov hdcColor, eax
    57.     invoke ReleaseDC,NULL,hDC
    58.     invoke SelectObject,hdcColor,colorBitmap
    59.     mov hOldC, eax
    60.     mov pmaskBits, 0
    61.     invoke CreateDIBSection,NULL,addr BmpInfoMask,DIB_RGB_COLORS,addr pmaskBits,NULL,0
    62.     mov maskBitmap, eax
    63.     invoke CreateCompatibleDC,NULL
    64.     mov hdcMask, eax
    65.     invoke SelectObject,hdcMask,maskBitmap
    66.     mov hOldM, eax
    67.  
    68.     invoke SetDIBitsToDevice,hdcMask,0,0,iWidth,iHeight,0,0,0,iHeight,lpArrayMask,addr BmpInfoMask,DIB_RGB_COLORS
    69.     invoke BitBlt,static_hdc,0,0,iWidth,iHeight,hdcMask,0,0,SRCAND
    70.     invoke SetDIBitsToDevice,hdcColor,0,0,iWidth, iHeight,0,0,0,iHeight,lpArrayColor,edi, DIB_RGB_COLORS
    71.     invoke BitBlt,static_hdc,0,0,iWidth,iHeight,hdcColor,0,0,SRCINVERT
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    <оффтоп>
    Мне вот всегда было интересно. Если вопрос по API, то накуя листинги давать на асме? На том же си это было бы несколько строк кода. Кто будет вникать в эти ассемблерные портянки? Я бы тебе и ответил на твой вопрос, но пока прокрутишь в голове что ты там наксорил, намулил, надивал и наэсашерил - мозг сломать можно.
    </оффтоп>
     
  8. niakris

    niakris Дмитрий

    Публикаций:
    0
    Регистрация:
    3 сен 2008
    Сообщения:
    45
    _DEN_, хорошо, покажи мне как в несколько строк на си отрисовать иконку на статике имея её данные в памяти :)