Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » bmp auf konsole zeichnen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.01.2012, 18:18 Uhr
~Christian R
Gast


Hallo!
Ich möchte ein Programm erstellen, welches in einer Unendlichen Schleife, eine Bitmap in der Konsole hin- und herbewegt.
Habe dazu im Internet eine Funktion gefunden, mit der man eine Bitmap Datei auf die Konsole "malen" kann (Leider nur quadratisch).
So nun habe ich folgendes Problem: Das Programm funktioniert eigentlich wunderbar, nur dass nach ca. 10-15 Sek. die Konsole einfach Schwarz bleibt, woran liegt das?

Ich benutze Dev-C++ 4.9.9.2 unter WinXP

Mein Quellcode: (linker libgdi32 und "Figur.bmp" erstellen mit z.B. den Maßen 10x10 Pixel)


C++:
#include <windows.h>
#define RECHTS 1
#define LINKS 2

void drawImage(char *szBitmap,int PosX, int PosY)
{  
   HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,szBitmap,
                     IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
   BITMAP bmp;
   GetObject(hBitmap,sizeof(bmp),&bmp);
   HWND hwnd = FindWindow("ConsoleWindowClass",NULL);
   HDC hDC = GetDC(hwnd);  
   HDC hBitmapDC = CreateCompatibleDC(hDC);
   SelectObject(hBitmapDC,hBitmap);
   BitBlt(hDC,PosX,PosY,bmp.bmHeight,bmp.bmWidth,hBitmapDC,0,0,SRCCOPY);  
   DeleteObject(hBitmap);
   ReleaseDC(hwnd,hBitmapDC);
   ReleaseDC(hwnd,hDC);
}

int main()
{
    HWND hwnd = FindWindow("ConsoleWindowClass",NULL);
    int x = 0, y = 0;
    int richtung = RECHTS;
    
    while(1)
    {
            drawImage("Figur.bmp", x, y);
            Sleep(5);
            InvalidateRect(hwnd, 0, true);
            
            if(richtung == RECHTS)x++;
            if(richtung == LINKS)x--;
            
            if(x >= 100)richtung = LINKS;
            if(x == 0)richtung = RECHTS;
    }
}


-----
Edit: cpp-Tags eingefügt, nächstes mal bitte selber machen.

Dieser Post wurde am 13.01.2012 um 20:13 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.01.2012, 09:29 Uhr
Tommix



'Morgen,
mit einem Debugger würdest Du leicht sehen wo was nicht klappt. Der Fehler ist, das Du statt ReleaseDC

C++:
   DeleteObject(hBitmap);
   DeleteDC(hBitmapDC);   // !
   ReleaseDC(hwnd,hDC);


verwenden mußt, sonst gehen Dir irgendwann die Ressourcen aus. Allerdings wäre es sinnvoller, das Bild überhaupt nur einmal zu Programmbeginn zu laden.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.01.2012, 12:16 Uhr
~Christian R
Gast


Danke für die Antwort, funktioniert nun einwandfrei
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: