| 
	
		|  Autor | Tema: GUI y eventos  (Leído 5,922 veces) |  
	| 
			| 
					
						| fary | 
 
Hola, estoy creando una ventana con un litview y quiero detectar cuando se pulsa un boton sobre uno de los item del listview y sabe rque item es, tengo la ventana así:  Pero no consigo saber como hacer eso... un saludo!
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 Un byte a la izquierda. |  |  |  | 
			| 
					
						| Eternal Idol 
								Kernel coder ajeno al tiempo 
								Moderador
								      Desconectado 
								Mensajes: 5.970
								
								 
								Israel nunca torturó niños, ni lo volverá a hacer.
								
								
								
								
								
								     | 
 
Proba con:LVN_ITEMACTIVATE notification code (Windows) Remarks To obtain the items being activated, the receiving application should use the LVM_GETSELECTEDCOUNT  message to retrieve the number of items that are selected and then send the LVM_GETNEXTITEM  message with LVNI_SELECTED until all of the items have been retrieved. 
 
 |  
						| 
								|  |  
								|  |  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
 |  |  |  | 
			| 
					
						| fary | 
 
Creo que tengo mal la constante LVN_ITEMACTIVATE porque no me funciona... No he encontrado su valor en la msdn y la he tenido que obtener así: #include <windows.h>#include <stdio.h>#include <commctrl.h> #define LVN_ITEMACTIVATE (LVN_FIRST-14) int main(){    printf("0x%x",LVN_ITEMACTIVATE);    return 0;} 
 Y la uso así: miWM_NOTIFY:           mov eax,[lparam]           add eax,0x8           mov eax,[eax]  ; EAX = lparam->code             .if eax = 0xFFFFFF8E ; LVN_ITEMACTIVATE               invoke MessageBoxA,0,0,0,0   ; comprobamos que funciona.           .endif            jmp salirWPROC
 saludos! |  
						| 
								|  |  
								| « Última modificación: 16 Marzo 2013, 21:05 pm por mDrinky » |  En línea | 
 
 Un byte a la izquierda. |  |  |  | 
			| 
					
						| x64core 
								       
								
								 Desconectado 
								Mensajes: 1.908
								
								
								
								
								
								   | 
 
Item,Subitem:
 WM_NOTIFY->NM_RCLICK
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| fary | 
 
Item,Subitem:
 WM_NOTIFY->NM_RCLICK
 
 
 miWM_NOTIFY:           mov eax,[lparam]           add eax,0x8           mov eax,[eax]  ; EAX = lparam->code             .if eax = 0xFFFFFFFB ; NM_RCLICK               invoke MessageBoxA,0,0,0,0   ; comprobamos que funciona.           .endif            jmp salirWPROC
 Ahí me lo detecta bien el clic derecho pero no se me seleciona el item :S |  
						| 
								|  |  
								|  |  En línea | 
 
 Un byte a la izquierda. |  |  |  | 
			| 
					
						| x64core 
								       
								
								 Desconectado 
								Mensajes: 1.908
								
								
								
								
								
								   | 
 
miWM_NOTIFY:           mov eax,[lparam]           add eax,0x8           mov eax,[eax]  ; EAX = lparam->code             .if eax = 0xFFFFFFFB ; NM_RCLICK               invoke MessageBoxA,0,0,0,0   ; comprobamos que funciona.           .endif            jmp salirWPROC
 Ahí me lo detecta bien el clic derecho pero no se me seleciona el item :SY si llamas a Beep en lugar de Messagebox debido a que Windows da el foco inmediatamente al box de mensaje?    |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  |  |  | 
			| 
					
						| x64core 
								       
								
								 Desconectado 
								Mensajes: 1.908
								
								
								
								
								
								   | 
 
