GDI zeichnet die Objecte nicht an der richtigen Stelle ???!!!???
-
hi,
ich hab mir nen Fenster mit der allg. Formel gebastelt, und wollte nun per zufall 10 Rechtecke rein zeichen.
Soweit sieht das ganze so ausLRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) { static int clientx, clienty; HDC hDC; PAINTSTRUCT ps; struct Cubes { bool tCrash; bool lCrash; bool rCrash; bool bCrash; int createX, createY; } iCubes[ NUM_RECT ]; switch( message ) { case WM_CREATE: { clientx = LOWORD( lParam ); // get window width (450) clienty = HIWORD( lParam ); // get window height (300) for( int i = 0; i < NUM_RECT; i++ ) { iCubes[ i ].createX = rand() % clientx; iCubes[ i ].createY = rand() % clienty; } return 0; } case WM_TIMER: { return 0; } case WM_SIZE: { return 0; } case WM_COMMAND: { return 0; } case WM_PAINT: { hDC = BeginPaint( hWnd, &ps ); for( int i = 0; i < NUM_RECT; i++ ) { Rectangle( hDC, iCubes[ i ].createX, iCubes[ i ].createY, iCubes[ i ].createX + RECT_WIDTH, iCubes[ i ].createY + RECT_HEIGHT ); } EndPaint( hWnd, &ps ); return 0; } case WM_DESTROY: { PostQuitMessage( 0 ); return 0; } } return( DefWindowProc( hWnd, message, wParam, lParam ) ); }doch irgendwie werden alle Rechtecke immer oben in der linken-ecke auf einem Haufen gezeichnet, immer an der selben Stelle. Wieso? was ist falsch?
Gruß Tobi.
-
In High- bzw. Low-Word von WM_CREATE stehen NICHT die Abmessungen Deines Client-Bereichs. Die gibts bei WM_SIZE (Dein WindowProc bekommt aber direkt am Anfang, nach der Bearbeitung von WM_CREATE eine Nachricht WM_SIZE).
Also hier ist der Fehler:T0bi schrieb:
clientx = LOWORD( lParam ); // get window width (450) clienty = HIWORD( lParam ); // get window height (300)Desweiteren solltest Du den Zufallsgenerator durch einen korrekten Aufruf von srand() initialisieren.
-
sorry des is der alpha code *g*, in meiner beta *lols* habe ich den zufallsgen bei WM_CREATE mit srand( time( 0 ) ); initialisiert. und danke so gehts jetzt.