PREGUNTAS CONTESTADAS - C/Visual C

 Hay un total de 745 Preguntas.<<  >> 

    Pregunta:  24859 - ¿CóMO HACER UN BOTóN QUE LIMPIE UN EDIT? EN VC++ MICROSOFT
Autor:  victor fernandez
Provengo del entorno C++ BUILDER de BORLAND y la cosa mas tonta como es crear un
edit y un botón y q pulsando el botón se limpie, se ponga en blanco el Edit, en el
Microsoft VC++ 5.0 o 6.0 no se como se hace. Se crear los recursos, el boton, el campo
Edit, se pulsar el botón, te clea el procedimiento OnBoton(), y luego ¿como borras el
Edit? Tb ¿como accedes a su contenido? ¿Como ves el contenido de un check button o un
radio button? Ojala alguien me ayude! Gracias por adelantado a todos los programadores
altruistas. Saludos
  Respuesta:  Alonso Salazar Jimenez
Hay dos formas de accesar los recursos de un dialogo una es precionar CTRL+W y en la segunda etiqueta asignarle una variable miembro relacionara a ID del recurso creado, con esto todo lo que hagas a ese objeto es como si lo estuvieras haciendo al recurso.

La otra es utilizar GetDlgCtrl( ID ) donde le pasa el ID del recurso que deseas accesar y la funcion te devuelve un puntero de tipo CWnd este lo puedes hacer un type-cast por un CButton o uin CEdit o lo que sea y operarlo.

    Pregunta:  25186 - SOLUCIONAR EL ERROR EN BORLANDC 3.1 NULL POINTER ASSIGNMENT
Autor:  Mariano Marin Borrella
Desearía información sobre como usar el turbo debugger de borlandc 3.1 para buscar punteros a null, para solucionar el error de ejecución Null pointer asignment, también si es posible agradecería mucho que me pudieran facilitar alguna dirección en la que obtener los archivos de ayuda para borlandc 3.1 en castellano. Gracias
  Respuesta:  Alexis Leung
Aunque esto no ayuda mucho en cuanto a tu pregunta, lee (aunque este en inglés) esto para que comprendas lo que realmente es un puntero a null:
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.
Clearly the holy scriptures were mis-transcribed here, as the words should have been "ull pointer", to minimize confusion between the concept of null pointers and the macro NULL (of which more anon). Otherwise, the meaning is plain. A null pointer points to regions filled with dragons, demons, core dumps, and numberless other foul creatures, all of which delight in frolicing in thy program if thou disturb their sleep. A null pointer doth not point to a 0 of any type, despite some blasphemous old code which impiously assumes this.

    Pregunta:  25357 - COMO LEER ARCHIVOS DESDE EL HD CON UNA APLICACION DECPP
Autor:  Wilfredo Manrique
Cordial Saludo

Quisiera hacerles un solicitud, quiero saber como hacer un programita que me lea un archivo desde el disco duro y que me saque en pantalla o mejor que me genere un archivo de salida como resultado de un procesamiento especial al archivo leido, soy nuevo en este cuento del C++ , agradezco su colaboracion.

Wilfredo Manrique.
Cali-Colombia
  Respuesta:  Matias Ballester
Primero tenes que abrir un archivo para lectura, de la siguiente manera:

char linea[255];
FILE *archivo;

if ( (archivo= fopen( "nombre.txt", "rt")) == NULL)
{
fprintf ( stderr, " No hay memoria\n");
return;
}

lo que mas te conviene es hacer una funcion para leer linea por linea del
archivo. Ejemplo:

cargalinea ( archivo, linea); /*pasas el puntero al archivo, y el puntero
a char */
una vez leido una linea del archivo

while ( ! feof (archivo) ) */ mientras no sea fin de archivo */
{
*/haces lo que vos queres y si lo queres mostrar por pantalla
usas printf();
cargalinea( archivo, linea );
}

Ahora te mustro como se puede hacer la funcion para leer el archivo:

void cargalinea ( FILE *archivo, char *linea)
{
int i=0;
linea [ i ] = fgets (archivo);

while (linea [ i ] ! = ' \n' && linea [ i ] ! = EOF )
{
i ++;
linea [ i ] = fgets (archivo);
}
linea [ i + 1] = '\0';
}

Ante cualquier duda mandame un mail...

    Pregunta:  25374 - COMO PUEDO LEER LAS TECLAS OPRIMIDAS EN UNA CESION
