| 
	
		|  Autor | Tema: Problema con WINAPI  (Leído 4,147 veces) |  
	| 
			| 
					
						| ..:ALT3RD:.. 
								
								 Desconectado 
								Mensajes: 205
								
								 
								C++ Programmer
								
								
								
								
								
								   | 
 
Bueno,  pues hoy empeze con la WINAPI (un rollazo por cierto    ) y tengo un error al copilar un sencillo menu en CODE::BLOCKS. No se donde esta el error asi que agradecería que me lo dijesen. #include <windows.h>const int MENSAJE = 1000;
 /*  Declare Windows procedure  */
 LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
 
 /*  Make the class name into a global variable  */
 char szClassName[ ] = "CodeBlocksWindowsApp";
 
 int WINAPI WinMain (HINSTANCE hThisInstance,
 HINSTANCE hPrevInstance,
 LPSTR lpszArgument,
 int nCmdShow)
 {
 HWND hwnd;               /* This is the handle for our window */
 MSG messages;            /* Here messages to the application are saved */
 WNDCLASSEX wincl;        /* Data structure for the windowclass */
 
 /* The Window structure */
 wincl.hInstance = hThisInstance;
 wincl.lpszClassName = szClassName;
 wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
 wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
 wincl.cbSize = sizeof (WNDCLASSEX);
 
 /* Use default icon and mouse-pointer */
 wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
 wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
 wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
 wincl.lpszMenuName = NULL;                 /* No menu */
 wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
 wincl.cbWndExtra = 0;                      /* structure or the window instance */
 /* Use Windows's default colour as the background of the window */
 wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
 
 /* Register the window class, and if it fails quit the program */
 if (!RegisterClassEx (&wincl))
 return 0;
 
 /* The class is registered, let's create the program*/
 hwnd = CreateWindowEx (
 0,                   /* Extended possibilites for variation */
 szClassName,         /* Classname */
 "Pruebas tranquiiilo",       /* Title Text */
 WS_OVERLAPPEDWINDOW, /* default window */
 CW_USEDEFAULT,       /* Windows decides the position */
 CW_USEDEFAULT,       /* where the window ends up on the screen */
 544,                 /* The programs width */
 375,                 /* and height in pixels */
 HWND_DESKTOP,        /* The window is a child-window to desktop */
 NULL,                /* No menu */
 hThisInstance,       /* Program Instance handler */
 NULL                 /* No Window Creation data */
 );
 
 /* Make the window visible on the screen */
 ShowWindow (hwnd, nCmdShow);
 
 /* Run the message loop. It will run until GetMessage() returns 0 */
 while (GetMessage (&messages, NULL, 0, 0))
 {
 /* Translate virtual-key messages into character messages */
 TranslateMessage(&messages);
 /* Send message to WindowProcedure */
 DispatchMessage(&messages);
 }
 
 /* The program return-value is 0 - The value that PostQuitMessage() gave */
 return messages.wParam;
 }
 
 
 /*  This function is called by the Windows function DispatchMessage()  */
 
 LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 {
 switch (message)                  /* handle the messages */
 {
 case WM_CREATE:
 
 HMENU menu1,menu2;
 
 menu1= CreateMenu();
 menu2= CreateMenu();
 
 AppendMenu (menu2, MF_STRING, MENSAJE, "mensaje");
 
 AppendMenu (menu1, MF_STRING | MF_POPUP| (UINT) menu2, "menu");
 
 SetMenu (hwnd, menu1);
 
 break;
 
 
 case WM_DESTROY:
 PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
 break;
 default:                      /* for messages that we don't deal with */
 return DefWindowProc (hwnd, message, wParam, lParam);
 }
 
 return 0;
 }
Ese es el codigo entero, y la parte donde me falla es esta:ç     switch (message)                  /* handle the messages */{
 case WM_CREATE:
 
 HMENU menu1,menu2;
 
 menu1= CreateMenu();
 menu2= CreateMenu();
 
 AppendMenu (menu2, MF_STRING, MENSAJE, "mensaje");
 
 AppendMenu (menu1, MF_STRING | MF_POPUP| (UINT) menu2, "menu");
 
 SetMenu (hwnd, menu1);
 
 break;
 
 
 case WM_DESTROY:
 PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
 break;
 default:                      /* for messages that we don't deal with */
 return DefWindowProc (hwnd, message, wParam, lParam);
 }
 
 return 0;
