elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
14 Febrero 2012, 10:30  

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Consulta sobre como crear un ListView32 (solucionado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Consulta sobre como crear un ListView32 (solucionado)  (Leído 2,868 veces)
el_c0c0

Desconectado Desconectado

Mensajes: 298


Ver Perfil
Consulta sobre como crear un ListView32 (solucionado)
« en: 15 Marzo 2010, 01:02 »

Hola que tal, bueno me decidi a meterme en el tema de ASM. Hasta el momento va todo bien, pero me surgio una duda. Quiero crear un control ListView32, lo creo, perfecto. Ahora quiero agregar una columna, para ello me estoy basando en el codigo fuente del ucListView en VB6 de Carles P.V. Bueno, el tema es que no consigo meter el item del header, o algo asi. Aca adjunto el pedazo de codigo:
Código
  createlv:
        invoke CreateWindowEx,0,_dlgLV,NULL,WS_CHILD + WS_TABSTOP + LVS_REPORT + WS_VISIBLE,5,5,240,155,[dlghwnd],0,[wc.hInstance],NULL
       mov    [dlglvhwnd],eax
       invoke ShowWindow,eax,SW_SHOW
       invoke  SetWindowLong,[dlglvhwnd], GWL_WNDPROC, WindowProc2                
 
       ; poner el lv en modo list
       invoke GetWindowLong,[dlglvhwnd],GWL_STYLE
       mov    [tmp], eax
       mov    [tmp], tmp+LVS_LIST-LVS_ICON-LVS_SMALLICON-LVS_REPORT
       invoke SetWindowLong,[dlglvhwnd],GWL_STYLE,[tmp]
 
       ; agregar columna
       invoke lstrlen,_cap1           ; len del caption
       mov    [hdi.cchTextMax], eax   ; len
       mov    [hdi.pszText], _cap1    ; caption
       mov    [hdi.cxy], 100          ; width
       mov    [hdi.fmt], HDF_STRING+HDF_CENTER ; formato
       mov    [hdi.mask], HDI_TEXT+HDI_WIDTH+HDI_FORMAT  ; mask
 
       invoke SendMessage,[dlglvhwnd],LVM_INSERTCOLUMN,0,[lvc] ;
       invoke SendMessage,[dlglvhwnd],4127,0,0                 ; buscar header dentro del lview
       mov    [dlglvheader], eax                               ; guardo resultado
       invoke SendMessage,eax,HDM_SETITEM,0,[hdi]              ; seteo el item en el header
y tengo declarado asi:
Código
  _dlgLV TCHAR 'SysListView32',0
 _cap1 TCHAR 'LV32',0
 
 dlglvheader dd ?
 dlglvhwnd dd ?
 
 tmp dd ?
 
 lvc LV_COLUMN
 hdi HD_ITEM
estoy usando FASM. wc.hInstance viene de WNDCLASSEX que uso para crear la ventana. WndProc2 es un procedimiento que llama al DefProcWnd. Ah y probe con y sin [] en hdi y lvc.

PD: si quito la parte de 'cambiar el estilo' se ve el recuadro blanco del LV. Pero, con el codigo ese, queda del color de fondo de la ventana.

alguna sugerencia?

desde ya muchas gracias  ::)


« Última modificación: 19 Marzo 2010, 19:00 por el_c0c0 » En línea

'-     coco
"Te voy a romper el orto"- Las hemorroides
MCKSys Argentina


Desconectado Desconectado

Mensajes: 1.141


Diviérte crackeando, que para eso estamos!


Ver Perfil
Re: Consulta sobre como crear un ListView32
« Respuesta #1 en: 15 Marzo 2010, 02:40 »

Hola!

Fíjate por aqui: http://win32assembly.online.fr/tut31.html

Quizás te ayude :)

Saludos!


En línea

---------------------
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
el_c0c0

Desconectado Desconectado

Mensajes: 298


Ver Perfil
Re: Consulta sobre como crear un ListView32
« Respuesta #2 en: 15 Marzo 2010, 02:57 »

Hola!

Fíjate por aqui: http://win32assembly.online.fr/tut31.html

Quizás te ayude :)

Saludos!
Che gracias por responder. Mientras tanto estvue indagando por mi cuenta. Lo que me pusiste vos
Código
   LOCAL lvc:LV_COLUMN
  mov lvc.imask,LVCF_TEXT+LVCF_WIDTH
  mov lvc.pszText,offset Heading1
  mov lvc.lx,150
  invoke SendMessage,hList, LVM_INSERTCOLUMN,0,addr lvc