Autor:  veronica ambriz
BUSCO LA FORMA DE LEER Y REGISTRAR LAS TECLAS QUE SE OPRIMIERON DURANTE UN LAPSO DE TIEMPO EN UNA COMPUTADORA EN LENGUAJE VISUAL C++
LO HE INTENTADO MEDIANTE HILOS PERO SE BLOQUEA
( CON LA INSTRUCCION AFXBEGINTHREAD)
GRACIAS POR SU AYUDA
  Respuesta:  Esteban F.B.
Yo lo intentaría con cilclos anidados y con las funciones kbhit() y getch();
kbhit() puede sacar del ciclo cuando se presione una tecla y getch() la puede registrar en una variable, haz una variable "contador" y usa la secuencia <fflush(stdin)> para que pueda volver a leer un carecter...

Espero y te sirva

    Pregunta:  25574 - NECESITO UNA LIBRERIA PARA C++ QUE TRABAJE ARBOLES Y GRAFOS
Autor:  Christian Ortiz
Hola, se programar mas o menos en C++ y quisiera me ayuden, necesito dos librerias para el c++ que me permita trabajar mas rabido en trabajo de arboles y grafos. Les agradezco por anticipado que si las tuvieran me las envien a mi E-mail..
  Respuesta:  Reynaldo Hidalgo
Busca en google por GTL (graphic template library) es una libreria generica muy potente y se puede bajar free, con algunas condiciones, pero nececita del dominio de la STL ya que esta escrita en ese mismo estilo.

    Pregunta:  25916 - COMO GENERO NUMEROS ALEATORIOS , PERO QUE NO COMIENCEN EN 0?
Autor:  Leo Holc
Tengo que generar numeros aleatorios entre 5 y 2000
Yo se como mandar el maximo a la funcion rand( ) , pero no como mandar el numero de inicio.
Otra cosa, como se hace en caso de numeros FLOAT?
  Respuesta:  Luis Machuca
Eso es bastante sencillo cuando no estás usando floats, lo que hacemos es aprovechar el truco:

primero, entre 5 y 2000 hay 1995 números aleatorios, esto es el "rango". El cinco (5) es nuestro "inicio".
Entonces, la línea:

variable=inicio+random(rango);

genera números aleatorios entre inicio e inicio+rango, esto porque la instruccíon random(1995) genera números entre 0 y 1995, si les sumamos inicio (5) obtenemos números entre 5 y 2000, ambos inclusive.

Esta técnica sirve para crer números aleatorios en cualquier rango, por ejemplo entre 4 y 30 (26 aleatorios) la instrucción sería:

variable=4+random(26);

Para los floats imagino que hay que convertir inicio a una expresión entera y el resultado de variable a float otra vez, pero nunca lo he probado.

Espero ayudar.

    Pregunta:  26031 - MANEJAR LA LINEA 25 BAJO MSDOS
Autor:  David López Núñez
Estoy desarrollando una pequeña base de datos bajo turbo c 3.0, y para hacer mas sencilla la tarea de meter datos, he creado una funcion de "prompt", que indica diversos mensajes sobre el estado del programa.
Así, me gustaría que alguien me explicara como manejar la linea 25, sin que se produzca un retorno de carro. Actualmente estoy jugando con la posibilidad de utilizar la funcion poke() y trabajar asi directamente sobre la memoria de video, pero me gustaria conocer vuestra opinion, o vuestro codigo si ya habeis hecho algo asi.
Salu2. David.
  Respuesta:  David López Núñez
Por si a alguien le interesa, (supongo que unicamente los estudiantes de c/c++ que usan C 16bit), finalmente he implementado el siguiente codigo en mi programa:

#include

void prompt(char *mensaje)
{
char far *p=(char *)0xb8000000;
int i, j=1;
unsigned char caracter;

*((80*24*2)+p)=mensaje[0];
*((80*24*2)+p+1)=78;

for(i=0; i*((80*24*2)+(i*2)+2+p)=mensaje[j++];
*((80*24*2)+(i*2)+p+2+1)=78; /* byte de atributo */
}

for(i=strlen(mensaje); i<80; i++) {
*((80*24*2)+(i*2)+p+2)=' ';
*((80*24*2)+(i*2)+p+2+1)=78;
}
}

...que me permite escribir cualquier mensaje en la linea 25, con letras de primer plano amarillas y fondo rojo. Si alguien quiere cambiar el color solo tiene que jugar con el byte de atributo.

P.D: Prometo pasarme a VC++ cuanto antes y evitar estos problemas :-))
  Respuesta:  Luis Machuca
Hola David.
DOS no es muy flexible en cuanto al manejo de la línea 25, y muchas aplicaciones lo que hacen es limitar l amuestra de datos dinámicos hasta la línea 23 o 24, y usar la línea 25 sólo para mostrar datos semiestáticos (como una barra de estado de Windows, o como la misma barra de estado del Turbo C).
Para manejar bien esa línea he usado estas dos opciones:

1. Imprimo en pantalla el contenido d ela línea 25 en la línea 24, y a continuación uso la función "insline()" (no sé si está disponible en todos los ordenadores) para correr esa línea hacia abajo sin afectar a las líneas anteriores. Después imprimo la línea 24 completa, pongo un retorno de carro al final lo que corre la línea 25 a lalínea 26 (fuera de la pantalla), después uso la función "delline" para devolver una línea el scroll de la pantalla y que la línea 25 aparezca "pegada" a la 24.

2.- A la primera pasada de la pantalla, colócate al final de la línea 25 e imprime UNA LINEA COMPLETA de espacios u otro caracter similar. Después si necesitas imprimir en la línea 25 sólo cuídate de imprimir siempre hasta antes de la columna 79, para que no te haga un retorno de carro.

Esas son las soluciones que conozco. Hay soluciones mucho mejores pero involucran conocimientos de la memoria de la pantalla y la BIOS. En cuanto al uso de poke() me parece buena idea pero debes checar siempre de antemano el byte que vas a poner, ciertos valores en la memoria cambian cosas más allá.

Suerte David, espero te sirva.
  Respuesta:  Jesús Antón Martín
Me parece que tu problema está en la función scanf. No utilices las funciones estándar para recoger la entrada.

Recoge carácter a carácter la edición del usuario. Necesitarás una tabla con los códigos ascii de cada tecla (cursores, inicio, fin, supr, backspace) para dotar de capacidades de edición a tu programa.

Flecha Arriba: 72
Flecha Abajo: 80
Flecha Izquierda: 75
Flecha Derecha: 77
BackSpace: 9
Tab: 8

No dispongo ahora mismo de las demás. Cuando una tecla es especial (como las que listo arriba) produce un código doble, la función getch() retorna primero un cero y luego el carácter correspondiente.

Deberías considerar la opción de hacer la aplicación para windows, usando diálogos. Si no tienes compilador para windows, pásate por las siguientes direcciones:

http://www.bloodshed.net
http://www.cs.virginia.edu/~lcc-win32/

El primero es de C y C++, y el segundo sólo de C. Ambos tienen buenos ejemplos para aprender.

Un saludo y mucha suerte.

    Pregunta:  26220 - ENVIO DE ARCHIVOS A UN COMPUTADOR REMOTO POR FTP
Autor:  Randall Leiton
Hola como esta, les saludo desde Costa Rica, buscando información sobre el uso del ftp en c++ , di con su pagina, me parece muy ilustrante y con bastante información, la duda que me llevo a visitar su pagina es la siguiente y estaria muy agradecido si me pudieran ayudar.

Tengo 2 servidores con sistema operativo Linux y desde un servidor local sse deben enviar archivos de diferente tipo hacia el servidor remoto, con la instrucción \"POPEN\" accedo a la siguiente linea de comando \" ftp ftp://usuario:password@host/archivo \" con el cual puedo abrir un pipe para obtener un archivo desde el servidor remoto al servidor local o sea un GET, lo que yo necesito es la sintaxis para lograr que la funcion me haga un PUT y con eso pueda enviar los archivos desde el servidor local hacia el remoto , les agradeceria si me pudiran informar si existe alguna funcion que me pueda ser util.
  Respuesta:  Luis Alberto Cedeño Flores
Paisano como me le va con la transmisión vía FTP, espero que sea etapa superada, pero si no es así pongale atención a las siguientes lineas de código, las cuales las implemente desde Visual C++6.0 para Windows CE ya que debia de transmitir archivos de texto via modem.

RASDIALPARAMS rdp;
HRASCONN hRas;

hRas = NULL;

HINTERNET hInternet;
HINTERNET hFTP;

memset(&rdp,0,sizeof(rdp));
rdp.dwSize = sizeof(rdp);
rdp.szPhoneNumber[0] = TEXT('\0');
rdp.szCallbackNumber[0] = TEXT('\0');
wcscpy(rdp.szEntryName,_T("****"));
wcscpy(rdp.szDomain,_T("*"));

m_strMensaje = _T("Estableciendo conexión con servidor...");
UpdateData(FALSE);

if(RasDial(NULL,NULL,&rdp,NULL,NULL,&hRas) != 0)
{
m_strMensaje = __T("Imposible comunicacion con servidor...");
UpdateData(FALSE);
MessageBox(_T("No se ha podido establecer conexión con el Servidor"),_T("Error"),MB_ICONSTOP);
//Desconectamos la línea.
RasHangUp(hRas);
return;
}