Y la verdad no encuentro el error, espero que vosotros me lo digais. Gracias y Un salu2! Por cierto el error que me da es este: C:\Users\Celia\Pictures\iPod Photo Cache\GUI\main.cpp||In function 'LRESULT WindowProcedure(HWND__*, UINT, WPARAM, LPARAM)':|C:\Users\Celia\Pictures\iPod Photo Cache\GUI\main.cpp|87|error: invalid conversion from 'const char*' to 'UINT_PTR'|
 C:\Users\Celia\Pictures\iPod Photo Cache\GUI\main.cpp|87|error: too few arguments to function 'BOOL AppendMenuA(HMENU__*, UINT, UINT_PTR, const CHAR*)'|
 c:\mingw\bin\..\lib\gcc\mingw32\4.5.2\..\..\..\..\include\winuser.h|3462|note: declared here|
 ||=== Build finished: 3 errors, 0 warnings ===|
 
 
 |  
						| 
								|  |  
								| « Última modificación: 25 Agosto 2011, 15:37 pm por ..:ALT3RD:.. » |  En línea | 
 
 "Mañana sabrás que hoy no sabes nada" |  |  |  | 
			| 
					
						| Eternal Idol 
								Kernel coder ajeno al tiempo 
								Moderador
								      Desconectado 
								Mensajes: 5.970
								
								 
								Israel nunca torturó niños, ni lo volverá a hacer.
								
								
								
								
								
								     | 
 
Aca parece que cambiaste una coma por un or:
 AppendMenu (menu1, MF_STRING | MF_POPUP| (UINT) menu2, "menu");
 
 AppendMenu (menu1, MF_STRING | MF_POPUP, (UINT) menu2, "menu");
 
 PD. Lo dice todo en el output del compilador y eso que no sabia cual era la linea 87.
 
 
 |  
						| 
								|  |  
								|  |  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
 |  |  |  | 
			| 
					
						| ..:ALT3RD:.. 
								
								 Desconectado 
								Mensajes: 205
								
								 
								C++ Programmer
								
								
								
								
								
								   | 
 
Vaya error mas tonto, Gracias!    |  
						| 
								|  |  
								|  |  En línea | 
 
 "Mañana sabrás que hoy no sabes nada" |  |  |  | 
			| 
					
						| Eternal Idol 
								Kernel coder ajeno al tiempo 
								Moderador
								      Desconectado 
								Mensajes: 5.970
								
								 
								Israel nunca torturó niños, ni lo volverá a hacer.
								
								
								
								
								
								     | 
 
De nadas    |  
						| 
								|  |  
								|  |  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
 |  |  |  | 
			| 
					
						| Alien-Z 
								
								 Desconectado 
								Mensajes: 177
								
								 
								C++ Programmer
								
								
								
								
								
								   | 
 
Estoy haciendo un ejemplo similar y ami me da error en esta parte (señalo en rojo): LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
 switch (message)                  /* handle the messages */
 {
 case WM_CREATE:
 HMENU menu1 = CreateMenu();
 HMENU menu2 = CreateMenu();
 AppendMenu(menu2, MF_STRING, MN_MENSAJE, "&Mensaje");
 AppendMenu(menu2, MF_STRING, MN_SALIR, "&Salir");
 AppendMenu(menu1, MF_STRING | MF_POPUP, (UINT)menu2, "&MiMenu");
 SetMenu (hwnd, menu1);
 break;
 case WM_DESTROY:
 PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
 break;
 default:                      /* for messages that we don't deal with */
 return DefWindowProc (hwnd, message, wParam, lParam);
 }
 
 return 0;
 }
 Este es el código completo: #include <windows.h> const int MN_MENSAJE=1025;const int MN_SALIR=1026;//poner el nombre que quieran/*  Declare Windows procedure  */LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); /*  Make the class name into a global variable  */char szClassName[ ] = "CodeBlocksWindowsAp p"; int WINAPI WinMain (HINSTANCE hThisInstance,                     HINSTANCE hPrevInstance,                     LPSTR lpszArgument,                     int nCmdShow){    HWND hwnd;               /* This is the handle for our window */    MSG messages;            /* Here messages to the application are saved */    WNDCLASSEX wincl;        /* Data structure for the windowclass */     /* The Window structure */    wincl.hInstance = hThisInstance;    wincl.lpszClassName = szClassName;    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */    wincl.cbSize = sizeof (WNDCLASSEX);     /* Use default icon and mouse-pointer */    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);    wincl.lpszMenuName = NULL;                 /* No menu */    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */    wincl.cbWndExtra = 0;                      /* structure or the window instance */    /* Use Windows's default colour as the background of the window */    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;     /* Register the window class, and if it fails quit the program */    if (!RegisterClassEx (&wincl))        return 0;     /* The class is registered, let's create the program*/    hwnd = CreateWindowEx (           0,                   /* Extended possibilites for variation */           szClassName,         /* Classname */           "Code::Blocks Template Windows App",       /* Title Text */           WS_OVERLAPPEDWINDOW, /* default window */           CW_USEDEFAULT,       /* Windows decides the position */           CW_USEDEFAULT,       /* where the window ends up on the screen */           544,                 /* The programs width */           375,                 /* and height in pixels */           HWND_DESKTOP,        /* The window is a child-window to desktop */           NULL,                /* No menu */           hThisInstance,       /* Program Instance handler */           NULL                 /* No Window Creation data */           );     /* Make the window visible on the screen */    ShowWindow (hwnd, nCmdShow);     /* Run the message loop. It will run until GetMessage() returns 0 */    while (GetMessage (&messages, NULL, 0, 0))    {        /* Translate virtual-key messages into character messages */        TranslateMessage(&messages);        /* Send message to WindowProcedure */        DispatchMessage(&messages);    }     /* The program return-value is 0 - The value that PostQuitMessage() gave */    return messages.wParam;}  /*  This function is called by the Windows function DispatchMessage()  */ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){    switch (message)                  /* handle the messages */    {       case WM_CREATE:            HMENU menu1 = CreateMenu();            HMENU menu2 = CreateMenu();            AppendMenu(menu2, MF_STRING, MN_MENSAJE, "&Mensaje");            AppendMenu(menu2, MF_STRING, MN_SALIR, "&Salir");            AppendMenu(menu1, MF_STRING | MF_POPUP, (UINT)menu2, "&MiMenu");            SetMenu (hwnd, menu1);            break;        case WM_DESTROY:            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */            break;        default:                      /* for messages that we don't deal with */            return DefWindowProc (hwnd, message, wParam, lParam);    }     return 0;} 
 A ver si alguien puede decirme dónde está el fallo. Saludos. |  
						| 
								|  |  
								| « Última modificación: 26 Agosto 2011, 20:26 pm por Alien-Z » |  En línea | 
 
 |  |  |  | 
			| 
					
						| Queta 
								
								 Desconectado 
								Mensajes: 267
								
								   | 
 
