Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

1

13.07.2006, 20:24

Warum passiert nichts?

Hi,

hab einen ganz einfachen Code, sehe keinen Fehler und trotzdem passiert nichts!!! Habh ich etwas übersehen (sollte nur einen Hintergrund zeichnen)?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//#####################################################################


extern  HWND    hWnd;

//#####################################################################


void DrawBackground()
{
    HBITMAP hBackground = (HBITMAP)LoadImage(NULL, "bild.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); 

    HDC hDCBackground   = CreateCompatibleDC(0);

    SelectObject(hDCBackground, hBackground);

    RECT grc;
    
    GetClientRect(hWnd,&grc); 

    HDC hDChWnd = GetDC(hWnd);
    
    BitBlt(hDChWnd,0,0,150,150,hDCBackground,0,0,SRCCOPY);
    
    ReleaseDC(hWnd, hDChWnd);
}

//###################################################################


Bild liegt im Ordner und zusätzliche Abhängigkeiten brauche ich meines Wissens ja auch nicht. Woran könnte das liegen? :?:

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

13.07.2006, 20:31

probier ma so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   HBITMAP hBackground = (HBITMAP)LoadImage(NULL, "bild.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE | LR_DEFAULTSIZE);

    HDC hDChWnd = GetDC(hWnd);
    HDC hDCBackground    = CreateCompatibleDC(hDChWnd );

    SelectObject(hDCBackground, hBackground);

    RECT grc;
   
    GetClientRect(hWnd,&grc);

    BitBlt(hDChWnd,0,0,150,150,hDCBackground,0,0,SRCCOPY);
   
    ReleaseDC(hWnd, hDChWnd); 

// es fehlt noch DeleteObject

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

3

13.07.2006, 20:32

Ändert leider nichts...Und welches Objekt soll ich löschen (hab doch gar keines, oder sollte ich eines haben?)?

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

4

13.07.2006, 20:36

doch bei mir gehts, prüf mal ob hWnd == NULL ist, ob hBackground == NULL

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
HBITMAP hBackground;
if(!(hBackground = static_cast<HBITMAP>(LoadImageW(NULL, L"bild.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE | LR_DEFAULTSIZE))))
{}  // Konnte nicht geladen werden


if(!hWnd)
{}  // ungültiges window Handle


HDC hDCWnd = GetDC(hWnd);

HDC hDCBackground = CreateCompatibleDC( hDCWnd);

SelectObject(hDCBackground, hBackground);

BitBlt(hDCWnd,0,0,150,150,hDCBackground,0,0,SRCCOPY);

ReleaseDC(hWnd, hDCWnd); 
::DeleteDC(hDCWnd);
::DeleteDC(hDCBackground);
::DeleteObject(static_cast<HGDIOBJ>(hBackground));


*update*

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

5

13.07.2006, 20:44

hBackground scheint NULL zu sein (falls der Code unten stimmt).

C-/C++-Quelltext

1
2
3
4
if(hBackground == NULL)
    {
        MessageBox(NULL,"hBackground",NULL,MB_OK);
    }


Es kommt immer diese MessageBox -> hBackground gleich NULL.

Was passt mit dem hBackground nicht? (Bild ist ja im Ordner)

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

6

13.07.2006, 20:46

Mit GetLastError() bekommst du den Fehler, schau nochmal ob das Bild in dem Ordner liegt wo die exe ausgeführt wird! Also im Projektordner normalerweise

Check auch mal das Bild, bei mir ist es ein 24Bit BMP, Paint.

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

7

13.07.2006, 21:20

Wo würde man diese Funktion hinschreiben (an das Ende des Programms?)?

Das Bild war der Fehler: ich habe manuell die Endung .bmp angehängt -> war wohl keine 24bit -> jetzt geht's -> Danke für die Hilfe

mfg spacegaier

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

8

13.07.2006, 21:21

Naja, is ja'n snippet, kannst es aber in ne Funktion packen und aufrufen nachdem du ein Fenster erstellt hast mit CreateWindow.

Werbeanzeige