B
ich hab hier nocheinmal ein code der
dieses "übermalen" macht
#include <windows.h> // Ganz klar, dass wir die brauchen.
#include <stdio.h>
#include <conio.h> // getch()...
#pragma comment(lib, "gdi32.lib")
int ShowBitmap(char *szBmpFile, int iX, int iY); // Prototyp unserer Bild-Anzeigefunktion.
void main(void)
{
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nBeliebige Taste... ");
if(ShowBitmap("D:\\lol.bmp", 10, 10) == -1) printf("Ein Fehler ist aufgetreten.");
getch();
}
int ShowBitmap(char *szBmpFile, int iX, int iY) // Mit X bzw. Y können Sie das Bild
// in verschiedenen Bereichen des
// Konsolenfensters erscheinen
// lassen.
{
HDC hDC; // Auch den DC (Device Control) wo das Bild hineingezeichnet werden
HDC hDC2; // Einen DC noch für das Bild, das wir laden.
// soll, brauchen wir!
HWND hWnd; // Um das Bild in der Konsole anzuzeigen, brauchen wir das Handle
// (HWND) vin dem laufenen Konsolenfenster. In hWnd holen wir's.
// Wir laden ein Bitmap mit einem HBITMAP Handle wie gehabt von der Festplatte
// (spezieller Pfad) mit LR_LOADFROMFILE.
HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, szBmpFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
if(hBitmap == NULL) return -1; // Bei falschem Handle, -1 zurückgeben!
// Jetzt Infos über's Bild holen!
BITMAP bitmap;
GetObject(hBitmap, sizeof(bitmap), &bitmap); // Wir brauchen ein paar Infos über das Bild
// in der Datei.
// So. Holen wir das Konsolenfenster-Handle!
hWnd = FindWindow("ConsoleWindowClass", NULL);
if(hWnd == NULL) return -1; // Und wieder... Wenn Handle NULL, dann gib' -1 zurück!
hDC = GetDC(hWnd);
if(hDC == 0) return -1; // Selbsterklärend! ;)
hDC2 = CreateCompatibleDC(hDC); // Einen für unsere Grafik kompatiblen
// DC erstellen!
if(hDC2 == NULL) return -1; // *gääähn*. :-)
SelectObject(hDC2, hBitmap); // So. Hier wird auf hDC2 unser Bitmap gesetzt!
// Mit BitBlt hauen wir dann also das Bild (das sich im DC befindet) in den DC
// des Konsolenfensters. Das ist im Prinzip alles, was wir in diesem Programm
// tun.
BitBlt(hDC, iX, iY, bitmap.bmHeight, bitmap.bmWidth, hDC2, 0, 0, SRCCOPY);
DeleteObject(hBitmap); // Bitte
ReleaseDC(hWnd, hDC); // keine
ReleaseDC(hWnd, hDC2); // Speicherleaks!
return 0; // Alles glatt gelaufen... 0 zurückgeben!
}