|
|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Temas - Garethsoul
Páginas: [1]
1
« en: Jueves 18 de Febrero de 2010, 16:24 »
&PruebaBuenas estoy aprendiendo a crear ventanas en windows usando c++ y las APis de windows pero eh aqui el problema... El codigo en si dice que no hay problemas que esta todo en orden pero cuando ejecuto el programa no me aparece el menu... ALGUNA IDEA??? MAIN.cpp #include <windows.h> #include "ids.h" LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM); // Esto es una funcion void InsertarMenu(HWND); int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevinstance, LPSTR lpszCmdParam, int nCmdShow) { HWND ventana;//manipulador para la ventana principal de la aplicacion MSG mensaje; // es una VARIABLE para manipular los mensajes que lleguen a nuestra aplicacion WNDCLASSEX wincl; // declaramos la estructura wincl para registrar la clase particular de ventana a usar HMENU hMenu; wincl.hInstance = hThisInstance; wincl.lpszClassName = "Mi_clase"; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof(wincl); //wincl.lpszMenuName = "MenuID"; //usar icono y puntero por defecto wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION); wincl.hCursor = LoadIcon(NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND; //registrar la clase de hwnd si falla salir del programa if(!RegisterClassEx(&wincl)) return 0; ventana = CreateWindowEx( 0, "Mi_clase", "Ejemplo 01", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL,//LoadMenu(hThisInstance,"MenuID"), hThisInstance, NULL); hMenu = LoadMenu(hThisInstance,"MenuID"); SetMenu(ventana,hMenu); ShowWindow(ventana,nCmdShow); //Bucle de mensajes while(TRUE== GetMessage(&mensaje,NULL,0,0)) { TranslateMessage(&mensaje); DispatchMessage(&mensaje); } return mensaje.wParam; } LRESULT CALLBACK WindowProcedure(HWND ventana, UINT mensaje,WPARAM wParam,LPARAM lParam){ switch (mensaje) { case WM_COMMAND: switch(LOWORD(wParam)){ case CM_PRUEBA: MessageBox(ventana,"Comando: Prueba","Mensaje de Menu",MB_OK);break; case CM_DIALOGO: MessageBox(ventana,"Habia una rata llamada ratatouille que era francesa","Mensaje de Menu",MB_OK);break; case CM_SALIR: MessageBox(ventana,"Comando: Salir","Mensaje de Menu",MB_OK);break; PostQuitMessage(0); break; } break; case WM_DESTROY: PostQuitMessage(0);break; default: return DefWindowProc(ventana,mensaje,wParam,lParam); } return 0; }
IDS.H #define CM_PRUEBA 100 #define CM_SALIR 101 #define CM_PROBANDO 102 #define CM_DIALOGO 103 #define TEXTO 104
FICHERO DE RECURSOS WIN002.rc #include <ids.h> MenuID MENUEX BEGIN POPUP "&Principal" BEGIN MENUITEM "", CM_PRUEBA MENUITEM "" // MFT_SEPARATOR MENUITEM "&Dialogo", CM_DIALOAGO MENUITEM "" // MFT_SEPARATOR MENUITEM "&Salir", CM_SALIR END
desde ya muy agradecido porque desde anteayer que estoy renegando con esto.... Si Creo una funcion ....InsertarMenu(ventana); ShowWindow(ventana,SW_SHOWDEFAULT);...
void InsertarMenu(HWND ventana){ HMENU hmenu1, hmenu2; hmenu1 = CreateMenu();// manipulador de la barra de menu hmenu2 = CreateMenu();//Manipulador para el primer menu pop-up AppendMenu(hmenu2,MF_STRING,CM_PRUEBA,"&Prueba"); //1` Item AppendMenu(hmenu2,MF_SEPARATOR,0,NULL);//2` item como en el tercer espacio hay un 0. este separa AppendMenu(hmenu2,MF_STRING,CM_DIALOGO,"&Dialogo"); AppendMenu(hmenu2,MF_SEPARATOR,0,NULL); AppendMenu(hmenu2,MF_STRING,CM_SALIR,"&Salir"); //3` item AppendMenu(hmenu1,MF_STRING | MF_POPUP, (UINT)hmenu2,"&Principal"); SetMenu(ventana,hmenu1); //asigna el menu a la ventana ventana }
me anda joya PERO quiero aprender a crear menus de la otra forma que es mas facil y aparte lo puedo separar en otro fichero GRACIAS
2
« en: Lunes 1 de Febrero de 2010, 07:00 »
Buenas de vuelta je tengo una pequeña duda al utilizar la funcion SWITCH tengo el siguiente codigo. /*13.6 Implementar una clase Fecha con miembros dato para mes, día y año. Cada objeto de esta clase representa una fecha, que almacena el día, mes y año como enteros. Se debe incluir un constructor por defecto, un constructor de copia, funciones de acceso, una función reiniciar(int d, int m, int a) para reiniciar la fecha de un objeto existente. Emplear una función de utilidad normalizar() para asegurar que los miembros dato están en el rango correcto 1<=año, 1<=mes<=12, 1<=día<=dias(mes) donde dias(mes) es otra función que devuelve el número de días de cada mes.*/ #include <iostream> using namespace std; class Fecha{ int d,m,a; // Dia Mes Anio public: Fecha(int d1=0, int m1=0, int a1=0) : d(d1), m(m1), a(a1){}; Fecha(const Fecha &p) : d(p.d), m(p.m), a(p.a) {}; //constructor copia void Reiniciar(){d=0;m=0;a=0;}; //funcion que reincia el obj a 0 bool Normalizar(); // Controla que los valores de las variables sean los adecuados void imprimir(); }; int Dias(int mes); void Fecha::imprimir(){ cout<<d<<":"<<m<<":"<<a<<endl; } bool Fecha::Normalizar(){ if(1<=a && 1<=m<=12 && 1<=d<=Dias(m)) return true; return false; } int main(){ Fecha d1(10,08,2009); Fecha d2(d1); d1.imprimir(); d2.imprimir(); d1.Reiniciar(); d1.imprimir(); d2.imprimir(); cout<<d1.Normalizar()<<endl; cout<<d2.Normalizar()<<endl; system("pause"); return 0; } int Dias(int mes){ switch(mes){ case 01: return 31; break; case 02: return 28; break; case 03: return 31; break; case 04: return 30; break; case 05: return 31; break; case 06: return 30; break; case 07: return 31; break; case 08: return 31; break; case 09: return 30; break; case 10: return 31; break; case 11: return 30; break; case 12: return 31; break; } }
el problema se da en el switch int Dias(int mes){ switch(mes){ case 01: return 31; break; case 02: return 28; break; case 03: return 31; break; case 04: return 30; break; case 05: return 31; break; case 06: return 30; break; case 07: return 31; break; case 08: return 31; break; case 09: return 30; break; case 10: return 31; break; case 11: return 30; break; case 12: return 31; break; } }
me dice error en el 08 y en el 09 según lo que tengo entendido es debido a que como en octal se llega hasta el 7 osea de 0 a 7 el "08 y 09" no existirían y que debería de poner en vez de ellos 010 y 011 yo quería saber si había alguna forma de colocar el 08 y 09 sin que me de error... por lo demás todo anda joya. gracias desde ya.
3
« en: Miércoles 27 de Enero de 2010, 01:44 »
Buenas Necesitaría ayuda con la utilización de punteros para pasar un array a una funcion. Porque se me es facil hacer el ejercicio si esta dentro del main() EJEMPLO: ------------------- #include <iostream> using namespace std; int main(){ int a, b,i,j; a=b=0; int **m; cout<<"Ingrese la cantidad de Filas seguido de la cantidad de columnas de la Matriz"<<endl; cin>>a>>b; m = new int *[a]; // array de A punteros a int for(int i=0;i<a+1;i++)m[i]= new int[b]; // m es un array de [a]*[b] cout<<"Ingrese la matriz por filas"<<endl; for(i=0;i<a;i++){ for(j=0;j<b;j++) cin>>m[i][j]; } for(i=0;i<b;i++){ for(j=0;j<a;j++) cout<<m[i][j]; cout<<endl; } delete[] m; system("pause"); return 0; }
------------ Pero si lo quiero usar a traves de que la funcion lo imprima se me complica... A esto es lo que llegue yo : -------------------------------------------- #include <iostream> using namespace std; void escribemat(int* t,int nf,int nc); int main(){ int a, b,i,j; a=b=0; int **m; cout<<"Ingrese la cantidad de Filas seguido de la cantidad de columnas de la Matriz"<<endl; cin>>a>>b; m = new int *[a]; // array de A punteros a int for(int i=0;i<a+1;i++)m[i]= new int[b]; // m es un array de [a]*[b] cout<<"Ingrese la matriz por filas"<<endl; for(i=0;i<a;i++){ for(j=0;j<b;j++) cin>>m[i][j]; } /*for(i=0;i<b;i++){ for(j=0;j<a;j++) cout<<m[i][j]; cout<<endl; }*/ escribemat(&m,a,b); delete[] m; system("pause"); return 0; } void escribemat(int* t,int nf,int nc){ int i,j; for(i=0;i<nc;i++){ for(j=0;j<nf;j++) cout<<* t[i][j]; cout<<endl; } }
-------------------------- Pero me salen los siguientes errores: 1) Cannot convert 'int***' to 'int*' for argument to 'void escribemat(int*,int,int)' 2) Invalid types 'int[int]' for array subscript. desde ya muchas gracias. y si alguien tiene un manual en donde salga bien explicado el uso de punteros con funciones se lo agradeceria muchisimo yo ya trate con unos 6 y ninguno me lo explica de forma que lo entienda....
Páginas: [1]
|
|
|