Einfaches Tutorial funkz nicht: Bild
-
Hallo.
Ich wollte ein einfaches Tutorial machen:
http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel4.htm
(Erstmal bis zu Punkt 4.)Aber irgendwie klappt das nicht.
Ich hab eine Bitmap Resource hinzugefügt.
Im Dialog die Variabel hinzugefügt.
Und den Code entsprechend editiert.Es werden mir keine Fehler- oder Warningmeldung angezeigt.
Aber wenn ich kompiliere, habe ich trotzdem das Bitmap nicht in der Anwendung wie im Screenshot vom Tut.
Hier mein Code von der DialogCpp
// dasisteintestDlg.cpp : Implementierungsdatei // #include "stdafx.h" #include "dasisteintest.h" #include "dasisteintestDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CdasisteintestDlg-Dialogfeld CdasisteintestDlg::CdasisteintestDlg(CWnd* pParent /*=NULL*/) : CDialog(CdasisteintestDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CdasisteintestDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CdasisteintestDlg, CDialog) ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP END_MESSAGE_MAP() // CdasisteintestDlg-Meldungshandler BOOL CdasisteintestDlg::OnInitDialog() { CDialog::OnInitDialog(); // Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt // wenn das Hauptfenster der Anwendung kein Dialogfeld ist SetIcon(m_hIcon, TRUE); // Großes Symbol verwenden SetIcon(m_hIcon, FALSE); // Kleines Symbol verwenden // TODO: Hier zusätzliche Initialisierung einfügen Bild1.LoadBitmap( IDB_BITMAP1 ); return TRUE; // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten } // Wenn Sie dem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie // den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das // Dokument/Ansicht-Modell verwenden, wird dies automatisch ausgeführt. void CdasisteintestDlg::OnPaint() { CClientDC dc( this ); BITMAP bm; Bild1.GetObject( sizeof( bm ), &bm ); CDC SpeicherDC; SpeicherDC.CreateCompatibleDC( &dc ); SpeicherDC.SelectObject( &Bild1 ); CRect Rect; GetClientRect( &Rect ); dc.SetStretchBltMode( HALFTONE ); dc.StretchBlt( 0, 0, Rect.right, Rect.bottom, &SpeicherDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY ); CDialog::OnPaint(); } // Die System ruft diese Funktion auf, um den Cursor abzufragen, der angezeigt wird, während der Benutzer // das minimierte Fenster mit der Maus zieht. HCURSOR CdasisteintestDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); }
-
Hey "klingklang",
Setze mal diesen Code in OnPaint(), dann gehts:
CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP37); BITMAP bm; bitmap.GetObject(sizeof(bm), &bm); CDC speicherDC; speicherDC.CreateCompatibleDC(&dc); speicherDC.SelectObject(&bitmap); RECT rect; GetClientRect(&rect); dc.StretchBlt( 0,0,rect.right-rect.left,rect.bottom-rect.top, &speicherDC,0,0,bm.bmWidth, bm.bmHeight, SRCCOPY);
Du brauchst dann auch keine Variable.
-
HermannGo schrieb:
Hey "klingklang",
Setze mal diesen Code in OnPaint(), dann gehts:
CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP37); BITMAP bm; bitmap.GetObject(sizeof(bm), &bm); CDC speicherDC; speicherDC.CreateCompatibleDC(&dc); speicherDC.SelectObject(&bitmap); RECT rect; GetClientRect(&rect); dc.StretchBlt( 0,0,rect.right-rect.left,rect.bottom-rect.top, &speicherDC,0,0,bm.bmWidth, bm.bmHeight, SRCCOPY);
Du brauchst dann auch keine Variable.
Hallo und danke.
Aber leider hat es nicht funktioniert:
http://www.xup.in/dl,20855693/screeni.JPG/
-
Es muss noch eine Codezeile mit rein.
Außerdem hast Du die Bitmap ID (IDB_BITMAP37) nicht geändert.
Du mußt hier die ID Deiner Bitmapressource angeben.
Bitmap muss sich im Ressourcenordner befinden u. in Visual Studio in der Ressourcenansicht in Bitmaps.Dann sind die Fehler weg.
CPaintDC dc(this);//Habe ich vergessen CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP37); BITMAP bm; bitmap.GetObject(sizeof(bm), &bm); CDC speicherDC; speicherDC.CreateCompatibleDC(&dc); speicherDC.SelectObject(&bitmap); RECT rect; GetClientRect(&rect); dc.StretchBlt( 0,0,rect.right-rect.left,rect.bottom-rect.top, &speicherDC,0,0,bm.bmWidth, bm.bmHeight, SRCCOPY);
-
setzt du ganz am anfang deiner OnPaint noch
CPaintDC dc(this);
und für IDB_BITMAP37 setzt du die ID deines Bitmaps aus der Resourcendatei ein oder erstellt mit dem Resourceneditor ein BITMAP was du anzeigen willst und änderst den Namen im Programm entsprechend, dann sollte alles gehen, wenn der Rest dann stimmt