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

Anonymous

unregistriert

1

25.11.2005, 19:03

Rechteck zeichnen

Wieso kann ich mir mit folgendem Quellcodeausschnitt kein Rechteck zeichnen?

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
                if (lparam == (LPARAM)hButton6)
                    {
                    if (HIWORD(wparam) == BN_CLICKED)
                        DestroyWindow(hButton6);
                        DestroyWindow(hButton7);
                        DestroyWindow(hButton8);
                        DestroyWindow(hButton5);
                        hButton10 = CreateWindow( "button", "Zurück", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, NULL, NULL, NULL); 
                        MoveWindow(hButton10, 30, 736, 160, 22, TRUE); 
                        
                        hdc = BeginPaint(hwnd, &ps);
                        
                        SetRect(&rect, 200, 200, 400, 400);
                        FillRect(hdc, &rect, (HBRUSH) brush);
                    
                        EndPaint(hwnd, &ps);
                    
                    }


Ich möchte, dass das Rechteck erst gezeichnet wird wenn der Button 6 gedrückt wird.

Lemming

Alter Hase

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

2

25.11.2005, 20:43

sieht für mich danach aus, als würde das rechteck zwar rein theoretisch dasein, aber nicht gezeichnet werden.
du musst invalidate rect aufrufen oder redraw. bin mir nich hundert pro sicher. aber wenn du danach suchst wirst du im forum sicher was finden und sonst gibts da ja noch google. :)
stichwort is auf jeden fenster neuzeichnen
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Anonymous

unregistriert

3

25.11.2005, 22:45

Ruf als letztes mal "UpdateWindow" und "InvalidateRect" auf.

Anonymous

unregistriert

4

26.11.2005, 00:25

so?

Quellcode

1
2
3
4
5
6
7
8
hdc = BeginPaint(hwnd, &ps);
                        
SetRect(&rect, 200, 200, 400, 400);
FillRect(hdc, &rect, (HBRUSH) brush);
EndPaint(hwnd, &ps);
                        
UpdateWindow(hwnd);
InvalidateRect(hwnd, &rect, NULL);


so gehts auch nicht

Lemming

Alter Hase

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

5

26.11.2005, 15:05

machs mal umgekehrt:

C-/C++-Quelltext

1
2
InvalidateRect(hwnd, &rect, NULL);
UpdateWindow(hwnd);
wenn das nich geht probiers mal mit redraw window
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

6

26.11.2005, 16:37

InvalidateRect vor update window geht nicht.
RedrawWindow auch nicht.

Quellcode

1
2
InvalidateRect(hwnd, &rect, NULL);
RedrawWindow(hwnd, &rect, NULL, RDW_UPDATENOW);


Ich habs jetzt so, geht aber auch nicht.

Lemming

Alter Hase

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

7

26.11.2005, 20:42

C-/C++-Quelltext

1
    RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE | RDW_FRAME | RDW_ERASE);
damit sollt es totsicher gehen. is aber noch optimierbar
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

8

26.11.2005, 23:56

Geht leider auch nicht.

Ich weiß langsam nicht mehr was ich noch machen kann.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

9

27.11.2005, 02:17

ohne den obigen text gelesen zu haben... den punkt haben alle mal. die einen scheitern und gehen unter, die anderen werden nicht müde und gucken weiter, und aus denen werden die erfolgreichen entwickler ;)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

10

27.11.2005, 09:39

Nur so neben es gibt in der MSDN ein sehr schönes Beispiel genannt "Using Rectangles".
Ausschnitt daraus:

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
        case WM_LBUTTONUP: 
 
            // If the bitmap rectangle and target rectangle 

            // intersect, copy the bitmap into the target 

            // rectangle. Otherwise, copy the bitmap into the 

            // rectangle bitmap at its new location. 

 
            if (IntersectRect(&rcTmp, &rcBmp, &rcTarget)) 
            { 
 
                // Erase the bitmap rectangle by filling it with 

                // the background color. 

 
                hdc = GetDC(hwnd); 
                FillRect(hdc, &rcBmp, hbrBkgnd); 
 
                // Redraw the target rectangle because the part 

                // that intersected with the bitmap rectangle was 

                // erased by the call to FillRect. 

 
                Rectangle(hdc, rcTarget.left, rcTarget.top, 
                    rcTarget.right, rcTarget.bottom); 
 
                // Copy the bitmap into the target rectangle. 

 
                StretchBlt(hdc, rcTarget.left + 1, rcTarget.top + 1, 
                    (rcTarget.right - rcTarget.left) - 2, 
                    (rcTarget.bottom - rcTarget.top) - 2, hdcCompat, 
                    0, 0, 32, 32, SRCCOPY); 
 
                // Copy the target rectangle to the bitmap 

                // rectangle, set the coordinates of the target 

                // rectangle to 0, then reset the fDragRect flag. 

 
                CopyRect(&rcBmp, &rcTarget); 
                SetRectEmpty(&rcTarget); 
                ReleaseDC(hwnd, hdc); 
                fDragRect = FALSE; 
            }
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige