Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿Cómo imprimir variable con arquitectura MFC?

Estas en el tema de ¿Cómo imprimir variable con arquitectura MFC? en el foro de C/C++ en Foros del Web. Hola a todos, os explico mi problema. Estoy haciendo un programa en c++ con bibliotecas MFC en el que básicamente leo un archivo imagen en ...
  #1 (permalink)  
Antiguo 19/09/2011, 04:13
 
Fecha de Ingreso: septiembre-2011
Ubicación: Madrid
Mensajes: 5
Antigüedad: 12 años, 7 meses
Puntos: 0
¿Cómo imprimir variable con arquitectura MFC?

Hola a todos, os explico mi problema.

Estoy haciendo un programa en c++ con bibliotecas MFC en el que básicamente leo un archivo imagen en binario y guardo los 100 primeros bits en una variable.

Lo que necesito es imprimir esa variable para que el usuario vea esos bits.
Cuando ejecuto el programa me imprime 100 bits aleatorios pero tras abrir el fichero y cargarlo me imprime la dirección de la variable y no su contenido.

He probado a poner punteros y me da error de compilación. No sé como podría hacerlo.

Dejo las funciones que utilizo tanto en el Doc.cpp como en el View.cpp :

DOC.CPP:

BOOL CMy12agDoc::OnOpenDocument(LPCTSTR lpszPathName)
{

if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;

for(int b=0;b<100;b++)
m_buffer[b]= 0;

ifstream archivo (lpszPathName,ios::in | ios::binary);
archivo.read (m_buffer, 100);
return TRUE;
}

VIEW.CPP:

void CMy12agView::OnDraw(CDC* pDC)
{
CMy12agDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
CString cadena;
cadena=(pDoc->m_buffer);
pDC->TextOut(1,1,cadena,100);
}

Muchas gracias por la ayuda!!

Un saludo
  #2 (permalink)  
Antiguo 19/09/2011, 08:04
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Respuesta: ¿Cómo imprimir variable con arquitectura MFC?

Primero y principal son cien BYTES y no BITS. No tiene sentido tratar esos bytes como si fueran una cadena, no son texto sino valores enteros.

Aca tenes una manera hiper sencilla de mostrarlo como un editor hexadecimal haria:

Código C++:
Ver original
  1. for (int x = 0; x < 10; x++)
  2. {
  3.     stringstream ss;
  4.     ss.setf(ios::hex, ios::basefield);
  5.     ss.setf(ios::uppercase);
  6.  
  7.     for (int y = 0; y < 10; y++)
  8.     {
  9.         ss << setw(2) << setfill('0') << (short)(unsigned char)m_buffer[x * 10 + y] << " ";
  10.     }
  11.     cout << ss.str() << endl << endl;
  12. }

Ahora intenta hacerlo con TextOut.

PD. En lugar de ese bucle para inicializar m_buffer podes usar ZeroMemory y pasarle sizeof(m_buffer).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO

Última edición por Eternal Idol; 19/09/2011 a las 08:19
  #3 (permalink)  
Antiguo 20/09/2011, 02:38
 
Fecha de Ingreso: septiembre-2011
Ubicación: Madrid
Mensajes: 5
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: ¿Cómo imprimir variable con arquitectura MFC?

Muchas gracias por tu ayuda!!

Aun así, me compila pero no me lo muestra por pantalla. Probé con tu código en la clase doc pero los cout no me muestran nada y a diferencia de antes, tras abrir la imagen en la ventana principal (estoy trabajando en SDI) me sale una lista de caracteres igual a la inicial que es algo así:

ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ

Creo que el problema está en como llamo a la variable desde el view pero no sé cual es el fallo.

Muchas gracias por la ayuda igualmente!!! :
  #4 (permalink)  
Antiguo 20/09/2011, 06:54
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Respuesta: ¿Cómo imprimir variable con arquitectura MFC?

Es logico que no lo muestre, tu programa no es de consola seguramente. Tenes que adaptar ese codigo para el GUI, usando TextOut como hacias por ejemplo.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 22/09/2011, 03:00
 
Fecha de Ingreso: septiembre-2011
Ubicación: Madrid
Mensajes: 5
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: ¿Cómo imprimir variable con arquitectura MFC?

Gracias por la ayuda Eternal Idol,

Estoy intentando hacer lo que me dijiste pero sigue sin funcionarme, supongo que será un error de base asique seguiré trabajando con ello.

Solo quería agradecerte la ayuda
  #6 (permalink)  
Antiguo 22/09/2011, 06:26
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Respuesta: ¿Cómo imprimir variable con arquitectura MFC?

De nadas
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 14/10/2011, 03:42
 
Fecha de Ingreso: septiembre-2011
Ubicación: Madrid
Mensajes: 5
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: ¿Cómo imprimir variable con arquitectura MFC?

Hola Eternal Idol, ¿puedo preguntarte algo?

Estoy intentando abrir una imagen de otra forma a como hacia antes, utilizando un CFile con este código:

CFile *archivo= new CFile (lpszPathName, CFile::modeRead);
for(int i=0; i<m_tamano; i++)
archivo->Read(&(m_buffer),m_tamano);
archivo->Close();

Pero al pinchar en la foto seleccionada me da "error desconocido" al buscar la ruta de la imagen. ¿Sabes por qué puede ser?

Gracias de antemano,

un saludo
  #8 (permalink)  
Antiguo 15/10/2011, 13:18
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Respuesta: ¿Cómo imprimir variable con arquitectura MFC?

¿Que valor tiene lpszPathName? ¿Existe el archivo? Tenes que depurarlo para saberlo.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 17/10/2011, 04:06
 
Fecha de Ingreso: septiembre-2011
Ubicación: Madrid
Mensajes: 5
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: ¿Cómo imprimir variable con arquitectura MFC?

lpszPathName es donde se almacena el archivo que abro con la función OnOpenDocument.

BOOL CMy12agDoc::OnOpenDocument(LPCTSTR lpszPathName)

¿Cómo podría depurarlo?

Etiquetas: c++, mfc
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 05:00.