yo lo tengo asi:
Código
        mov     [lvc.mask], LVCF_TEXT or LVCF_WIDTH
       mov     [lvc.pszText], _cap1 ; aca tengo duda de que esto sea asi
       mov     [lvc.cx], 50
       invoke  SendMessage, [dlglvhwnd], LVM_INSERTCOLUMN, 0, [lvc]

y para el tema de agregar un item en ese codigo esta asi:
Código
  mov lvi.imask,LVIF_TEXT
 inc lvi.iSubItem
 invoke wsprintf,addr buffer, addr template,[edi].nFileSizeLow
 lea eax,buffer
 mov lvi.pszText,eax
 invoke SendMessage,hList, LVM_INSERTITEM,0, addr lvi
y yo por mi parte lo tengo como
Código
        mov     [lvi.iItem], 0
       mov     [lvi.iSubItem], 0
       mov     [lvi.mask], LVIF_TEXT
       mov     [lvi.pszText], _cap1
       invoke  SendMessage,[dlglvhwnd], LVM_INSERTITEM,0,[lvi]

misteriosamente sigue sin funcionar. sorry que sea duro con esto, recien empiezo :D

saludos
En línea

'-     coco
"Te voy a romper el orto"- Las hemorroides
MCKSys Argentina


Desconectado Desconectado

Mensajes: 1.141


Diviérte crackeando, que para eso estamos!


Ver Perfil
Re: Consulta sobre como crear un ListView32
« Respuesta #3 en: 15 Marzo 2010, 03:14 »

Tuyo
Código:
inc lvi.iSubItem

Iczelion
Código:
mov     [lvi.iSubItem], 0

¿ No será por eso ? (Mucho de ASM no manejo :))
En línea

---------------------
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
el_c0c0

Desconectado Desconectado

Mensajes: 298


Ver Perfil
Re: Consulta sobre como crear un ListView32
« Respuesta #4 en: 15 Marzo 2010, 03:21 »

Tuyo
Código:
inc lvi.iSubItem

Iczelion
Código:
mov     [lvi.iSubItem], 0

¿ No será por eso ? (Mucho de ASM no manejo :))
Al revez, el que uso yo usa los []. Esto es porque le estoy pasando como puntero. (de todas formas sin [] no funciona :D). Estoy casi seguro que es un problema al pasar el string; aun sigo viendo que carajos pasa.

Gracias por contestar, ademas espero otras respuestas.

saludos
En línea

'-     coco
"Te voy a romper el orto"- Las hemorroides
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.241


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Consulta sobre como crear un ListView32
« Respuesta #5 en: 15 Marzo 2010, 12:06 »

¿Ambos mensajes devuelven -1? Teniendo el codigo lo mejor que podes hacer es depurar el programa con el WinDbg.
En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón.
el_c0c0

Desconectado Desconectado

Mensajes: 298


Ver Perfil
Re: Consulta sobre como crear un ListView32
« Respuesta #6 en: 15 Marzo 2010, 16:47 »

¿Ambos mensajes devuelven -1? Teniendo el codigo lo mejor que podes hacer es depurar el programa con el WinDbg.

Recien lo probe con Olly, me devuelven 0. A su vez agregue un CMP para no tener que andar debugueando. cual sera el problema?

edit, dejo foto del Olly:


saludos
« Última modificación: 15 Marzo 2010, 17:04 por el_c0c0 » En línea

'-     coco
"Te voy a romper el orto"- Las hemorroides
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.241


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Consulta sobre como crear un ListView32
« Respuesta #7 en: 15 Marzo 2010, 18:16 »

Es dificil saber sin el codigo pero en teoria esos mensajes funcionaron bien ...
En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón.
el_c0c0

Desconectado Desconectado

Mensajes: 298


Ver Perfil
Re: Consulta sobre como crear un ListView32
« Respuesta #8 en: 15 Marzo 2010, 22:31 »

Es dificil saber sin el codigo pero en teoria esos mensajes funcionaron bien ...

te dejo el codigo completo, espero que sea una pelotudez.
Código
format PE GUI 4.0
entry start
 
include 'win32w.inc'
 
section '.data' data readable writeable
 
 _class TCHAR 'CocusUI®',0
 _title TCHAR 'Window de prueba',0
 _error TCHAR 'Startup failed.',0
 _dlgLV TCHAR 'SysListView32',0
 _cap1 TCHAR 'LV32',0
 
 dlglvheader dd ?
 dlglvhwnd dd ?
 dlghwnd dd ?
 dlghdc dd ?
 tmp dd ?
 
 wc WNDCLASS 0,WindowProc,0,0,NULL,NULL,NULL,COLOR_BTNFACE+1,NULL,_class
 
 msg MSG
 lvi LV_ITEM
 lvc LV_COLUMN
 hdi HD_ITEM
 
