C/Visual C - UN BMP QUE NO SE PINTA

 
Vista:

UN BMP QUE NO SE PINTA

Publicado por ifer (52 intervenciones) el 03/02/2003 16:43:34
Tengo un bmp cargado en oBitmap:
CBitmap oBitmap;
CBitmap *pBitmap;
CDC memBitmapDC;
si bBMP=TRUE lo despliego asi:
void CMyFormDlg::OnPaint()
{
if (bBMP)
{
CPaintDC dc(this);
pBitmap = memBitmapDC.SelectObject(&oBitmap);
dc.BitBlt(0,0,10,10,&memBitmapDC,0,0,SRCCOPY);
memBitmapDC.SelectObject(pBitmap);
}
CDialog::OnPaint();
}
pero no se pinta, solo cuando pongo otra ventana sobre este
y luego lo quito, pense que era cuestion de poner un Invalidate()
o UpdateWindow(), pero no funcionan! que falla !
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:UN BMP QUE NO SE PINTA

Publicado por fernando.gomez (61 intervenciones) el 04/02/2003 00:40:14
Me parece que lo que falla es que nunca cargaste el mapa de bits ;-)

En tu archivo de recurso, debes declarar tu mapa de bits:

// recursos.rc
#include <afxres.h>
#define MiBitmap 1000
MiBitmap BITMAP C:\bitmap.bmp

luego, tienes que emplear CBitmap::LoadBitmap(LPCTSTR lpszResourceName) o CBitmao::LoadBitmap(UINT nIDResource). En el ejemplo anterior, pasarias como parametro _T("MiBitmap") a la primera funcion, o 1000 a la segunda.

saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:UN BMP QUE NO SE PINTA

Publicado por fiero (3 intervenciones) el 04/02/2003 13:15:42
No llames a CDialog::OnPaint() a ver que pasa. Cuando hagas una aplicación con MFC no quites la opción de que te escriba comentarios automáticamente. Al sobreescribir CMyFormDlg::OnPaint(), el VC inserta la frase:
// Do not call CDialog::OnPaint() for painting messages
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:UN BMP QUE NO SE PINTA

Publicado por fiero (3 intervenciones) el 04/02/2003 13:20:31
Además la función OnPaint() sólo se ejecuta cuando la ventana necesita redibujarse (por ejemplo cuando pasas otra ventana por encima como dices) así que puede ser que al principio se llame pero antes de que hayas cargado el bmp, y después ya no se vuelva a llamar.
Si quieres que se dibuje nada más cargar el bmp pon esto después de la carga:
PostMessage(WM_PAINT);

un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:UN BMP QUE NO SE PINTA

Publicado por fernando.gomez (61 intervenciones) el 04/02/2003 19:20:23
Pero OnPaint siempre se llama cuando se llama a CWinApp::InitInstance(), que es donde se crea tu aplicacion:

LPCSTR pcsName = AfxRegisterWndClass(0,
NULL, bkbrush,
NULL );

this->m_pMainWnd = new CMainWin(pcsName);
this->m_pMainWnd ->ShowWindow(m_nCmdShow);
this->m_pMainWnd ->UpdateWindow();

claro, esto considerando que tu clase de ventana base se llama CMainWin : CFrameWnd.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:UN BMP QUE NO SE PINTA

Publicado por fiero (3 intervenciones) el 04/02/2003 23:19:12
Si, todo depende de donde cargue el bmp, si lo carga antes o después de la primera llamada a OnPaint() desde el CWinApp::InitInstance()

un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

OK, pero...

Publicado por ifer (52 intervenciones) el 06/02/2003 15:37:24
ya soluciones el problema. gracias a ambos por sus soluciones, sin embargo tengo otro problema que tambien lo publicare, es que tengo que acceder a cada color RGB del pixel del mapa, como llevo el bmp a una estructura de datos???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar