Probleme mit Bitmap im Hauptdialogfeld
-
Ich versuche gerade bei einem Programm eine Bitmap im Hauptdialogfeld anzuzeigen, leider klappt das nicht so recht. Ich habe jetzt den ganzen code nach OnInitDialog() verlagert, OnPaint() kann ich ja später noch verwenden wenn überhaupt mal was geht. Also hier der Code:
BOOL CBitmapsDlg::OnInitDialog() { CDialog::OnInitDialog(); [.....] // TODO: Hier zusätzliche Initialisierung einfügen // Gewählte Bitmap-Datei laden HBITMAP hBitmap = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(), "C:\\xyz.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); // Aktuell geladenes Bitmap mit Bitmap-Objekt verbinden m_bmpBitmap.Attach(hBitmap); CBitmapsDlg *pWnd = this; CPaintDC dc(this); ShowBitmap(&dc, pWnd); Invalidate(); return TRUE; // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten } void CBitmapsDlg::ShowBitmap(CPaintDC* pdc, CWnd* pWnd) { // Bitmap anzeigen CBitmapsDlg *lpWnd = (CBitmapsDlg*)pWnd; // Dialogpointer erstellen BITMAP bm; // Bitmappuffer lpWnd->m_bmpBitmap.GetBitmap(&bm); // Bitmap an bm CDC dcMem; dcMem.CreateCompatibleDC(pdc); // CDC zu CPaintDC dcMem.SelectObject(lpWnd->m_bmpBitmap); pdc->StretchBlt(10, 10, 200, 400, &dcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY); }was passt da denn nicht?

währe natürlich klasse wenn jemand gleich den code so anpassen würde das es hinhaut, irgendwie komm ich damit nicht so richtig zurecht
-
Compilieren lässt sich das Prog, nur angezeigt wird nichts, der Hanel auf die Bitmap ist gültig.
Hat vielleicht jemand ein (funktionierendes)Codebeispiel für die Anzeige einer Bitmap? Hier http://www.c-plusplus.net/forum/viewtopic-var-t-is-110197-and-highlight-is-attach.html
wird leider nur darauf eingegangen wie man sie lädt.mfg
-
1. Was sollen die ganzen Pointer auf dein CWnd? Das ist schwachsinnig!
2. OnEraseBackground ist die stelle an der man sowas unter anderem auch mache kann..
3.BOOL CBitmapsDlg::OnEraseBkgnd(CDC* pDC) { CDialog::OnEraseBkgnd(pDC); if(!m_bmpBitmap.m_hObject) return true; CRect rcClient; CDC memDC; int nBmpWidth; int nBmpHeight; BITMAP bitmap; CBitmap* pOldBitmap; GetClientRect(&rcClient); memDC.CreateCompatibleDC(pDC); pOldBitmap = memDC.SelectObject(&m_bmpBitmap); m_bmpBitmap.GetBitmap(&bitmap); nBmpWidth = bitmap.bmWidth; nBmpHeight = bitmap.bmHeight; pDC->StretchBlt(0, 0, rcClient.Width(), rcClient.Height(), &memDC, 0, 0, nBmpWidth, nBmpHeight, SRCCOPY); memDC.SelectObject(pOldBitmap); return 1; }m_bmpBitmap.LoadImage(...);im Konstruktor sollte seinen Dienst auch tuen
