Hallo,
ich habe mir von der Seite hier http://support.microsoft.com/kb/103786/en-us das Beispiel gezogen wie man die Hintergrundfarbe in einem MDI Fenster ändert. So jetzt habe ich probiert das auf ein Bitmap umzumünzen. Das hat auch insofern funktioniert das mir das Bitmap angezeigt wird, allerdings wird es bei jedem möglichen Event übermalt, wenn ich z.B. ein anderes Fenster in den Vordergrund hole, das Fenster über den Monitor Rand rausschiebe oder MDIChild Fenster öffne.
Meine Frage lautet nun, wie kann ich das verhindern? Bzw wie kann ich einen Repaint auslösen? (RedrawWindow, Invalidate etc. habe ich schon durch probiert)
Habe schon alles probiert, aber ein OnDraw Methode gibt es in diesem Fall nicht und OnPaint macht die gleichen Probleme wie OnEraseBkgnd.
Vielen Dank für eure Hilfe.
Achja und vielleicht kann mir ja auch jmd sagen warum das Bitmap immer mit 256 Farben angezeigt wird, obwohl es 32 Bit Farben hat?!
gruß
Groove
ich habe mir von der Seite hier http://support.microsoft.com/kb/103786/en-us das Beispiel gezogen wie man die Hintergrundfarbe in einem MDI Fenster ändert. So jetzt habe ich probiert das auf ein Bitmap umzumünzen. Das hat auch insofern funktioniert das mir das Bitmap angezeigt wird, allerdings wird es bei jedem möglichen Event übermalt, wenn ich z.B. ein anderes Fenster in den Vordergrund hole, das Fenster über den Monitor Rand rausschiebe oder MDIChild Fenster öffne.
Meine Frage lautet nun, wie kann ich das verhindern? Bzw wie kann ich einen Repaint auslösen? (RedrawWindow, Invalidate etc. habe ich schon durch probiert)
Habe schon alles probiert, aber ein OnDraw Methode gibt es in diesem Fall nicht und OnPaint macht die gleichen Probleme wie OnEraseBkgnd.
Code:
CNewCleintWnd::CNewCleintWnd()
{
m_MyBitmap.LoadBitmap(IDB_BITMAP1);
m_MyBitmap.GetBitmap(&BmpParam);
}
CNewCleintWnd::~CNewCleintWnd()
{
}
BEGIN_MESSAGE_MAP(CNewCleintWnd, CWnd)
//{{AFX_MSG_MAP(CNewCleintWnd)
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Behandlungsroutinen für Nachrichten CNewCleintWnd
BOOL CNewCleintWnd::OnEraseBkgnd(CDC* pDC)
{
int bx, by;
m_pMemDC = new CDC;
m_pMemDC->CreateCompatibleDC(pDC);
// Set brush to desired background color
CBrush backBrush(RGB(255,255,255));
// Save old brush
CBrush* pOldBrush = pDC->SelectObject(&backBrush);
CRect rect;
pDC->GetClipBox(&rect); // Erase the area needed
pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(),
PATCOPY);
m_pMemDC->SelectObject(&m_MyBitmap);
bx=rect.right/2-BmpParam.bmWidth/2;
by=rect.bottom/2-BmpParam.bmHeight/2;
pDC->BitBlt(bx,by,BmpParam.bmWidth,BmpParam.bmHeight,
m_pMemDC,0,0,SRCCOPY);
m_pMemDC->Detach();
ReleaseDC(pDC);
return TRUE;
return CWnd::OnEraseBkgnd(pDC);
}
Vielen Dank für eure Hilfe.
Achja und vielleicht kann mir ja auch jmd sagen warum das Bitmap immer mit 256 Farben angezeigt wird, obwohl es 32 Bit Farben hat?!
gruß
Groove