En realidad me referia que usando MessageBox window le da el foco al cuadro de texto no que Beep le daria el foco, Beep se usaria solo para saber que el EIP pasa por ahi. un winproc en C no tengo ningun problema, o talvez puedes explicar mejor lo que buscas o talvez lo encuentres en el winproc, nitemact tiene toda la information que estas pidiendo: // test onlyLRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
 {
 static   char           szColumnHeader[][12] = {" col1", "col2", "col3"};
 static   Item           ListItem[3];
 static   HWND           hWndListView;
 static   LV_ITEM        lv;
 int                     index;
 int                     iiWidth[3];
 LV_COLUMN               lvC;
 RECT                    rect;
 
 LV_DISPINFO             *Lvinfo;
 NMITEMACTIVATE          *nitemact;
 
 switch (iMsg)
 {
 case WM_CREATE :
 hWndListView = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW,"", WS_VISIBLE | WS_CHILD | LVS_REPORT | LVS_SHOWSELALWAYS,0, 0, 0, 0, hwnd,(HMENU)ID_LISTVIEW, NULL, NULL);
 ListView_SetExtendedListViewStyle(hWndListView, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
 
 iiWidth[0] = 100;
 iiWidth[1] = 100;
 iiWidth[2] = 100;
 
 lvC.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
 lvC.fmt = LVCFMT_LEFT;
 
 for(index = 0; index < 3; index++)
 {
 lvC.iSubItem = index;
 lvC.cx = iiWidth[index];
 lvC.pszText = szColumnHeader[index];
 ListView_InsertColumn(hWndListView,index,&lvC);
 }
 
 strcpy(ListItem[0].szItemNr, "item1");
 strcpy(ListItem[0].szItem, "subitem1");
 strcpy(ListItem[0].szItemDescription, "subitem1");
 
 strcpy(ListItem[1].szItemNr, "item2");
 strcpy(ListItem[1].szItem, "subitem2");
 strcpy(ListItem[1].szItemDescription, "subitem2");
 
 AdjustListView(hWndListView, &lv, index);
 break;
 
 case WM_SIZE :
 GetClientRect(hwnd, &rect);
 MoveWindow(hWndListView, 3, 3, rect.right - 6, rect.bottom - 6, 1);
 break;
 
 case WM_NOTIFY :
 switch(((LPNMnitemact)lParam)->code)
 {
 case NM_RCLICK :
 
 nitemact = (NMITEMACTIVATE *)lParam;
 break;
 case LVN_GETDISPINFO :
 Lvinfo = (LV_DISPINFO FAR*)lParam;
 if((((LPNMnitemact)lParam)->hwndFrom == hWndListView))
 {
 switch(Lvinfo->item.iSubItem)
 {
 case 0:
 Lvinfo->item.pszText =  ListItem[Lvinfo->item.iItem].szItemNr;
 break;
 case 1:
 Lvinfo->item.pszText = ListItem[Lvinfo->item.iItem].szItem;
 break;
 case 2:
 Lvinfo->item.pszText = ListItem[Lvinfo->item.iItem].szItemDescription;
 break;
 }
 break;
 }
 }
 
 break;
 
 case WM_CLOSE :
 DestroyWindow(hwnd);
 break;
 
 case WM_DESTROY :
 PostQuitMessage(0);
 break;
 }
 return DefWindowProc(hwnd, iMsg, wParam, lParam);
 }
 
 |  
						| 
								|  |  
								| « Última modificación: 17 Marzo 2013, 01:11 am por x64Core » |  En línea | 
 
 |  |  |  | 
			| 
					
						| fary | 
 
@x64Core ya se que Beep no le da el foco    . Lo que busco es saber cuando se ha clicado en el ListView y que item se a seleccionado. un saludo. |  
						| 
								|  |  
								|  |  En línea | 
 
 Un byte a la izquierda. |  |  |  | 
			| 
					
						| x64core 
								       
								
								 Desconectado 
								Mensajes: 1.908
								
								
								
								
								
								   | 
 
@x64Core ya se que Beep no le da el foco    . Lo que busco es saber cuando se ha clicado en el ListView y que item se a seleccionado. un saludo. Lee el codigo de arriba |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | Capturar eventos en Vb Ingeniería Inversa
 | shoulck | 3 | 3,276 |  11 Julio 2006, 20:13 pm por frankener1986
 |  
						|   |   | eventos Programación Visual Basic
 | abel_xtnt | 8 | 4,301 |  14 Octubre 2005, 21:12 pm por abel_xtnt
 |  
						|   |   | Eventos Ratón C# .NET (C#, VB.NET, ASP)
 | kargarof | 7 | 13,023 |  4 Julio 2008, 11:22 am por kargarof
 |  
						|   |   | Eventos en C++ Programación C/C++
 | HaX991 | 6 | 8,367 |  2 Agosto 2010, 10:51 am por HaX991
 |  
						|   |   | Eventos
							« 1 2 » .NET (C#, VB.NET, ASP)
 | TheGhost(Z) | 11 | 7,482 |  19 Enero 2011, 12:59 pm por [D4N93R]
 |    |