section '.text' code readable executable
 
 start:
 
       invoke  GetModuleHandle,0
       mov     [wc.hInstance],eax
       invoke  LoadIcon,0,IDI_APPLICATION
       mov     [wc.hIcon],eax
       invoke  LoadCursor,0,IDC_ARROW
       mov     [wc.hCursor],eax
       invoke  RegisterClass,wc
       test    eax,eax
       jz      error
 
       invoke  CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU,128,128,256,192,NULL,NULL,[wc.hInstance],NULL
       test    eax,eax
       jz      error
 
       mov     [dlghwnd],eax
       invoke  GetDC,eax
       mov     [dlghdc],eax
 
       jmp     createlv
 
 
 createlv:
       invoke CreateWindowEx,0,_dlgLV,NULL,WS_CHILD + WS_TABSTOP + WS_VISIBLE + LVS_REPORT,5,5,240,155,[dlghwnd],0,[wc.hInstance],NULL
       mov    [dlglvhwnd],eax
       invoke SetWindowLong,[dlglvhwnd], GWL_WNDPROC, WindowProc2
       invoke ShowWindow,[dlglvhwnd],SW_SHOW
 
       mov     [lvi.mask], LVIF_TEXT ;or LVIF_STATE
       mov     [lvi.iItem], 0
       mov     [lvi.iSubItem], 0
       mov     [lvi.pszText], _cap1
 
       invoke  SendMessage,[dlglvhwnd], LVM_INSERTITEM,0,[lvi]
 
       cmp     eax,-1
       ja      msg_loop
       invoke  MessageBeep, MB_OK
 
 msg_loop:
       invoke  GetMessage,msg,NULL,0,0
       cmp     eax,1
       jb      end_loop
       jne     msg_loop
       invoke  TranslateMessage,msg
       invoke  DispatchMessage,msg
       jmp     msg_loop
 
 error:
       invoke  MessageBox,NULL,_error,NULL,MB_ICONERROR+MB_OK
 
 end_loop:
       invoke  ExitProcess,[msg.wParam]
 
proc WindowProc2 uses ebx esi edi, hwnd,umsg,wparam,lparam
    invoke  DefWindowProc,[hwnd],[umsg],[wparam],[lparam]
 
    cmp     [umsg], LVM_INSERTITEM
    je      .beep
    ret
 
    .beep:
    invoke     MessageBeep, MB_OK
    ret
endp
 
proc WindowProc uses ebx esi edi, hwnd,wmsg,wparam,lparam
       cmp     [wmsg],WM_DESTROY
       je      .wmdestroy
 
 .defwndproc:
       invoke  DefWindowProc,[hwnd],[wmsg],[wparam],[lparam]
 
       jmp     .finish
 .wmdestroy:
       invoke  DestroyWindow,[dlglvhwnd]
       invoke  PostQuitMessage,0
       xor     eax,eax
 .finish:
       ret
endp
 
 
 
section '.idata' import data readable writeable
 
 library kernel32,'KERNEL32.DLL',\
         user32,'USER32.DLL',\
         shell32,'SHELL32.DLL'
 
 include 'api\kernel32.inc'
 include 'api\user32.inc'
 include 'api\shell32.inc'  
Saludos y gracias por las respuestas ;)
En línea

'-     coco
"Te voy a romper el orto"- Las hemorroides
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.241


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Consulta sobre como crear un ListView32
« Respuesta #9 en: 15 Marzo 2010, 22:53 »

Detesto FASM ... al menos tenes que llamar a InitCommonControls/InitCommonControlsEx (fue en lo primero que pense al leer el hilo pero la explicacion me confundio, no se creaba el control ...), CreateWindowEx en createlv devuelve 0.

Sigo viendo, esto tambien esta mal:
invoke  SendMessage,[dlglvhwnd], LVM_INSERTITEM,0,[lvi]
invoke  SendMessage,[dlglvhwnd], LVM_INSERTITEM,0, lvi

Lo mismo para la columna (lvc no [lvc]) y sacando WindowProc2 ya podes seguir  ::)
« Última modificación: 16 Marzo 2010, 00:04 por Eternal Idol » En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón.
el_c0c0

Desconectado Desconectado

Mensajes: 298


Ver Perfil
Re: Consulta sobre como crear un ListView32
« Respuesta #10 en: 16 Marzo 2010, 04:14 »