switch(message){	case WM_CREATE:	{		HMENU menu1 = CreateMenu();		HMENU menu2 = CreateMenu(); 		AppendMenu(menu2, MF_STRING, MN_MENSAJE, "&Mensaje"); 		AppendMenu(menu2, MF_STRING, MN_SALIR, "&Salir"); 		AppendMenu(menu1, MF_STRING | MF_POPUP, (UINT)menu2, "&MiMenu"); 		SetMenu(hwnd, menu1); 		break;	} 	case WM_DESTROY:		PostQuitMessage(0);        		break; 	default:                      		return DefWindowProc(hwnd, message, wParam, lParam);}
 Haz esto. |  
						| 
								|  |  
								| « Última modificación: 26 Agosto 2011, 20:56 pm por Queta » |  En línea | 
 
 "Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein. |  |  |  | 
			| 
					
						| Alien-Z 
								
								 Desconectado 
								Mensajes: 177
								
								 
								C++ Programmer
								
								
								
								
								
								   | 
 
Vaya la leche! las llaves! Es lo que tiene estar concentrado en comprender los nuevos códigos, te acabas olvidando de detalles tontos que has usado 4543 veces.
 Gracias Queta. Saludos.
 |  
						| 
								|  |  
								| « Última modificación: 26 Agosto 2011, 23:11 pm por Alien-Z » |  En línea | 
 
 |  |  |  | 
			| 
					
						| Queta 
								
								 Desconectado 
								Mensajes: 267
								
								   | 
 
De nada. Realmente, switch no necesita llaves, pero sí en este caso en particular. |  
						| 
								|  |  
								|  |  En línea | 
 
 "Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein. |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | Equivalencia de función WINAPI unsigned int WINAPI myRun en Windows con Ubuntu Programación C/C++
 | bertamax | 2 | 3,480 |  7 Agosto 2010, 16:27 pm por bertamax
 |  
						|   |   | Problemas con WinApi Programación C/C++
 | Nobody12 | 0 | 3,367 |  10 Enero 2011, 21:47 pm por Nobody12
 |  
						|   |   | Añadir sockets en winapi Programación C/C++
 | d00ze13 | 2 | 3,043 |  30 Noviembre 2011, 20:00 pm por d00ze13
 |  
						|   |   | c++ winapi microfono Programación C/C++
 | shiro51 | 0 | 2,243 |  16 Abril 2013, 01:59 am por shiro51
 |  
						|   |   | [C/C++] WinAPI -> Problema con SetWinEventHook Programación C/C++
 | someRandomCode | 0 | 1,727 |  7 Noviembre 2014, 15:53 pm por someRandomCode
 |    |