Autor
|
Tema: problema en dev c++ con windows.h (Leído 5,974 veces)
|
anfeli96
Desconectado
Mensajes: 3
|
Hola, tengo un problema con un código de interfaz gráfica que estoy creando en el cual no he podido crear paginas hijas o limpiar la pantalla para poner unas nuevas opciones, por favor alguien podría decirme como hacerlo gracias. Este es mi código: #include <windows.h> #include <sstream> using namespace std; /* La función ProcedimientoVentana() es necesaria porque es la encargada de recibir los eventos (movimientos del ratón, tecla, clics a un botón, etc). En este caso, solo monitorea el momento el que el usuario decide cerrar la ventana para descargar la aplicación de memoria */ HWND textbox; HWND Etiqueta; HWND hCTexto; void ventana_principal(HWND); void ventana_registroNuevo(HWND); void ventana_nueva(HWND hwnd); //void boton1; LRESULT CALLBACK ProcedimientoVentana(HWND hwnd, UINT mensaje, WPARAM wParam, LPARAM lParam) { switch (mensaje) { case WM_DESTROY:{ //salir de la aplicacion //MessageBox(hwnd, "¡Adiós mundo cruel!", "Cerrando...", MB_ICONERROR | MB_OK); PostQuitMessage (0);//Manda WM_QUIT a la cola de mensajes que hará //que el programa salga del bucle de mensajes return 0; break; } /*case WM_COMAND:{ switch(wParam){ case } break; }*/ case WM_CREATE: { ventana_principal(hwnd); } case WM_COMMAND: //Llamadas a funciones de cada boton { switch(LOWORD(wParam)) { case 2: { system ("cls"); ventana_registroNuevo( hwnd); break; } case 3: { //ventana_nueva(hwnd); //MessageBox(hwnd,"elemento","ESTA ES LA FUNCION RESTA",MB_OK);//CAJA DE TEXTO TITULO DE LA VENTANA E INTRUCCION DENTRO break; } case 4: { MessageBox(hwnd,"elemento","ESTA ES LA FUNCION RESTA",MB_OK);//CAJA DE TEXTO TITULO DE LA VENTANA E INTRUCCION DENTRO break; } case 5: { ShowWindow(hwnd, SW_SHOWDEFAULT); MessageBox(hwnd,"elemento","Eborro pantallaA",MB_OK);//CAJA DE TEXTO TITULO DE LA VENTANA E INTRUCCION DENTRO break; } case 6: //salir de la aplicacion { //MessageBox(hwnd, "¡Adiós !", "Cerrando...", MB_ICONERROR | MB_OK); PostQuitMessage (0);//Manda WM_QUIT a la cola de mensajes que hará //que el programa salga del bucle de mensajes return 0; } } } /*case WM_LBUTTONUP: { int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); ostringstream os; os << "Hizo clic con el botón izquierdo"; if (wParam == MK_CONTROL) os << " mientras oprimía la tecla CONTROL"; else if (wParam == MK_SHIFT) os << " mientras oprimía la tecla SHIFT"; os << "\n\nCoordenadas: " << xPos << ", " << yPos; MessageBox(hwnd, os.str().c_str(), "Clic!", MB_ICONINFORMATION | MB_OK); break; }*/ } return DefWindowProc (hwnd, mensaje, wParam, lParam); } /* Esta cadena se ocupa para la clase de ventana y la función CreateWindowEx() se refieran a un mismo nombre */ char szNombreAplicacion[] = "Ejercicio2"; int WINAPI WinMain(HINSTANCE hInstancia, HINSTANCE hInstanciaPrev, LPSTR lpLineaCmd, int nEstadoVentana) { //Los 4 pasos para crear una ventana... //1. Establecer los 12 campos de la "clase de ventana" WNDCLASSEX ventana; ventana.cbSize = sizeof(WNDCLASSEX); ventana.style = CS_HREDRAW | CS_VREDRAW; ventana.lpfnWndProc = ProcedimientoVentana; //recibe y maneja los eventos de la ventana como clics movimientos cierre de ventana etc. con punteros ventana.cbClsExtra = 0; ventana.cbWndExtra = 0; ventana.hInstance = hInstancia; ventana.hIcon = LoadIcon (NULL, IDI_APPLICATION); ventana.hCursor = LoadCursor (NULL, IDC_ARROW); ventana.hbrBackground = (HBRUSH) (COLOR_WINDOWTEXT+8);//CreateSolidBrush( RGB(0xa0, 0x60, 0xf8) ); ventana.lpszMenuName = NULL; ventana.lpszClassName = szNombreAplicacion;//nombre de la clase de ventana ventana.hIconSm = LoadIcon (NULL, IDI_APPLICATION); //2. Dar de alta en el sistema a la "clase de ventana" if( !RegisterClassEx(&ventana) ) { MessageBox(NULL, "No fue posible dar de alta a la ventana, abortando ejecución", "¡Error!", MB_ICONEXCLAMATION | MB_OK); return FALSE; } //3. Crear la ventana en base a la "clase de ventana" anteriormente registrada HWND hwnd; hwnd = CreateWindowEx( 1, //dwExEstilo szNombreAplicacion, //Nombre de clase de la ventana a la que pertenece "Tienda de videos", //Título de la ventana //variables que permiten editar intefaz con usiario habilitando o desabilitando botones WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU , //poner | despues de cada opcion y coma al final //WS_THICKFRAME | // WS_MINIMIZEBOX | //WS_MAXIMIZEBOX //WS_OVERLAPPEDWINDOW, //Tipo de ventana es igual a dwEstilo CW_USEDEFAULT, //Posición de la ventana en pantalla en "x" CW_USEDEFAULT, //Posición de la ventana en pantalla en "y" 500, //Ancho 450, //Alto HWND_DESKTOP, NULL, hInstancia, NULL); if(hwnd == NULL) { MessageBox(NULL, "Error al crear la ventana, abortando ejecución", "¡Error!", MB_ICONEXCLAMATION | MB_OK); return FALSE; } //4. Mostrar la ventana en pantalla ShowWindow(hwnd, SW_SHOWDEFAULT); //Necesario para manipular los mensajes o eventos de la ventana MSG mensaje; while(GetMessage(&mensaje, 0, 0, 0) > 0) //bucle de mensajes para cola de mensajes entrantes { TranslateMessage(&mensaje); DispatchMessage(&mensaje); } return mensaje.wParam; } void ventana_principal(HWND hwnd)//se crea ventana principal { //MessageBox(hwnd, "Se creó la ventana", "Ejemplo",MB_ICONINFORMATION | MB_OK); Etiqueta = CreateWindowEx(0, "STATIC", "MENU PRINCIPAL", WS_CHILD | WS_VISIBLE, 180,//posicion en x 200,//posicion en y 150,//ancho 30,//alto hwnd, NULL, 0,0 ); /*textbox= CreateWindow("edit", " Menu principal", //nombre de la ventana WS_BORDER | WS_CHILD| WS_VISIBLE, 120,//posicion en x 180,//posicion en y 115,//ancho 20,//alto hwnd, NULL,NULL,NULL);*/ CreateWindow("BUTTON", "Registro Nuevo", WS_VISIBLE//VIsIBILIDAD DEL OBJETO |WS_CHILD| WS_BORDER, //MARGEN AL TEXTO 90, //x 240,//y 130,//ancho 30,//alto hwnd, (HMENU)2,NULL,NULL ); CreateWindow("BUTTON", "Buscar pelicula", WS_VISIBLE//VIsIBILIDAD DEL OBJETO |WS_CHILD| WS_BORDER, 240, //x 240,//y 130,//ancho 30,//alto hwnd, (HMENU)3,NULL,NULL ); CreateWindow("BUTTON", "Editar Registro", WS_VISIBLE//VIsIBILIDAD DEL OBJETO |WS_CHILD| WS_BORDER, 90, //x 290,//y 130,//ancho 30,//alto hwnd, (HMENU)4,NULL,NULL ); CreateWindow("BUTTON", "Eliminar Registro", WS_VISIBLE//VIsIBILIDAD DEL OBJETO |WS_CHILD| WS_BORDER, 240, //x 290,//y 130,//ancho 30,//alto hwnd, (HMENU)5,NULL,NULL ); CreateWindow("BUTTON",//boton salir "Salir", WS_VISIBLE//VIsIBILIDAD DEL OBJETO |WS_CHILD| WS_BORDER, 180, //x 340,//y 110,//ancho 30,//alto hwnd, (HMENU)6,NULL,NULL ); } void ventana_registroNuevo(HWND hwnd)//se crea ventana para un registro nuevo { //MessageBox(hwnd, "Se creó la ventana", "Ejemplo",MB_ICONINFORMATION | MB_OK); Etiqueta = CreateWindowEx(0, "STATIC", "REGISTRO NUEVO", WS_CHILD | WS_VISIBLE, 170,//posicion en x 40,//posicion en y 150,//ancho 30,//alto hwnd, NULL, 0,0 ); Etiqueta = CreateWindowEx(0, "STATIC", "NOMBRE", WS_CHILD | WS_VISIBLE, 40,//posicion en x 80,//posicion en y 70,//ancho 30,//alto hwnd, NULL, 0,0 ); hCTexto = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL, 120, 80, 270, 25, hwnd, NULL, NULL, NULL); Etiqueta = CreateWindowEx(0, "STATIC", "DIRECTOR", WS_CHILD | WS_VISIBLE, 40,//posicion en x 120,//posicion en y 150,//ancho 30,//alto hwnd, NULL, 0,0 ); Etiqueta = CreateWindowEx(0, "STATIC", "FECHA DE LANZAMIENTO", WS_CHILD | WS_VISIBLE, 40,//posicion en x 160,//posicion en y 150,//ancho 30,//alto hwnd, NULL, 0,0 ); Etiqueta = CreateWindowEx(0, "STATIC", "PROTAGONISTA", WS_CHILD | WS_VISIBLE, 40,//posicion en x 200,//posicion en y 150,//ancho 30,//alto hwnd, NULL, 0,0 ); /*textbox= CreateWindow("edit", " Menu principal", //nombre de la ventana WS_BORDER | WS_CHILD| WS_VISIBLE, 120,//posicion en x 180,//posicion en y 115,//ancho 20,//alto hwnd, NULL,NULL,NULL);*/ CreateWindow("BUTTON",//boton salir "GUARDAR", WS_VISIBLE//VIsIBILIDAD DEL OBJETO |WS_CHILD| WS_BORDER, 120, //x 340,//y 110,//ancho 30,//alto hwnd, (HMENU)7,NULL,NULL ); } /*void ventana_nueva(HWND hwnd) { LRESULT CALLBACK ProcedimientoVentana(HWND hwnd, UINT mensaje, WPARAM wParam, LPARAM lParam) { CreateWindow("BUTTON",//boton salir "GUARDAR", WS_VISIBLE//VIsIBILIDAD DEL OBJETO |WS_CHILD| WS_BORDER, 120, //x 340,//y 110,//ancho 30,//alto hwnd, (HMENU)7,NULL,NULL ); } }*/
|
|
« Última modificación: 4 Diciembre 2014, 23:08 pm por Eternal Idol »
|
En línea
|
|
|
|
_Enko
|
Hola, creo que lo que estas buscando es crear Tabs/Pestañas o hacer ventanas hijas usado MDI.
Saludos
|
|
|
En línea
|
|
|
|
|
anfeli96
Desconectado
Mensajes: 3
|
si eso es lo que busco pero no entiendo como abrir 2 ventanas al tiempo, no se donde declarar la segunda ventana si me pueden explicar un poco mas de verdad se lo agradeceria
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
sólo agregue la creación de una segunda clase en tu código. El tema de la creación de ventanas en Windows es un asunto importante y creo que uno debería de sentarse a pensar en eso y leer un buen libro como este: http://www.amazon.com/Programming-Windows%C2%AE-Fifth-Developer-Reference/dp/157231995XEn el código he creado una nueva clase, no redirigi nada, al veces es conveniente crear nuevas clases o crear apartir de ya existentes todo va a depender de cómo será el diseño de tu aplicación. #include <windows.h> #include <sstream> using namespace std; /* La función ProcedimientoVentana() es necesaria porque es la encargada de recibir los eventos (movimientos del ratón, tecla, clics a un botón, etc). En este caso, solo monitorea el momento el que el usuario decide cerrar la ventana para descargar la aplicación de memoria */ HWND textbox; HWND Etiqueta; HWND hCTexto; void ventana_principal(HWND); void ventana_registroNuevo(HWND); void ventana_nueva(HWND hwnd); //void boton1; LRESULT CALLBACK ProcedimientoVentana(HWND hwnd, UINT mensaje, WPARAM wParam, LPARAM lParam) { switch (mensaje) { case WM_DESTROY:{ //salir de la aplicacion //MessageBox(hwnd, "¡Adiós mundo cruel!", "Cerrando...", MB_ICONERROR | MB_OK); PostQuitMessage(0);//Manda WM_QUIT a la cola de mensajes que hará //que el programa salga del bucle de mensajes return 0; break; } /*case WM_COMAND:{ switch(wParam){ case } break; }*/ case WM_CREATE: { ventana_principal(hwnd); } case WM_COMMAND: //Llamadas a funciones de cada boton { switch (LOWORD(wParam)) { case 2: { break; } case 3: { //ventana_nueva(hwnd); //MessageBox(hwnd,"elemento","ESTA ES LA FUNCION RESTA",MB_OK);//CAJA DE TEXTO TITULO DE LA VENTANA E INTRUCCION DENTRO break; } case 4: { MessageBoxA(hwnd, "elemento", "ESTA ES LA FUNCION RESTA", MB_OK);//CAJA DE TEXTO TITULO DE LA VENTANA E INTRUCCION DENTRO break; } case 5: { ShowWindow(hwnd, SW_SHOWDEFAULT); MessageBoxA(hwnd, "elemento", "Eborro pantallaA", MB_OK);//CAJA DE TEXTO TITULO DE LA VENTANA E INTRUCCION DENTRO break; } case 6: //salir de la aplicacion { //MessageBox(hwnd, "¡Adiós !", "Cerrando...", MB_ICONERROR | MB_OK); PostQuitMessage(0);//Manda WM_QUIT a la cola de mensajes que hará //que el programa salga del bucle de mensajes return 0; } } } /*case WM_LBUTTONUP: { int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); ostringstream os; os << "Hizo clic con el botón izquierdo"; if (wParam == MK_CONTROL) os << " mientras oprimía la tecla CONTROL"; else if (wParam == MK_SHIFT) os << " mientras oprimía la tecla SHIFT"; os << "\n\nCoordenadas: " << xPos << ", " << yPos; MessageBox(hwnd, os.str().c_str(), "Clic!", MB_ICONINFORMATION | MB_OK); break; }*/ } return DefWindowProc(hwnd, mensaje, wParam, lParam); } LRESULT CALLBACK WndChildClass(HWND hwnd, UINT mensaje, WPARAM wParam, LPARAM lParam) { switch (mensaje) { case WM_DESTROY: PostQuitMessage(0); break; } return DefWindowProc(hwnd, mensaje, wParam, lParam); } /* Esta cadena se ocupa para la clase de ventana y la función CreateWindowEx() se refieran a un mismo nombre */ char szNombreAplicacion[] = "Ejercicio2"; char SzChildWindowClass[] = "MyChildWindowClass"; int WINAPI WinMain(HINSTANCE hInstancia, HINSTANCE hInstanciaPrev, LPSTR lpLineaCmd, int nEstadoVentana) { //Los 4 pasos para crear una ventana... //1. Establecer los 12 campos de la "clase de ventana" WNDCLASSEXA ventana; ventana.cbSize = sizeof(WNDCLASSEXA); ventana.style = CS_HREDRAW | CS_VREDRAW; ventana.lpfnWndProc = ProcedimientoVentana; //recibe y maneja los eventos de la ventana como clics movimientos cierre de ventana etc. con punteros ventana.cbClsExtra = 0; ventana.cbWndExtra = 0; ventana.hInstance = hInstancia; ventana.hIcon = LoadIcon(NULL, IDI_APPLICATION); ventana.hCursor = LoadCursor(NULL, IDC_ARROW); ventana.hbrBackground = (HBRUSH)(COLOR_WINDOWTEXT + 8);//CreateSolidBrush( RGB(0xa0, 0x60, 0xf8) ); ventana.lpszMenuName = NULL; ventana.lpszClassName = szNombreAplicacion;//nombre de la clase de ventana ventana.hIconSm = LoadIcon(NULL, IDI_APPLICATION); //2. Dar de alta en el sistema a la "clase de ventana" if (!RegisterClassExA(&ventana)) { MessageBoxA(NULL, "No fue posible dar de alta a la ventana, abortando ejecución", "¡Error!", MB_ICONEXCLAMATION | MB_OK); return FALSE; } ventana.cbSize = sizeof(WNDCLASSEXA); ventana.style = CS_HREDRAW | CS_VREDRAW; ventana.lpfnWndProc = WndChildClass; ventana.cbClsExtra = 0; ventana.cbWndExtra = 0; ventana.hInstance = hInstancia; ventana.hIcon = LoadIcon(NULL, IDI_APPLICATION); ventana.hCursor = LoadCursor(NULL, IDC_ARROW); ventana.hbrBackground = (HBRUSH)(COLOR_WINDOWTEXT + 8); ventana.lpszMenuName = NULL; ventana.lpszClassName = SzChildWindowClass; ventana.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if (!RegisterClassExA(&ventana)) { return FALSE; } //3. Crear la ventana en base a la "clase de ventana" anteriormente registrada HWND hwnd; hwnd = CreateWindowExA( 1, //dwExEstilo szNombreAplicacion, //Nombre de clase de la ventana a la que pertenece "Tienda de videos", //Título de la ventana //variables que permiten editar intefaz con usiario habilitando o desabilitando botones WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU, //poner | despues de cada opcion y coma al final //WS_THICKFRAME | // WS_MINIMIZEBOX | //WS_MAXIMIZEBOX //WS_OVERLAPPEDWINDOW, //Tipo de ventana es igual a dwEstilo CW_USEDEFAULT, //Posición de la ventana en pantalla en "x" CW_USEDEFAULT, //Posición de la ventana en pantalla en "y" 500, //Ancho 450, //Alto HWND_DESKTOP, NULL, hInstancia, NULL); if (hwnd == NULL) { MessageBoxA(NULL, "Error al crear la ventana, abortando ejecución", "¡Error!", MB_ICONEXCLAMATION | MB_OK); return FALSE; } HWND hChild = 0; hChild = CreateWindowA( SzChildWindowClass, "REGISTRO NUEVO", WS_OVERLAPPEDWINDOW | WS_CHILD | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 400, 400, hwnd, NULL, hInstancia, 0); //4. Mostrar la ventana en pantalla ShowWindow(hwnd, SW_SHOWDEFAULT); ShowWindow(hChild, SW_SHOWDEFAULT); //Necesario para manipular los mensajes o eventos de la ventana MSG mensaje; while (GetMessage(&mensaje, 0, 0, 0) > 0) //bucle de mensajes para cola de mensajes entrantes { TranslateMessage(&mensaje); DispatchMessage(&mensaje); } return mensaje.wParam; } void ventana_principal(HWND hwnd)//se crea ventana principal { //MessageBox(hwnd, "Se creó la ventana", "Ejemplo",MB_ICONINFORMATION | MB_OK); Etiqueta = CreateWindowExA(0, "STATIC", "MENU PRINCIPAL", WS_CHILD | WS_VISIBLE, 180,//posicion en x 200,//posicion en y 150,//ancho 30,//alto hwnd, NULL, 0, 0 ); /*textbox= CreateWindow("edit", " Menu principal", //nombre de la ventana WS_BORDER | WS_CHILD| WS_VISIBLE, 120,//posicion en x 180,//posicion en y 115,//ancho 20,//alto hwnd, NULL,NULL,NULL);*/ CreateWindowA("BUTTON", "Registro Nuevo", WS_VISIBLE//VIsIBILIDAD DEL OBJETO | WS_CHILD | WS_BORDER, //MARGEN AL TEXTO 90, //x 240,//y 130,//ancho 30,//alto hwnd, (HMENU)2, NULL, NULL ); CreateWindowA("BUTTON", "Buscar pelicula", WS_VISIBLE//VIsIBILIDAD DEL OBJETO | WS_CHILD | WS_BORDER, 240, //x 240,//y 130,//ancho 30,//alto hwnd, (HMENU)3, NULL, NULL ); CreateWindowA("BUTTON", "Editar Registro", WS_VISIBLE//VIsIBILIDAD DEL OBJETO | WS_CHILD | WS_BORDER, 90, //x 290,//y 130,//ancho 30,//alto hwnd, (HMENU)4, NULL, NULL ); CreateWindowA("BUTTON", "Eliminar Registro", WS_VISIBLE//VIsIBILIDAD DEL OBJETO | WS_CHILD | WS_BORDER, 240, //x 290,//y 130,//ancho 30,//alto hwnd, (HMENU)5, NULL, NULL ); CreateWindowA("BUTTON",//boton salir "Salir", WS_VISIBLE//VIsIBILIDAD DEL OBJETO | WS_CHILD | WS_BORDER, 180, //x 340,//y 110,//ancho 30,//alto hwnd, (HMENU)6, NULL, NULL ); }
|
|
|
En línea
|
|
|
|
anfeli96
Desconectado
Mensajes: 3
|
oyeee muchisimas gracias eres mi heroe, pero me resultan dos preguntas como hago para que esta ventana quede por fuera de la principal (a un lado) y como hago para que salga solo cuando se presione un boton seria dejandola oculta por defecto y despues al presionar el boton colocar el showwindow' y acerca del libro no hay algun otro en español
|
|
« Última modificación: 5 Diciembre 2014, 02:08 am por anfeli96 »
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
oyeee muchisimas gracias eres mi heroe, pero me resultan dos preguntas como hago para que esta ventana quede por fuera de la principal (a un lado) y como hago para que salga solo cuando se presione un boton seria dejandola oculta por defecto y despues al presionar el boton colocar el showwindow' y acerca del libro no hay algun otro en español
Eliminar la bandera WS_CHILD en la creación de la ventana hija: hChild = CreateWindowA( SzChildWindowClass, "REGISTRO NUEVO", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 400, 400, hwnd, NULL, hInstancia, 0); Respecto a lo de ocultar la ventana podrias ocultar la ventana al momento de la creación usando ShowWindow con SW_HIDE: ShowWindow(hChild, SW_HIDE);
Luego al presionar el boton usar la misma función ShowWindow con SW_SHOW para mostrarla de esa manera evitas estar creando el objeto siempre que se presiona el boton, nosé todo depende del diseño de tu aplicación... sino colocar el código para crear la ventana en el case del boton.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema windows update (Windows XP Profesional SP3)
Windows
|
reem
|
4
|
4,091
|
20 Febrero 2012, 22:28 pm
por reem
|
|
|
Problema con falso error en Reproductor de Windows Media en windows 7
Windows
|
buite
|
8
|
5,758
|
20 Febrero 2013, 19:42 pm
por buite
|
|
|
Problema para Crear LAN con Windows 8 y Windows 7
Windows
|
Megan
|
2
|
3,900
|
8 Junio 2013, 23:08 pm
por Megan
|
|
|
[Problema Windows 8]en sistemas efi windows solo se puede instalar en discos gpt
Windows
|
Graphixx
|
0
|
4,228
|
30 Octubre 2013, 00:17 am
por Graphixx
|
|
|
problema con windows speech recognition macros de windows
Windows
|
Lobito de noche
|
0
|
2,831
|
15 Septiembre 2014, 14:39 pm
por Lobito de noche
|
|