elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  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 12,916 veces)
el_c0c0


Desconectado Desconectado

Mensajes: 307


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

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
  1.  createlv:
  2.         invoke CreateWindowEx,0,_dlgLV,NULL,WS_CHILD + WS_TABSTOP + LVS_REPORT + WS_VISIBLE,5,5,240,155,[dlghwnd],0,[wc.hInstance],NULL
  3.        mov    [dlglvhwnd],eax
  4.        invoke ShowWindow,eax,SW_SHOW
  5.        invoke  SetWindowLong,[dlglvhwnd], GWL_WNDPROC, WindowProc2                
  6.  
  7.        ; poner el lv en modo list
  8.        invoke GetWindowLong,[dlglvhwnd],GWL_STYLE
  9.        mov    [tmp], eax
  10.        mov    [tmp], tmp+LVS_LIST-LVS_ICON-LVS_SMALLICON-LVS_REPORT
  11.        invoke SetWindowLong,[dlglvhwnd],GWL_STYLE,[tmp]
  12.  
  13.        ; agregar columna
  14.        invoke lstrlen,_cap1           ; len del caption
  15.        mov    [hdi.cchTextMax], eax   ; len
  16.        mov    [hdi.pszText], _cap1    ; caption
  17.        mov    [hdi.cxy], 100          ; width
  18.        mov    [hdi.fmt], HDF_STRING+HDF_CENTER ; formato
  19.        mov    [hdi.mask], HDI_TEXT+HDI_WIDTH+HDI_FORMAT  ; mask
  20.  
  21.        invoke SendMessage,[dlglvhwnd],LVM_INSERTCOLUMN,0,[lvc] ;
  22.        invoke SendMessage,[dlglvhwnd],4127,0,0                 ; buscar header dentro del lview
  23.        mov    [dlglvheader], eax                               ; guardo resultado
  24.        invoke SendMessage,eax,HDM_SETITEM,0,[hdi]              ; seteo el item en el header
y tengo declarado asi:
Código
  1.  _dlgLV TCHAR 'SysListView32',0
  2.  _cap1 TCHAR 'LV32',0
  3.  
  4.  dlglvheader dd ?
  5.  dlglvhwnd dd ?
  6.  
  7.  tmp dd ?
  8.  
  9.  lvc LV_COLUMN
  10.  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 pm por el_c0c0 » En línea

'-     coco
"Te voy a romper el orto"- Las hemorroides
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.517


Diviértete crackeando, que para eso estamos!


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

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: 307


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

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
  1.   LOCAL lvc:LV_COLUMN
  2.   mov lvc.imask,LVCF_TEXT+LVCF_WIDTH
  3.   mov lvc.pszText,offset Heading1
  4.   mov lvc.lx,150
  5.   invoke SendMessage,hList, LVM_INSERTCOLUMN,0,addr lvc
yo lo tengo asi:
Código
  1.        mov     [lvc.mask], LVCF_TEXT or LVCF_WIDTH
  2.        mov     [lvc.pszText], _cap1 ; aca tengo duda de que esto sea asi
  3.        mov     [lvc.cx], 50
  4.        invoke  SendMessage, [dlglvhwnd], LVM_INSERTCOLUMN, 0, [lvc]

y para el tema de agregar un item en ese codigo esta asi:
Código
  1.  mov lvi.imask,LVIF_TEXT
  2.  inc lvi.iSubItem
  3.  invoke wsprintf,addr buffer, addr template,[edi].nFileSizeLow
  4.  lea eax,buffer
  5.  mov lvi.pszText,eax
  6.  invoke SendMessage,hList, LVM_INSERTITEM,0, addr lvi
y yo por mi parte lo tengo como
Código
  1.        mov     [lvi.iItem], 0
  2.        mov     [lvi.iSubItem], 0
  3.        mov     [lvi.mask], LVIF_TEXT
  4.        mov     [lvi.pszText], _cap1
  5.        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
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.517


Diviértete crackeando, que para eso estamos!


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

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: 307


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

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
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


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

¿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: 307


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