hInternet = InternetOpen(_T("CEFA"),INTERNET_OPEN_TYPE_DIRECT ,NULL,NULL,0);
if(hInternet==NULL)
{
m_strMensaje = __T("Imposible establecer conexción con Internet...");
UpdateData(FALSE);
MessageBox(_T("No se ha podido hacer conexión de Internet"),_T("Error"),MB_ICONSTOP);
return;
}

hFTP = InternetConnect(hInternet,_T("NUMERO IP"),INTERNET_DEFAULT_FTP_PORT, _T("USUARIO"), _T("PASSSWORD"),INTERNET_SERVICE_FTP,0,0);

m_strMensaje = _T("Estableciendo comunicación FTP...");
UpdateData(FALSE);

if(hFTP==NULL)
{
m_strMensaje = _T("Fallo establecimiento de comunicación...");
UpdateData(FALSE);
MessageBox(_T("No se ha podido establecer conexión vía FTP"),_T("Error"),MB_ICONSTOP);
InternetCloseHandle(hInternet);
//Desconectamos la línea.
RasHangUp(hRas);
return;
}

if(!FtpPutFile(hFTP,_T("Ruta local"),_T("Ruta remota"),INTERNET_FLAG_TRANSFER_BINARY ,0))
{
m_strMensaje = _T("Transferencia fallida...");
UpdateData(FALSE);
InternetCloseHandle(hFTP);
InternetCloseHandle(hInternet);
//Desconectamos la línea.
RasHangUp(hRas);
return;
}

InternetCloseHandle(hFTP);
InternetCloseHandle(hInternet);

//Desconectamos la línea.
RasHangUp(hRas);

    Pregunta:  26332 - COMO DUPLICAR .EXE MIENTRAS ESTA EN EJECUCION Y CAMBIAR LA R
Autor:  Martin Bueno
HOlas...

queria saber, si alguien me puede explicar como hacer para que Por Ej.
mi archivo c:\\arch.exe mientras esta en ejecución, se copie a c:\\DIR\\arch.exe
En C con Borland 4.51.

Desde ya, muchas gracias....
  Respuesta:  David Guerrero
Hola.

Realice unas pruebas y no encuentro ningún problema en copiar un archivo exe mientras se esta ejecutando. Para hacerlo, debes tener cuidado en abrir los archivos de forma correcta. La siguiente función te permite copiar archivos:

int copiaArchivo(char *origen, char* destino)
{
FILE *inFile, *outFile;
if( ( outFile = fopen(destino, "wb") ) == NULL)
{ printf("no se pudo abrir archivo de salida: '%s'\n",destino);
return 0;
}

if( ( inFile = fopen(origen, "rb") ) == NULL)
{
printf("no se pudo abrir archivo de entrada: '%s'\n",origen);
return 0;
}

unsigned char uchar;

while( fread(&uchar,1,1,inFile) == 1)fwrite(&uchar,1,1,outFile);

fclose(inFile);
fclose(outFile);

return 0;
}
Esta función la colocas en alguna parte de tu codigo para que sea llamada y los parametros origen y destino contienen las rutas que deseas utilizar.
Un ejemplo sería el siguiente:

copiaArchivo("c:\arch.exe","c:\DIR\arch.exe");

    Pregunta:  26567 - ACERCA DE PUNTEROS DE ESTRUCTURAS
Autor:  Leonardo Laguna Ruiz
Estoy intentando obtener las capacidades de un puerto midi utilizando la libreria mmsystem.h con la función "midiOutGetDevCaps" la cual segun esta definida asi:

MMRESULT midiOutGetDevCaps(
UINT_PTR uDeviceID,
LPMIDIOUTCAPS lpMidiOutCaps,
UINT cbMidiOutCaps
);
donde el segundo parametro me esa dando lata pues es una direccion de una estructura.

Yo lo estoy hacien de esta manera:

MIDIOUTCAPS midicaps;
error = midiOutGetDevCaps(MIDIMAPPER,midicaps,52);

y obtengo este error de compilacion
"error C2664: 'midiOutGetDevCapsA' : cannot convert parameter 2 from 'struct tagMIDIOUTCAPSA' to 'struct tagMIDIOUTCAPSA *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called"
Quiero saber si alguien me puede ayudar pues no tengo mucha experiencia con estructuras.
  Respuesta:  Daniel Azkona Coya
Creo que tu problema no tiene que ver con desconocer las estructuras, sino en desconocer los punteros, ya que la solución a tu problema es pasarle la estructura a la función por referencia, con &:

error = midiOutGetDevCaps(MIDIMAPPER,&midicaps,52);

de esta forma, la función llamada recibe un puntero a la variable declarada en local.

|<  <<  43 44 45 46 47 48 49 50 51 52 53  >>  >|