macht nich was ich will



  • #include <windows.h>
    #include <math.h>
    #define T1 1
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
         static char szAppName[] = "Name" ;
         HWND        hwnd ;
         MSG         msg ;
         WNDCLASSEX  wndclass ;
    
         wndclass.cbSize        = sizeof (wndclass) ;
         wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
         wndclass.lpfnWndProc   = WndProc ;
         wndclass.cbClsExtra    = 0 ;
         wndclass.cbWndExtra    = 0 ;
         wndclass.hInstance     = hInstance ;
         wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
         wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
         wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
         wndclass.lpszMenuName  = NULL ;
         wndclass.lpszClassName = szAppName ;
         wndclass.hIconSm       = LoadIcon (NULL, IDI_APPLICATION) ;
    
         RegisterClassEx (&wndclass) ;
    
         hwnd = CreateWindow (szAppName, "Fenstername", WS_OVERLAPPEDWINDOW,
    			  CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
    			  NULL, NULL, hInstance, NULL) ;	
    
         ShowWindow (hwnd, iCmdShow) ;
         UpdateWindow (hwnd) ;
    
         while (GetMessage (&msg, NULL, 0, 0))
              {
              TranslateMessage (&msg) ;
              DispatchMessage (&msg) ;
              }
         return msg.wParam ;
    }
    
    LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
    {
    	MSG msg;
    	HDC	hdc;
    	WNDCLASS wndclass; 
    	PAINTSTRUCT ps;
    	HBRUSH hBrush;
    	HPEN hPen;
    	int x=0; int y=10;
    	switch(iMsg)
    	{
    	case WM_CREATE:
    		SetTimer(hwnd,T1,2000,NULL);
    		return 0;
    	case WM_TIMER:
    		x=rand()%200;
    		UpdateWindow(hwnd);
    		return 0;
    	case WM_PAINT:
    		hdc = BeginPaint(hwnd, &ps);
    		MoveToEx(hdc,x,y,NULL);
    		LineTo(hdc,(x+10),(y));
    		EndPaint(hwnd, &ps);
    		return 0;
    	case WM_DESTROY:
    		KillTimer(hwnd,T1);
    		DeleteObject(hPen);
    		PostQuitMessage (0) ;
    		return 0 ;
         }
         return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
    }
    

    warum wandert der Strich nicht?
    kann mir da einer sagen was ich falsch gemacht habe?



  • UpdateWindow macht gar nichts, wenn es nichts zum Updaten gibt. Ruf vorher InvalidateRect auf. 🙂

    Außerdem solltest du bei WM_TIMER testen, ob die Nachricht wirklich vom Timer T1 stammt. Nur zur Sicherheit.

    hPen sollte static sein, wenn du es erst bei WM_DESTROY löschst. Achso, und du solltest natürlich auch CreatePen vorm Löschen benutzen.

    btw: <math.h> ist veraltet und sollte in neuen C++ Programmen nicht mehr verwendet werden. Nimm lieber <cmath>, auch wenn der VC++ da ein paar Ungereimtheiten hat.



  • danke klappt jetzt


Anmelden zum Antworten