¿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 pm por el_c0c0 » En línea

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

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


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

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: 307


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

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
  1. format PE GUI 4.0
  2. entry start
  3.  
  4. include 'win32w.inc'
  5.  
  6. section '.data' data readable writeable
  7.  
  8.  _class TCHAR 'CocusUI®',0
  9.  _title TCHAR 'Window de prueba',0
  10.  _error TCHAR 'Startup failed.',0
  11.  _dlgLV TCHAR 'SysListView32',0
  12.  _cap1 TCHAR 'LV32',0
  13.  
  14.  dlglvheader dd ?
  15.  dlglvhwnd dd ?
  16.  dlghwnd dd ?
  17.  dlghdc dd ?
  18.  tmp dd ?
  19.  
  20.  wc WNDCLASS 0,WindowProc,0,0,NULL,NULL,NULL,COLOR_BTNFACE+1,NULL,_class
  21.  
  22.  msg MSG
  23.  lvi LV_ITEM
  24.  lvc LV_COLUMN
  25.  hdi HD_ITEM
  26.  
  27. section '.text' code readable executable
  28.  
  29.  start:
  30.  
  31.        invoke  GetModuleHandle,0
  32.        mov     [wc.hInstance],eax
  33.        invoke  LoadIcon,0,IDI_APPLICATION
  34.        mov     [wc.hIcon],eax
  35.        invoke  LoadCursor,0,IDC_ARROW
  36.        mov     [wc.hCursor],eax
  37.        invoke  RegisterClass,wc
  38.        test    eax,eax
  39.        jz      error
  40.  
  41.        invoke  CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU,128,128,256,192,NULL,NULL,[wc.hInstance],NULL
  42.        test    eax,eax
  43.        jz      error
  44.  
  45.        mov     [dlghwnd],eax
  46.        invoke  GetDC,eax
  47.        mov     [dlghdc],eax
  48.  
  49.        jmp     createlv
  50.  
  51.  
  52.  createlv:
  53.        invoke CreateWindowEx,0,_dlgLV,NULL,WS_CHILD + WS_TABSTOP + WS_VISIBLE + LVS_REPORT,5,5,240,155,[dlghwnd],0,[wc.hInstance],NULL
  54.        mov    [dlglvhwnd],eax
  55.        invoke SetWindowLong,[dlglvhwnd], GWL_WNDPROC, WindowProc2
  56.        invoke ShowWindow,[dlglvhwnd],SW_SHOW
  57.  
  58.        mov     [lvi.mask], LVIF_TEXT ;or LVIF_STATE
  59.        mov     [lvi.iItem], 0
  60.        mov     [lvi.iSubItem], 0
  61.        mov     [lvi.pszText], _cap1
  62.  
  63.        invoke  SendMessage,[dlglvhwnd], LVM_INSERTITEM,0,[lvi]
  64.  
  65.        cmp     eax,-1
  66.        ja      msg_loop
  67.        invoke  MessageBeep, MB_OK
  68.  
  69.  msg_loop:
  70.        invoke  GetMessage,msg,NULL,0,0
  71.        cmp     eax,1
  72.        jb      end_loop
  73.        jne     msg_loop
  74.        invoke  TranslateMessage,msg
  75.        invoke  DispatchMessage,msg
  76.        jmp     msg_loop
  77.  
  78.  error:
  79.        invoke  MessageBox,NULL,_error,NULL,MB_ICONERROR+MB_OK
  80.  
  81.  end_loop:
  82.        invoke  ExitProcess,[msg.wParam]
  83.  
  84. proc WindowProc2 uses ebx esi edi, hwnd,umsg,wparam,lparam
  85.     invoke  DefWindowProc,[hwnd],[umsg],[wparam],[lparam]
  86.  
  87.     cmp     [umsg], LVM_INSERTITEM
  88.     je      .beep
  89.     ret
  90.  
  91.     .beep:
  92.     invoke     MessageBeep, MB_OK
  93.     ret
  94. endp
  95.  
  96. proc WindowProc uses ebx esi edi, hwnd,wmsg,wparam,lparam
  97.        cmp     [wmsg],WM_DESTROY
  98.        je      .wmdestroy
  99.  
  100.  .defwndproc:
  101.        invoke  DefWindowProc,[hwnd],[wmsg],[wparam],[lparam]
  102.  
  103.        jmp     .finish
  104.  .wmdestroy:
  105.        invoke  DestroyWindow,[dlglvhwnd]
  106.        invoke  PostQuitMessage,0
  107.        xor     eax,eax
  108.  .finish:
  109.        ret
  110. endp
  111.  
  112.  
  113.  
  114. section '.idata' import data readable writeable
  115.  
  116.  library kernel32,'KERNEL32.DLL',\
  117.          user32,'USER32.DLL',\
  118.          shell32,'SHELL32.DLL'
  119.  
  120.  include 'api\kernel32.inc'
  121.  include 'api\user32.inc'
  122.  include 'api\shell32.inc'  
Saludos y gracias por las respuestas ;)
En línea

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

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


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

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 am 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
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 3,573 Último mensaje 9 Julio 2011, 23:57 pm
por BlackZeroX
Consulta sobre como crear un juego en Flash
Desarrollo Web
TheEGG 89 0 1,813 Último mensaje 28 Junio 2012, 12:05 pm
por TheEGG 89
consulta sobre crear disco de arranque [usb]
GNU/Linux
xkiz ™ 0 2,120 Último mensaje 12 Julio 2013, 03:11 am
por xkiz ™
Git consulta sobre el archivo .gitignore [Solucionado]
Programación General
Pablo Videla 0 1,846 Último mensaje 18 Marzo 2015, 19:09 pm
por Pablo Videla
Consulta sobre crear un Batch
Scripting
MudexID 0 1,835 Último mensaje 7 Octubre 2015, 18:23 pm
por MudexID
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines