Hintergrundbild einfuegen?

Habe deine Änderung eingefügt. Das Bild ist immer noch oben links in der Ecke.
Manchmal ist es zum Teil auf meinem Programmfenster. Muß ich das Fenster positionieren oder die Größe ändern. Wie geht das eigentlich?
 
moin


Fenster Positionieren mit:
Code:
BOOL SetWindowPos(
    HWND hWnd,
    HWND hWndInsertAfter,
    int X,
    int Y,
    int cx,
    int cy,
    UINT uFlags
);


Und Bild anzeigen und größe beeinflussen mit:
Code:
BOOL BitBlt(
  HDC hdcDest, // handle to destination DC
  int nXDest,  // x-coord of destination upper-left corner
  int nYDest,  // y-coord of destination upper-left corner
  int nWidth,  // width of destination rectangle
  int nHeight, // height of destination rectangle
  HDC hdcSrc,  // handle to source DC
  int nXSrc,   // x-coordinate of source upper-left corner
  int nYSrc,   // y-coordinate of source upper-left corner
  DWORD dwRop  // raster operation code
);


mfg
umbrasaxum
 
Erst mal vielen Dank für deine Antworten.

Das Fenster " Bild" hat er gefunden.
Fenster positionieren und Größe verändern muß ich noch ausprobieren.
 
Das Hintergrundbild habe ich eingefügt. Wenn ich das Fenster an den Kanten entlangbewege, wird das Hintergrundbild dort gelöscht. Ich habe es mit malloc versucht. Habe aber immer eine Fehlermeldung bekommen ( siehe unten). Was habe ich falsch gemacht? Gibt es noch eine andere Möglichkeit das Hintergrundbild zu erhalten. Das Fenster positionieren hat leider nicht geklappt.



CHAR_INFO* SaveRect(int left,int top, int width, int height)

{
COORD bc = {0,0},
bs = {width, height};
SMALL_RECT sr = {left, top, left+width-1, top + height-1};
CHAR_INFO* cip = malloc(width*height*sizeof(int));
ReadConsoleOutput(GetStdHandle(STD_OUTPUT_HANDLE),
cip, bs, bc, &sr);
return cip;
}
//'initializing' : 'void *' kann
// nicht in 'struct _CHAR_INFO *' konvertiert werden
// Konvertierung von 'void*' in Zeiger auf nicht-'void'
// erfordert eine explizite Typumwandlung


void RestoreRect (CHAR_INFO* cip, int left, int top, int width, int height)
{
COORD bc = {0,0},
bs = { width, height};
SMALL_RECT sr = {left, top, left + width - 1, top + height - 1};

WriteConsoleOutput ((STD_OUTPUT_HANDLE),cip, bs, bc, &sr);
free (pci);
}
 
Das Hintergrundbild habe ich eingefügt. Wenn ich das Fenster an den Kanten entlangbewege, wird das Hintergrundbild dort gelöscht. Außerdem wird das Hintergrundbild zum Teil über das Fenster rübergemalt, also auch auf meinen Editor. Über eine gute Idee würde ich mich freuen.
 
Erstell dir ein Fenster (Konsolenanwendungen sind nicht für Bilder geeignet, auch wenn es funktioniert) mit CreateWindow() dann must du eine Nachrichten-Callbackfunktion bauen (WndProc). Darin kannst du WM_DRAW-, WM_MOVE-, usw... Nachrichten behandeln.
Das Ganze ist Grundlage von Windowsprogrammierung.

Warum wollt ihr immer mit komplizierten Sachen wie Bilder blitten, 3D Sachen usw. anfangen?

Übrigens das Beispiel von Umbrasaxum soll nur ein Anhaltspunkt für einen Bitblit sein.

Gruß Daniel
 
moin


Ja, Daniel Toplak hat recht.
Es ist nur ein Beispiel wie es im Prinzip gehen würde.
Die Konsole ist einfach nicht für Bilder da.
Wenn man was mit Bildern machen will, sollte man sich mit Windowsprogrammierung beschäftigen.

Das Beispiel wird übrigens (fast) genauso in der Windowsprogrammierung verwendet.


mfg
umbrasaxum
 
Hallo,

ich würde dir auch empfehlen auf Windows Anwendungen umzusteigen.
Es dauert zwar etwas bis man volkommen den Durchblick mit Windows hat.
Aber es lohnt sich. Irgendwann will man gar kein Konsolenprogramm mehr schreiben.
Und wenn das mit Grafischen möglichkeiten noch nicht genug ist, kann man noch OpenGl oder DirectX benutzen.
 
Zurück