|
|
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.
Mensajes - 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: Sábado 6 de Febrero de 2010, 00:54 »
pone el codigo entre corchetes de codigo por favor. osea entre sin el . asi es mas facil que lo entendamos.
3
« en: Jueves 4 de Febrero de 2010, 19:12 »
exacto los tipos de variable char almacenan caracteres en este caso la letra s; también podes crear un vector char (osea char vector[]) para que almacene una cadena de caracteres osea una frase ejemplo; #include <iostream> using namespace std; int main() { char H[12]="Hola Mundo"; //DEBES tener en cuenta que las cadenas se ponen entre doble comilla (") y los caracteres entre simple comilla (') //y si lo quisieras imprimir haces cout<<H<<endl<<endl; //Tambien si quisieras lo podes imprimir por caracter EJEMPLO for(int i=0;i<10;i++) cout<<"La letra que pertenece al vector numero "<<i<<" es: "<<H[i]<<endl; cout<<endl; system("pause"); return 0; }
compila eso y ahi te explica bien je. (te subiria la imagen ya compilado pero no tengo permiso para postear links...... Cualquier duda avisa.
4
« en: Miércoles 3 de Febrero de 2010, 20:48 »
de nada.
Sobre lo ultimo no entiendo que es lo que queres saber...?
si estas viendo C++ por cuenta propia te recomiendo esta pagina que explica todo detalladamente y con ejemplos.
c.conclase.net /curso/ index .php
5
« en: Martes 2 de Febrero de 2010, 15:45 »
okas mucha gracias.
6
« en: Lunes 1 de Febrero de 2010, 15:09 »
si, esa solución ya la tenia, lo que yo quería saber era si se podía anular eso o algo por el estilo para que quede CON el 0. Gracias igual
7
« 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.
8
« en: Lunes 1 de Febrero de 2010, 06:54 »
Primero que nada buenas je al final te dejo el codigo ya funcionando te comento los errores que vi y correji: 1) como sabras la funcion int main(){} debe de retornar un entero SIEMPRE! vos estabas poniendo el pero te faltaba agregarle o una variable entera o el numero 0 EJEMPLO . 2)El otro error que vi es que tratabas de tomar los valores float con scanf usando la letra incorrecta ya que para cada tipo de variable se usa una letra distinta EJEMPLO scanf("%if",&x2); // asi lo ponias vos scanf("%f",&x2); //como es un float usas la letra f y solo f
si la variable x2 en ves de ser float fuese int usarias lo siguiente scanf("%i",&x2); // o tambien podes usar %d si mal no recuerdo
y no hace falta que pongas tantos "return 0" con que lo pongas antes de cerrar la funcion main anda igual. El codigo que sigue es con los returns de MAS. #include <stdio.h> int main() { float x1, x2, paso; float i, y; printf("nTabla de valores para la funcion Y=X*X-5*X+10"); printf("nnIntroduce el menor valor de x: "); scanf("%f",&x1); printf("nIntroduce el mayor valor de x: "); scanf("%f",&x2); if (x1>x2) { printf("nLo siento vuelta a intentarlo"); return 0; } printf("nIntroduce el incremento del valor x: "); scanf("%f",&paso); if (paso<=0) { printf("nLo siento vuelta a intentarlo"); return 0; } for (i=1;i<=x2;i=i+paso) { y=i*i-5*i+10; printf("Y= %f X= %f",y, i); } while(getchar()!='n'); getchar(); return 0; }
y ACA TENES SIN LOS RETURNS los probe a ambos funcionan igual. #include <stdio.h> int main() { float x1, x2, paso; float i, y; printf("nTabla de valores para la funcion Y=X*X-5*X+10"); printf("nnIntroduce el menor valor de x: "); scanf("%f",&x1); printf("nIntroduce el mayor valor de x: "); scanf("%f",&x2); if (x1>x2) { printf("nLo siento vuelta a intentarlo"); } printf("nIntroduce el incremento del valor x: "); scanf("%f",&paso); if (paso<=0) { printf("nLo siento vuelta a intentarlo"); } for (i=1;i<=x2;i=i+paso) { y=i*i-5*i+10; printf("Y= %f X= %f",y, i); } while(getchar()!='n'); getchar(); return 0; }
Cualquier duda avisa
9
« en: Viernes 29 de Enero de 2010, 05:12 »
hola mira yo también soy nuevo en el foro pero por lo que tengo entendido acá te van a "dar una mano" no te van a dar todo el código listo para que vos lo copies y pegues.... trata de investigar en manuales, y trata de hacer lo que mas puedas y cuando te trabes pone el código acá en el foro con los errores que te da y ahi si vas a recibir respuestas y ayuda.
espero que no te lo tomes a mal.
saludos
10
« en: Miércoles 27 de Enero de 2010, 21:04 »
je me auto respondo pero lo dejo aca por si a alguien mas le hace falta.
la razon por la que no funcionaba era porque yo guardaba la memoria (usaba new) en la funcion y la tenia que usar en el main 
tiene que quedar asi!#include <iostream> using namespace std; //int sumarF(int** H,int f, int c); //void maxF(); void leerM(int** M, int f,int c); int main(){ int nf,nc,i,j,**s; cout<<"Ingrese el numero de filas y de columnas"<<endl; cin>>nf>>nc; s = new int *[nf]; for(i=0;i<nf;i++) s[i] = new int [nc]; leerM(s, nf,nc); cout<<"La matriz es :"<<endl; for(i=0;i<nf;i++){ for(j=0;j<nc;j++){ cout<< s[i][j]; } cout<<endl; }; //cout<<"La suma de todos los numeros de la matriz da "<<sumarF(s,nf,nc)<<endl; for(i=0;i<nf;i++) delete[] s[i]; delete[] s; system("pause"); return 0; } //funcion que lee la matriz y la devuelve al main o eso trata je /*int sumarF(int** H,int f, int c){ int i,j,S=0; for(i=0;i<f;i++){ for(j=0;j<c;j++){ S += H[i][j]; } } return S; } */ void leerM(int** M, int f, int c){ int i, j; cout<<"Introdusca la matriz por filas "<<endl; for(i=0;i<f;i++){ for(j=0;j<c;j++){ cin>> M[i][j]; } } }
11
« en: Miércoles 27 de Enero de 2010, 20:02 »
Buenas de vuelta disculpen la molestia luego de que me explicaras como hacer con el otro puntero me di a la tarea de querer crear un programa que me leyera la matriz desde una funcion (osea le mandaba la matriz por referencia) y que luego en el main la pudiera imprimir... Cual es el inconveniente... compila todo queda perfecto me lee la matriz pero cuando vuelvo al main y la quiero imprimir el programa se quiebra... #include <iostream> using namespace std; //int sumarF(int** H,int f, int c); //void maxF(); void leerM(int** M, int f,int c); int main(){ int nf,nc,i,j,**s; cout<<"Ingrese el numero de filas y de columnas"<<endl; cin>>nf>>nc; leerM(s, nf,nc); cout<<"La matriz es :"<<endl; for(i=0;i<nf;i++){ for(j=0;j<nc;j++){ cout<< s[i][j]; } cout<<endl; }; //cout<<"La suma de todos los numeros de la matriz da "<<sumarF(s,nf,nc)<<endl; for(i=0;i<nf;i++) delete[] s[i]; delete[] s; system("pause"); return 0; } //funcion que lee la matriz y la devuelve al main o eso trata je /*int sumarF(int** H,int f, int c){ int i,j,S=0; for(i=0;i<f;i++){ for(j=0;j<c;j++){ S += H[i][j]; } } return S; } */ void leerM(int** M, int f, int c){ int i, j; M = new int *[f]; for(i=0;i<f;i++) M[i] = new int [c]; cout<<"Introdusca la matriz por filas "<<endl; for(i=0;i<f;i++){ for(j=0;j<c;j++){ cin>> M[i][j]; } } }
[/code] desde ya disculpen la molestia. si por lo menos me tirara un error me las apañaria solo pero :S sinceramente dentro de mi logica el programa TENDRIA que andar o no?
12
« en: Miércoles 27 de Enero de 2010, 04:14 »
Muchisimas gracias por responder tan bien, tan rápido y por el link. No se me da muy bien todavía el uso de punteros con arrays je
13
« 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]
|
|
|