Bueno, antes que nada, quiero decir que ya probe con la funcion de leandro GetWindowIcon; la cual obtiene el icono, pero no hace la copia del mismo:
' Rutina que obtiene el ícono de la ventana (éste debe ser destruido).
Private Function GetWindowIcon(hwnd As Long, Size As Long) As Long
Dim hIcon As Long
If Size <= 20 Then
hIcon = SendMessageA(hwnd, WM_GETICON, ICON_SMALL, ByVal 0)
If hIcon = 0 Then
hIcon = SendMessageA(hwnd, WM_GETICON, ICON_BIG, ByVal 0)
End If
Else
hIcon = SendMessageA(hwnd, WM_GETICON, ICON_BIG, ByVal 0)
If hIcon = 0 Then
hIcon = SendMessageA(hwnd, WM_GETICON, ICON_SMALL, ByVal 0)
End If
End If
Debug.Print "hIcon: "; hIcon 'Aca devuelve el handle correcto
If hIcon <> 0 Then
GetWindowIcon = CopyImage(hIcon, IMAGE_ICON, Size, Size, LR_COPYFROMRESOURCE)
End If
Debug.Print "Ret: "; GetWindowIcon 'Aca devuelve 0
End Function
para ser mas especificos, el problema solo aparece cuando el icono del formulario se lo seteo yo con WM_SETICON:
(uso esta funcion tan solo para cargar un icono de 32 bits)
Function SetWndIcon(sIconPath As String, lhWnd As Long, lWidth As Long, lHeight As Long, Optional ByVal FromRes As Boolean) As Boolean
Dim hIcon As Long
hIcon = LoadImage(App.hInstance, sIconPath, IMAGE_ICON, lWidth, lHeight, IIf(FromRes, LR_SHARED Or LR_LOADMAP3DCOLORS, LR_LOADFROMFILE Or LR_SHARED))
If hIcon Then
If (lWidth > 16) And (lHeight > 16) Then
Call SendMessage(lhWnd, WM_SETICON, ICON_BIG, ByVal hIcon)
Else
Call SendMessage(lhWnd, WM_SETICON, ICON_SMALL, ByVal hIcon)
End If
Call DestroyIcon(hIcon)
SetWndIcon = True
End If
End Function
entre todo esto, el handle del icono que seteo, es el mismo que el que devuelve el WM_GETICON; digo esto para estar seguros.
y lo dibujo asi:
lngIcon = GetWindowIcon(m_hWndChild(iC), 16)
DrawIconEx c_dhDC, tActualR.Left + 6, tActualR.Top + 4, lngIcon, 0, 0, 0, 0, &H1 Or &H2 'DI_MASK Or DI_IMAGE
Call DestroyIcon(lngIcon)
son 2 clases distintas, donde el codigo de leandro, esta junto a la funcion de pintar el icono. la otra funcion de setear el icono, esta en otra clase. (no es importante, pero aclaro)
bueno entonces ahi esta el problema. con los iconos de vb no hay drama, pero con los iconos q seteo yo de 32 bits (16x16 eh!) no se pintan.
alguna idea?
saludos