Autor
|
Tema: Problema con WINAPI (Leído 3,798 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
Moderador
Desconectado
Mensajes: 5.969
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
Moderador
Desconectado
Mensajes: 5.969
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,134
|
7 Agosto 2010, 16:27 pm
por bertamax
|
|
|
Problemas con WinApi
Programación C/C++
|
Nobody12
|
0
|
3,167
|
10 Enero 2011, 21:47 pm
por Nobody12
|
|
|
Añadir sockets en winapi
Programación C/C++
|
d00ze13
|
2
|
2,832
|
30 Noviembre 2011, 20:00 pm
por d00ze13
|
|
|
c++ winapi microfono
Programación C/C++
|
shiro51
|
0
|
1,987
|
16 Abril 2013, 01:59 am
por shiro51
|
|
|
[C/C++] WinAPI -> Problema con SetWinEventHook
Programación C/C++
|
someRandomCode
|
0
|
1,551
|
7 Noviembre 2014, 15:53 pm
por someRandomCode
|
|