Bitmap laden - Handle ist 0x0000000000
-
Hallo Zusammen,
seit Weihnachten sitze ich nun über diesem Problem. Schaue mal in das Tut, schaue mal in ein anderes. Alles verschiedene Lösungen, aber keine hat mich bisher zum Ziel geführt. Ich möchte ein Bitmap zunächst einmal laden und später dann auch anzeigen. Das Ganze soll in einer Dialog-Prozedur geschehen. Was ich in den Tuts gesehen habe ist, dass der ganze Vorgang meistens in der Windowshauptprozedur abgehandelt wird. Das Problem ist jetzt, dass die Funktion LoadBitmap ein NULL-Handle zurückliefert und offensichtlich kein Bitmap findet !!??!!
Wo könnte hier der Fehler liegen. Muss vielleicht das Laden von Bitmaps in der Windowshauptprozedur stattfinden und erst das Anzeigen in der Dialogprozedur?? Bitte helft mir ein bisschen auf die Sprünge, denn so fit in WinApi bin ich leider noch nicht. Danke schon jetzt. Ach so, noch ein bisschen Code: (GetLastError gibt übrigens auch einen vollkommen abstrusen Wert von sich)
// Dialogprozeduren #include <windows.h> #include <windowsx.h> #include "resource.h" #include "importiert.h" // 9. Automatische Verbuchung ausführen BOOL CALLBACK DlgProc9 (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { // Lokale Variablen deklarieren static char buffer[BUFFERGROESSE]; // Globaler Fehlercode/Returncode int retcode = 0; int retcodeDB = 0; int nindex = 0; // Position static HBITMAP hBitmap ; static BITMAP bitmap ; HDC hdc; HINSTANCE hInstance ; PAINTSTRUCT paintStruct; static char * pszHello = "Hello World!"; DWORD lastError; switch(message) { case WM_PAINT: hdc = BeginPaint(hDlg, &paintStruct); TextOut(hdc, 0,0, pszHello, lstrlen(pszHello)); EndPaint(hDlg, &paintStruct); return TRUE; case WM_INITDIALOG: // Datenbank oeffnen hInstance = (HWND) hDlg; hBitmap = (HBITMAP) LoadBitmap(hInstance,"IDB_BITMAP2"); lastError = GetLastError(); retcodeDB = connectDB(); return TRUE; case WM_COMMAND: { switch (LOWORD(wParam)) // OK / Abbrechen { // OK case IDOK: { retcodeDB = disconnectDB(); if(retcodeDB != 0) MessageBox(hDlg, "Schließen der Datenbank hat nicht geklappt!", "Datenbankzugriff", 0); EndDialog(hDlg,0); return TRUE; } // Cancel case IDCANCEL: { retcodeDB = disconnectDB(); if(retcodeDB != 0) MessageBox(hDlg, "Schließen der Datenbank hat nicht geklappt!", "Datenbankzugriff", 0); EndDialog(hDlg,0); return TRUE; } } // Switch LOWORD } // Switch Message } return FALSE; }
Viele Grüße
Oliver
-
Heisst die Bitmap wirklich "IDB_BITMAP2", also mit den Anführungszeichen, oder eher IDB_BITMAP2? Bei Letzterem musst du das so schreiben:
LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BITMAP2));
cya
-
@MagicCreator,
Danke für die schnelle Antwort. Hat leider nicht funktioniert. War aber in der Tat Alternative 2 ohne Anführungszeichen. Kann es noch mit was anderem zu tun haben? Mit dem Instanzhandle vielleicht?
Gruß
Oliver, der Verzweifelnde
-
Genau, ersetz mal die Zeile:
hInstance = (HWND) hDlg;
durch die:
hInstance = GetModuleHandle(0);
oder die:
hInstance = (HINSTANCE)GetWindowLong(hDlg, GWL_HINSTANCE);
dann sollte es gehen.
[ Dieser Beitrag wurde am 29.12.2002 um 18:04 Uhr von D@niel $chumann editiert. ]
-
da hast Du doch immer einen guten Tip parat
Aber: GetModuleHandle hat funktioniert, GetWindowLong nicht. Warum?
Ansonsten muss ich jetzt noch den Fehler 1814 von GetLastError suchen.
Vielleicht muss ich mich nochmal melden, ansonsten aber schon mal herzlichen Dank auch an MagicCreator.
Gruß
Oliver
-
Ich denke mal es war ein Compiler-Fehler, oder?
Einfach den von GetWindowLong zurückgegebenen long-Wert auf HINSTANCE casten, dann gehts. Ich hab die Zeile in meinem vorigen Posting korrigiert.
-
Compiler-Fehler war es nicht, hat einfach so nicht funktioniert. Hast Du noch eine Idee für den 1814 "The specified resource name cannot be found in the image file. ERROR_RESOURCE_NAME_NOT_FOUND". Wenn ich ganz intensiv auf meine Resourcen-Definitionen gucke, dann steht da der Name, wie im Quellcode.
Gruß
Oliver
-
Wenn du es so gemacht hast, wie MagiC Creator geschrieben hat, sollte es gehen. Wenn es trotzdem nicht geht, kannst du mir dein Projekt auch gern per Email schicken, dann schau ich es mir mal an. (Daniel-Schumann@web.de)
-
Wenn du noch ein Problem mit Bitmaps hast, kannst du dir ja mal das WinAPI-Tutorial von GermanDevNet anschauen (www.germandevnet.de, unter Knowledgebase).
cya
-
@Alle,
Danke nochmals an Alle, die geholfen haben. Der Dialog läuft jetzt inklusive dem Bitmap und den in die GDI ausgegebenen Texten.
Gruß
Oliver