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

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

11

16.07.2006, 12:02

hab ich doch schon gesagt ;) ich weiss nicht ob ers gemacht hat ;) aber irgendwie macht er sichs zu schwer find ich ;)

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

12

16.07.2006, 12:03

Das mit dem unsigned habe ich bereits geändert.

Hier noch ein anderes Codestück. Muss ich hier noch etwas wieder freigeben (was ansonsten zu besagtem Aufhängen führt)?

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
void DrawBackground()
{
    HBITMAP hBackground = (HBITMAP)LoadImage(NULL, "bild.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); 

    HDC hDChWnd = GetDC(hWnd); 

    HDC hDCBackground    = CreateCompatibleDC(hDChWnd); 

    SelectObject(hDCBackground, hBackground); 

    RECT rc; 
    
    GetClientRect(hWnd,&rc); 

    TransparentBlt(hDChWnd,0,0,rc.right,rc.bottom,hDCBackground,0,0,400,400,RGB(254,254,254));
    
    ReleaseDC(hWnd, hDChWnd);
}

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


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

    HDC hDChWnd = GetDC(hWnd); 

    HDC hDCBackground    = CreateCompatibleDC(0); 

    SelectObject(hDCBackground, hBackground); 

    RECT rc; 
    
    GetClientRect(hWnd,&rc); 

    xpos    = x_start       + x_move;
    ypos    = y_start       + y_move;
    
    TransparentBlt(hDChWnd,xpos,ypos,20,20,hDCBackground,0,0,154,155,RGB(254,254,254));
    
    ReleaseDC(hWnd, hDChWnd);
}

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

13

16.07.2006, 12:13

-> beide DC Releasen, beide DC löschen, HBitmap mit DeleteObject löschen

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

14

16.07.2006, 12:19

Wo ist der Unterschied zwischen Release und Delete?

EDIT: Hängt sich 9mmer noch auf.

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
void DrawBlock()
{
    HBITMAP hBlock = (HBITMAP)LoadImage(NULL, "block.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); 

    HDC hDChWnd     = GetDC(hWnd); 

    HDC hDCBlock    = CreateCompatibleDC(0); 

    SelectObject(hDCBlock, hBlock); 

    RECT rc; 
    
    GetClientRect(hWnd,&rc); 

    xpos    = x_start       + x_move;
    ypos    = y_start       + y_move;
    
    TransparentBlt(hDChWnd,xpos,ypos,20,20,hDCBlock,0,0,154,155,RGB(254,254,254));
    
    ReleaseDC(hWnd, hDChWnd);
    ReleaseDC(hWnd, hDCBlock);
    DeleteDC(hDChWnd);
    DeleteObject(hBlock);
}

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

15

16.07.2006, 12:20

Release => Freigeben
Delete => Löschen

Du musst es releasen damit es ein anderer benutzen kann

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

16

16.07.2006, 12:31

Hat noch jemand eine Idee woran das Aufhägen liegen könnte?

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

17

16.07.2006, 13:00

Debuggs mal durch und such nach nem NULL Pointer. ... code etwas abgeändert

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
void DrawBlock()
{
    HBITMAP hBlock = (HBITMAP)LoadImage(NULL, "block.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);

    if(!hWnd) return;
    HDC hDChWnd        = GetDC(hWnd);
    HDC hDCBlock    = CreateCompatibleDC(hDChWnd);

    SelectObject(hDCBlock, hBlock);

    RECT rc;
   
    GetClientRect(hWnd,&rc);

    xpos    = x_start        + x_move;
    ypos    = y_start        + y_move;
   
    TransparentBlt(hDChWnd,xpos,ypos,20,20,hDCBlock,0,0,154,155,RGB(254,254,254));
   
    ReleaseDC(hWnd, hDChWnd);
    ReleaseDC(hWnd, hDCBlock);
    DeleteDC(hDChWnd);
    DeleteObject(hBlock);
}

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

18

16.07.2006, 13:02

Und wie debugge ich nach einem Nullpointer (VC++ 2003)?

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

19

16.07.2006, 13:07

du setzt einen Haltepunkt, am einfachsten klickst du einfach zwischen Projektansicht (Projektmappe) und Code, so dass ein Roter punkt erscheint, dort wird während des Programmlaufes (mit F5 kompilieren) das Programm angehalten, ganau an diesem Punkt und dir die Variablenbelegungen angezeigt.

Alternativ kannst du auch mit F11 F10 debuggen

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

20

16.07.2006, 13:15

Nullpointer heißt, dass eine Variable iorgendwo hinzeigt, wo sie auf jeden fall nicht sein sollte?! (z.B., dass die Größe des Clientbereichs viel zu groß angegeben wird?).

Wenn dass so stimmt, dann is alles okay, denn alle Variablen, die Zahlen enthalten stimmen. Die anderen (HDC'S und HWND's) kann ich so ja nicht kontrollieren, oder?

Werbeanzeige