Detesto FASM ... al menos tenes que llamar a InitCommonControls/InitCommonControlsEx (fue en lo primero que pense al leer el hilo pero la explicacion me confundio, no se creaba el control ...), CreateWindowEx en createlv devuelve 0.

Sigo viendo, esto tambien esta mal:
invoke  SendMessage,[dlglvhwnd], LVM_INSERTITEM,0,[lvi]
invoke  SendMessage,[dlglvhwnd], LVM_INSERTITEM,0, lvi

Lo mismo para la columna (lvc no [lvc]) y sacando WindowProc2 ya podes seguir  ::)

Bien, agregue el initcommoncontrols y initcommoncontrolsex con el parametro ICC_LISTVIEW_CLASSES, pero no me va. Ah, tambien cambie de [lvi] a lvi. Tambien saque la linea de SetWindowLong,[dlglvhwnd], GWL_WNDPROC, WindowProc2,pero igual. Que rayos pasa?
Saludos !
En línea

'-     coco
"Te voy a romper el orto"- Las hemorroides
bizco


Desconectado Desconectado

Mensajes: 698


Ver Perfil
Re: Consulta sobre como crear un ListView32
« Respuesta #11 en: 16 Marzo 2010, 04:48 »




Código:
start:
       [b] invoke   InitCommonControls [/b]
        invoke  GetModuleHandle,0
        mov     [wc.hInstance],eax
        invoke  LoadIcon,0,IDI_APPLICATION
        .......
        .......

No me va, no es una explicacion. mira justo en el call que devuelve la funcion. si actualizaste el codigo lo mejor es que lo pongas aqui y podemos ser mas concretos.



No te voy a dar el codigo, pero fijate bien en tu codigo. ¿que va primero el huevo o la gallina?

En pocas palabras intentas meter un item cuando aun no existe la columna que lo contiene.

Columna1            Columna2           ColumnaX

Elemento1            sub                     sub

PD ya no se cuantas veces edite,  ese "problema" te viene pq usas  LVS_REPORT ¿quieres ese estilo para tu lv?
« Última modificación: 16 Marzo 2010, 05:26 por ctlon » En línea
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.241


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Consulta sobre como crear un ListView32
« Respuesta #12 en: 16 Marzo 2010, 07:56 »

Bien, agregue el initcommoncontrols y initcommoncontrolsex con el parametro ICC_LISTVIEW_CLASSES, pero no me va. Ah, tambien cambie de [lvi] a lvi. Tambien saque la linea de SetWindowLong,[dlglvhwnd], GWL_WNDPROC, WindowProc2,pero igual. Que rayos pasa?
Saludos !

¿Y esta parte?: "Lo mismo para la columna (lvc no [lvc])", tenes que agregar la columna, usa elcodigo que tenias antes para eso pero con lvc (yo lo copie del primer mensaje del hilo).
En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón.
el_c0c0

Desconectado Desconectado

Mensajes: 298


Ver Perfil
Re: Consulta sobre como crear un ListView32
« Respuesta #13 en: 18 Marzo 2010, 18:32 »

Bien, agregue el initcommoncontrols y initcommoncontrolsex con el parametro ICC_LISTVIEW_CLASSES, pero no me va. Ah, tambien cambie de [lvi] a lvi. Tambien saque la linea de SetWindowLong,[dlglvhwnd], GWL_WNDPROC, WindowProc2,pero igual. Que rayos pasa?
Saludos !

¿Y esta parte?: "Lo mismo para la columna (lvc no [lvc])", tenes que agregar la columna, usa elcodigo que tenias antes para eso pero con lvc (yo lo copie del primer mensaje del hilo).

Bien, no habia posteado resultados porque no estuve en casa. Si, quiero LVS_REPORT. Ya lo solucione, habia que usar Initcommoncontrols sin el Ex. Ahora lo que no entiendo es porque solo toma la letra L de la variable LV32, imagino que es por el tema de Wide o Ansi. No?

Muchisimas gracias gente :D
En línea

'-     coco
"Te voy a romper el orto"- Las hemorroides
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.241


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Consulta sobre como crear un ListView32
« Respuesta #14 en: 18 Marzo 2010, 18:43 »

De nadas  ::)

Seguramente; yo lo habia cambiado asi: include 'win32a.inc' probando otras cosas por eso me olvide y no lo mencione (a mi me sale LV32).
En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Re: consulta sobre utilizacion SysLink y LITEM Struct (SOLUCIONADO)
Programación C/C++
xkiz ™ 4 610 Último mensaje 9 Julio 2011, 23:57
por BlackZeroX (Astaroth)
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines