| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
Lupin
Registrado: 23 Jun 2007 Mensajes: 5
| Publicado: 23/06/2007 4:29 am | | | Título: Problemas con dev c++ |
| Hola buenas, soy nuevo en esto de programacion. Mi problema esta en que estoy haciendo una aplicacion de windows. He intentado poner un menu donde salga la opcion de añadir i la de salir. Este es el codigo fuente:
.cpp:
#include <windows.h> #include "main.h"
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
char szClassName[ ] = "WindowsApp";
int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{ HWND hwnd; MSG messages; WNDCLASSEX wincl;
wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof (WNDCLASSEX);
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0;
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
if (!RegisterClassEx (&wincl)) return 0;
hwnd = CreateWindowEx ( 0, szClassName, "M.A.S.D.E.L. Clan Beta.1", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL, hThisInstance, NULL );
ShowWindow (hwnd, nFunsterStil);
while (GetMessage (&messages, NULL, 0, 0)) {
TranslateMessage(&messages);
DispatchMessage(&messages); }
return messages.wParam; }
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DESTROY: PostQuitMessage (0); break; default: return DefWindowProc (hwnd, message, wParam, lParam); }
return 0; }
.h:
#define CM_ARCHIVO_AÑADIR 101 #define CM_ARCUIVO_SALIR 100
.rc:
#include "main.h"
MAINMENU MENU { POPUP "&ARCHIVO" { MENUITEM "&AÑADIR" MENUITEM SEPARATOR MENUITEM "&SALIR" } }
Pero al compilar me da un error. si me pudieran ayudar. Gracias. |
|
| Volver arriba | |
 |
yoshi28012007
Registrado: 10 Jul 2007 Mensajes: 1
| Publicado: 10/07/2007 9:02 pm | | | Título: |
| Espero q esto te Ayude:
void InsertarMenu(HWND win){ HMENU HMenu1; HMENU HMenu2;
HMenu1= CreateMenu(); HMenu2= CreateMenu(); AppendMenu(HMenu2,MF_STRING,100,"&Principal"); AppendMenu(HMenu2,MF_SEPARATOR,0,NULL); AppendMenu(HMenu2,MF_STRING,101,"&Ejecutar"); AppendMenu(HMenu1,MF_STRING|MF_POPUP,(UINT)HMenu2,"&Principal"); SetMenu(win,HMenu1); }
Esta Funcion Luego La llamas arriba : //SetMenu(hwnd,LoadMenu(instancia,"MENU")); //En caso q utilices otro.h InsertarMenu(hwnd); ShowWindow (hwnd, nFunsterStil);
//recuerda q primero dbes de declarar la funcion en zona de prototipo _________________ dasdsada |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3743 Ubicación: Mexico
| Publicado: 11/07/2007 7:44 am | | | Título: |
| Un ejemplo sencillo (en ingles) sobre como incluir un menu definido en un archivo de recursos se encuentra en el capitulo 6 Menus and icons del tutorial TheForger Win32 API Tutorial.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
|
Black_Tigger
Registrado: 14 Jul 2007 Mensajes: 3 Ubicación: Oaxca, MExico
| Publicado: 14/07/2007 10:41 am | | | Título: Espero te ayude |
| Hola Te voy amandar unos programas q te serviran Bastante
Enviame tu correo!!!
Esmas ponlo Visible mmmmmm |
|
| Volver arriba | |
 |
Lupin
Registrado: 23 Jun 2007 Mensajes: 5
| Publicado: 14/11/2007 9:33 am | | | Título: |
| Gracias, por todo; pero aora tengo otro problema.  quiero poner un boton que cuando cierro el programa me avise. he podido colocar l boton de aceptar que cuando lo clickas t cierra l programa pero no consigo colocar el boton de cancelar para no cerrar el programa.
el codigo donde lo quiero colocar:
case WM_CLOSE: MessageBox (NULL, "¿Estas seguro que quieres cerrar el programa?", "Atencion", MB_OK | MB_ICONINFORMATION); if (MB_OK, DestroyWindow (hwnd) ); break;
gracias de nuevo |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3743 Ubicación: Mexico
| Publicado: 14/11/2007 3:40 pm | | | Título: |
| Tendrias que explicarte con mas detalle y de una forma mas clara porque apenas se entiende lo que quieres hacer.
Los cambios a realizar a ese fragmento de codigo son:
1) Agregar el boton cancelar mediante la constante MB_OKCANCEL. 2) Almacenar el valor de retorno de la funcion. 3) Corregir el if ya que esta mal (no utilizas el operador de comparacion "=="). 4) Comparar con los valores IDOK, IDCANCEL, etc. mas informacion sobre esto en (para variar) MSDN.
Un programa sencillo de ejemplo:
| Código: | #include <windows.h> #include <stdio.h> #include <stdlib.h>
int main(void) { int r; r = MessageBox(NULL, "¿Cerrar?", "Test", MB_OKCANCEL); if (r == IDOK) puts("Se pulso \"OK\""); else /* r == IDCANCEL */ puts("Se pulso \"Cancel\""); return EXIT_SUCCESS; } |
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
|
Lupin
Registrado: 23 Jun 2007 Mensajes: 5
| Publicado: 15/11/2007 10:05 am | | | Título: |
| perdonar. lo que en principio quiero hacer es que cuando se sale del programa, que pregunte: "estas seguro que quieres salir" i t dos opciones aceptar i cancelar. esto ya lo he echo lo unico k m falta i no se ponerlo s un boton de cancelar. |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3743 Ubicación: Mexico
| Publicado: 15/11/2007 3:34 pm | | | Título: |
| Para presentar el boton "Cancelar" en una caja de mensajes tienes que utilizar como ya te explique una de las constantes que indiquen ese boton como MB_OKCANCEL, MB_YESNOCANCEL, etc.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
Lupin
Registrado: 23 Jun 2007 Mensajes: 5
| Publicado: 16/11/2007 5:33 am | | | Título: |
| | OK. muchas gracias |
|
| Volver arriba | |
 |
|
Lupin
Registrado: 23 Jun 2007 Mensajes: 5
| Publicado: 16/11/2007 5:50 am | | | Título: |
| Pues aora tngo otro problema . kiero qu cuando clike l boton d cancelar no m cierre l programa e intentado hacer varias pruebas pero no m sale. Os agradeceria muchisimo vuestra ayuda.
case WM_CLOSE: MessageBox (NULL, "¿Estas seguro que quieres cerrar el programa?", "Atencion", MB_OK | MB_OKCANCEL | MB_ICONINFORMATION); if (MB_OK, DestroyWindow (hwnd) ); else (NULL, MB_OKCANCEL); break;
Gracias i un saludo. |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3743 Ubicación: Mexico
| Publicado: 16/11/2007 6:36 am | | | Título: |
| En buen plan: necesitas seguir un buen curso (o leer un buen libro) sobre C porque tienes deficiencias muy importantes en tu manejo del lenguaje C.
En este lenguaje la coma es un operador secuencial y tiene una funcion pero esta NO ES la de comparar valores. Para comparar dos valores tienes que utilizar el operador de comparacion "==".
El fragmento de codigo corregido seria asi:
| Código: | int r;
/* ... */
case WM_CLOSE: r = MessageBox(NULL, "...", "...", MB_OKCANCEL); if (r == MB_OK) DestroyWindow(hwnd); break;
/* ... */ |
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
|
|