WinAPI Image einfügen

BlackMisc

Grünschnabel
Hallo,
da ich schon seit längerem vergeblich versucht habe Bilder in mein Programm einzufügen, frage ich mal hier nach. :)

Ich habe schon auf einigen vielen Seiten Code gefunden, der jedoch nicht funktioniert. Nun möchte ich hier mal fragen, ob jemand einen Code hat der funktionier, oder ob er es mir erklären kann wie ich ein Bitmap in das Programm einfüge.
 
Hi

wie genau willst du was "einfügen"?
Einfach anzeigen?

Konsole, Winapi, MFC, Qt, wxWidgets, ... (Winforms)?
Bildformat (bmp, jpg, tiff...)?
 
Bei der WinAPI.
Ich möchte gerne ein Bild (.bmp) in einem einfachen Fenster anzeigen.
Hier zur demonstration: bitmap.png

EDIT: @ComFreek
Hab diese beiden Tutorials schon ausprobiert, jedoch hat keines funktioniert. :|
 
Ok, sorry.
Beim dem http://www.functionx.com/win32/Lesson14.htm lässt es sich wunderbar compilieren, gibt keine Fehler, jedoch wird das Bild nicht angezeigt.

Beim ersten kommt mit Visual Studio 2012 der Fehler:
Code:
Fehler	1	error C2440: 'Initialisierung': 'HGDIOBJ' kann nicht in 'HBITMAP' konvertiert werden	c:\users\myname\documents\programming\projects\winapi\shutmedown\shutmedown\shutmedown.cpp	85	1	ShutMeDown
 
Hallo BlackMisc,
lies dir bitte noch einmal durch wie man Posts treffend und genau erstellt.

Aber genug der Meckerei, ich rate einfach ma drauf los:

Erstelle dir folgende Funktion:
C++:
void DrawBitmap(HDC hdcdevice, char *filename, int x, int y)
{
    HBITMAP himage = (HBITMAP)LoadImage(g_hInst, filename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    BITMAP bm;
    GetObject(image, sizeof(BITMAP), &bm);
    HDC hdcmemory = CreateCompatibleDC(hdcdevice);
    SelectObject(hdcmemory, himage);
    BitBlt(hdcdevice, x, y, bm.bmWidth, bm.bmHeight, hdcmemory, 0, 0, SRCCOPY);
    DeleteDC(hdcmemory);
    DeleteObject((HBITMAP)himage);
}

Für sauberen Code solltest du ganz am Anfang deiner Datei bei den Globals eine 'static HINSTANCE g_hInst' definieren. Diese solltest du auch durchgehend benutzen. Hast du keine, kannst du hier einfach '0' einsetzen.

Die Bitmap die du laden möchtest sollte eine 24-Bit Bitmap sein.

Du benötigst den Zeichenkontext deines Fensters, den du der Funktion dann übergibst. Der Aufruf der Funktion ist (unter Win7 und Win8) denkbar einfach:
C++:
DrawBitmap(MyHDC, "AsimpleFilename.bmp", 12, 12);

Grüße
Technipion

EDIT: Sollte der Code immer noch nicht funktionieren, musst du die Return-Codes der LoadImage- und der BitBlt-Funktion abfangen und die Ergebnisse posten.

Falls du nocht etwas herumspielen möchtest mit den Bildern hier mal ein Anhaltspunkt: http://msdn.microsoft.com/en-us/library/windows/desktop/ms648045(v=vs.85).aspx
 
Zuletzt bearbeitet:
Zurück