[MSVC++6] Bitmaps in MFC laden

Bigbutcher

Erfahrenes Mitglied
Moin Moin,

Ich bin grad dabei mich in MFC einzuarbeiten und bin soweit dass ich ein Fenster erzeugen kann. Mein nächstes Ziel wäre eine Bitmap zu laden und in diesem Fenster darstellen zu können. Welche Funktion benötige ich da?

Hier der Quelltext:

Code:
#ifndef __APPLIK_H__
#define __APPLIK_H__

#include <afxwin.h>
#include <afxext.h>

class Ansicht : public CView
{
public:
	Ansicht (CFrameWnd *parent);
protected:
	afx_msg void OnDraw (class CDC *);
};

class Rahmen : public CFrameWnd
{
public:
	Rahmen();
};

class Anwendung : public CWinApp
{
public:
	virtual BOOL InitInstance();
};

#endif

Code:
#ifndef __APPLIK_CPP__
#define __APPLIK_CPP__

#include "Applik.h"

Anwendung myAnwendung;

Ansicht::Ansicht(CFrameWnd *parent)
{
	Create (0, 0, WS_CHILD | WS_VISIBLE, CRect(), parent, AFX_IDW_PANE_FIRST);
}

void Ansicht::OnDraw(class CDC *dc)
{
}

Rahmen::Rahmen()
{
	LPCTSTR wndClass = AfxRegisterWndClass (NULL, 
											AfxGetApp()->LoadCursor(IDC_ARROW),
											(HBRUSH) (COLOR_WINDOW+1),
											NULL);
	Create (wndClass, "Title", WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME, CRect (20,20, 400, 300));

	new Ansicht(this);
}

BOOL Anwendung::InitInstance()
{
	Rahmen *rahmen = new Rahmen;

	m_pMainWnd = rahmen;
	m_pMainWnd->ShowWindow(m_nCmdShow);
	m_pMainWnd->UpdateWindow();

	return TRUE;
}

#endif

Ich hab hier einen Beitrag gefunden, in dem stand, dass man eine Bitmap mit HBITMAP laden kann, soweit so gut, aber wie kann man die dann darstellen?

MfG

BB
 
Zuletzt bearbeitet:
Naja jetzt hab ich es endlich geschafft ein Bild zu laden und es darstellen zu können.

Die .cpp sieht jetzt so aus:

Code:
#ifndef __APPLIK_CPP__
#define __APPLIK_CPP__

#include "Applik.h"

Anwendung myAnwendung;

Ansicht::Ansicht(CFrameWnd *parent)
{
	Create (0, 0, WS_CHILD | WS_VISIBLE, CRect(), parent, AFX_IDW_PANE_FIRST);
}

void Ansicht::OnDraw(class CDC *pDC)
{
	HBITMAP hBmp;
	CDC* pCompDC = new CDC();
	CBitmap * pCBitmap = new CBitmap();
	CRect rect;
	
	hBmp = (HBITMAP)::LoadImage(NULL,"show.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);

	pCompDC->CreateCompatibleDC(pDC);

	pCBitmap->Attach(hBmp);
	
	pCompDC->SelectObject(pCBitmap);
	GetParent()->GetClientRect(&rect);
	pDC->BitBlt(0, 0, rect.Width(), rect.Height(), pCompDC, 0, 0 , SRCCOPY);
	delete pCompDC;
	delete pCBitmap;

    //ReleaseDC(pDC);

	/*****************************/

	HBITMAP hBmp2;
	CDC* pCompDC2 = new CDC();
	CBitmap * pCBitmap2 = new CBitmap();
	CRect rect2;
	
	hBmp2 = (HBITMAP)::LoadImage(NULL,"showraw.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);

	pCompDC2->CreateCompatibleDC(pDC);

	pCBitmap2->Attach(hBmp2);
	
	pCompDC2->SelectObject(pCBitmap2);
	GetParent()->GetClientRect(&rect2);

	pDC->BitBlt(0, 60, rect2.Width(), rect2.Height(), pCompDC2, 0, 0 , SRCCOPY);

	delete pCompDC2;
	delete pCBitmap2;

    ReleaseDC(pDC);
}

Rahmen::Rahmen()
{
	LPCTSTR wndClass = AfxRegisterWndClass (NULL, 
											AfxGetApp()->LoadCursor(IDC_ARROW),
											(HBRUSH) (COLOR_WINDOW+1),
											NULL);
	Create (wndClass, "Title", WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME, CRect (20,20, 400, 300));
	new Ansicht(this);
}

BOOL Anwendung::InitInstance()
{
	CWinApp::InitInstance();
	Rahmen *rahmen = new Rahmen;

	m_pMainWnd = rahmen;
	m_pMainWnd->ShowWindow(m_nCmdShow);
	m_pMainWnd->UpdateWindow();

	return TRUE;
}

#endif

Aber jetzt hab ich ne andere Frage, wie kann ich das machen, dass sich die Bilder in einem bestimmten Intervall aktualisieren?

Wenn ich eine while Schleife mit Sleep () herumbaue bekomme ich nach dem ersten Durchlauf immer einen Fehler bei der Ausführung.

Ich vermute mal dass ich den Code von der OnDraw in eine Methode verschieben muss.
Aber bislang schlugen alle meine Versuche fehl.

Wie muss mein Ansatz aussehen?

MfG

BB
 
Zurück