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

11

24.06.2006, 09:14

rklaffehn
Es gibt in C++ kein <time.h> und <stdio.h> mehr.

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

12

24.06.2006, 09:21

Mag sein, aber das kann man trotzdem compilieren und ich war einfach tippfaul. Copy'n'Paste aus meinem Müll-Proggi in dem ich immer das Zeugs fürs Forum ausprobiere. :lol:

Was noch viel wichtiger ist, das ist für das Beispiel nicht von Belang.

MfG,
Rainer
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

Anonymous

unregistriert

13

24.06.2006, 09:39

Zitat von »"rklaffehn"«

Mag sein, aber das kann man trotzdem compilieren
nö ich nicht.

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

14

24.06.2006, 12:14

Ganz ehrlich: Ich blicke gerade berhaupt nicht durch (stell mich wahrscheinlich total blöd an). :(

Also nochmal: Muss ich nix da's Code erst mit einem srand() einen Startwert geben oder nicht (ich mein nämlich nicht, aber korrigieren, wenn ich falsch liege)?

@rklaffehn: Da du meinst, dass ich beim Rechtecke zeichnen etwas falsch mache, hier mal der betreffenden Code:

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
43
44
45
46
47
#include <windows.h>
#include <time.h>
#include "defs.hpp"

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


extern HWND hWnd;

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


void smallrect::RandomColor()
{
                    
        s_color_r = random(0,254);                  //RGB-Farbwerte generieren

        s_color_g = random(0,254);                  //            ""

        s_color_b = random(0,254);                  //            ""

}

void smallrect::CalculateRect()
{
    RECT    s_mainrc;                               //Rect für den Clientbereich

    
    GetClientRect(hWnd,&s_mainrc);                  //Größe des Clientbereich holen

    
    int s_x_iPosition = random(0,s_mainrc.right);   //einen x-Wert aus der Breite des Clientbereich generieren

    int s_y_iPosition = random(0,s_mainrc.bottom);  //einen y-Wert aus der Höhe des Clientbereich generieren

    
    s_rc_to_draw.top        = s_y_iPosition;
    s_rc_to_draw.left       = s_x_iPosition;
    s_rc_to_draw.bottom     = s_y_iPosition + s_height;
    s_rc_to_draw.right      = s_x_iPosition + s_width;
}

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


void smallrect::Draw_small_rect()
{
    HDC hDC = GetDC(hWnd);
    
    smallrect s_rc;
    s_rc.RandomColor();
    s_rc.CalculateRect();

    HBRUSH hBR = CreateSolidBrush(RGB(s_rc.s_color_r,s_rc.s_color_g,s_rc.s_color_b));

    FillRect(hDC,&s_rc.s_rc_to_draw,hBR);
}


Wo liegt hier mein Fehler?

mfg spacegaier

Anonymous

unregistriert

15

24.06.2006, 12:20

spacegaier
Beim Starten des Programms 1x srand aufrufen und die random-Funktion so oft benutzen wie Du willst.

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

16

24.06.2006, 12:55

Wenn du mit CreateSolidBrush einen Pinsel anlegst, musst du ihn hinterher mit DeleteObject auch wieder freigeben.

Dir gehen einfach die Resourcen aus.

MfG,
Rainer
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

17

24.06.2006, 13:06

Hab ich gemacht siehe Code unten. Das Problem besteht dennoch weiterhin.

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
#include <windows.h>
#include <time.h>
#include "rectkiller.hpp"
#include "defs.hpp"

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


LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

HWND    hWnd;

const char szAppName[] = "RectKiller 0.1";

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


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                   PSTR szCmdLine, int iCmdShow)
{   
    srand( (unsigned)time( NULL ) );
    
    MSG        msg;
    WNDCLASS   wc;
    wc.style         =  CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS  ;
    wc.lpfnWndProc   =  WndProc;
    wc.cbClsExtra    =  0;
    wc.cbWndExtra    =  0;

[...DER REST VON WINMAIN..)
}


Unter http://www.spacegaier.de/downloads.html gibt es die .exe, damit ihr den Fehler euch mal anschauen könnt (vielleicht hilft das ).

mfg spacegaier

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

18

24.06.2006, 13:30

Wie gesagt, wenn du den Pinsel nach dem Zeichnen wieder freigibst, dann werden die Quadrate auch alle richtig bunt und zufällig gezeichnet.
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

19

24.06.2006, 13:53

Leider immer noch nicht des Rätsels Lösung. :(Gebe die Objecte nun wieder frei. Trotzdem das alte Problem.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void smallrect::Draw_small_rect()
{
    HDC hDC = GetDC(hWnd);
    
    smallrect s_rc;
    s_rc.RandomColor();
    s_rc.CalculateRect();

    HBRUSH hBR = CreateSolidBrush(RGB(s_rc.s_color_r,s_rc.s_color_g,s_rc.s_color_b));

    FillRect(hDC,&s_rc.s_rc_to_draw,hBR);

    DeleteObject(hBR);
}


Bitte um weitere Vorschläge/Tipps/Anregungen...

mfg spacegaier

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

20

24.06.2006, 13:57

Hätte ich auch gleich weiterlesen können :) Man sollte nie beim ersten Fehler aufhören ...

ein GetDC muss auch ein ReleaseDC haben, sonst gibt es immernoch ein Resourcen-Leck.

Das steht übrigends alles in der Docu.
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

Werbeanzeige