WM_PAINT



  • Also bei mir geht da schon mal überhaupt nix zum Downloaden! GetRight meckert immer, dass die Datei "seems to be a website" :(. Wenn ich sie anzeigen lasse, komme ich auf DocJunioR's Homepage, wenn ich sie runterlade, hat sie ein ungültiges Format...

    cya 🙂



  • Original erstellt von MagiC Creator:
    **Also bei mir geht da schon mal überhaupt nix zum Downloaden! GetRight meckert immer, dass die Datei "seems to be a website" :(. Wenn ich sie anzeigen lasse, komme ich auf DocJunioR's Homepage, wenn ich sie runterlade, hat sie ein ungültiges Format...

    cya :)**

    deswegen heißt die Seite ja auch tdown.htm!
    Tripod hat neuerdings ne DL-Sperre. Du kannst nur noch von einer site downloaden, die auch bei tripod liegt. Mal abgesehen davon. was willst Du bei 300 KB mit nem DL-Manager??

    Dass nix geht, kann daran liegen, dass Du erstmal eine neue Datei aufmachen willst. Du musst ja schließlich auch die Größe des Ganzen angeben, etc. Versuch doch mal im PSP gleich zu malen 😉

    Das mit dem ValidateRect() werd ich mal probieren 🙂

    *pff* ich dachte, der Code liegt mit in der Datei??
    hier die Fensterprocedure von meinem Zeichengrid.

    LRESULT CALLBACK C_mygrid::ChildProc(HWND hWnd, UINT message, 
                                          WPARAM wParam, LPARAM lParam)
    {
    C_mygrid *Sc = (C_mygrid*) GetWindowLong(hWnd, GWL_USERDATA);
      int ScItemX, ScItemY, ScStep, PX, PY;
      T_KACHEL K ;
      float MapCX, MapCY; 
      int CiRad; 
      RECT rect;
    
        switch (message)                  /* handle the messages */
        {
            case WM_LBUTTONDOWN:
                GetWindowRect(hWnd, &rect);
                // relative Koordinate der Mouse
                MapCX = ((float)((LOWORD(lParam)/ 50.0) / Sc->fZoom) + Sc->TickX);
                MapCY = ((float)((HIWORD(lParam)/ 50.0) / Sc->fZoom) + Sc->TickY);
    
                FillKachel (Sc->Felddaten,Sc->FileHeader, MapCX, MapCY, 
                            Sc->ScPos, 10, Sc->ActTool); //Füllen der Map
    
                Sc->MXPos = LOWORD(lParam);
                Sc->MYPos = HIWORD(lParam);
                InvalidateRect(hWnd, NULL, FALSE);
                break;
            case WM_PAINT:    
    /* Todo: Mapdaten darstellen */
             if (Sc->Felddaten != NULL)
             {
                glLoadIdentity();
                glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
                glClear (GL_COLOR_BUFFER_BIT);
    
                glPushMatrix ();
                glTranslatef(-1,1,0);
                glScalef(0.387 * Sc->fZoom * 0.0068, 0.387 * Sc->fZoom * 0.01, 0);
    
                glBegin(GL_QUADS);
                for (ScItemX= (int)Sc->TickX; ScItemX < Sc->FileHeader.XKCount; ScItemX += 1)
                  {
                  for (ScItemY = (int)Sc->TickY; ScItemY < Sc->FileHeader.YKCount; ScItemY += 1)
                    {
                     for (PY = 0; PY < Sc->FileHeader.SizeOfKachel; PY +=1)
                       {
                       for (PX = 0; PX < Sc->FileHeader.SizeOfKachel; PX +=1)
                         {
                        glColor3ub(Sc->ColR[Sc->Felddaten[ScItemY * 
                                            Sc->FileHeader.XKCount + ScItemX] 
                                           [PY * Sc->FileHeader.SizeOfKachel + PX]], 
                                   Sc->ColG[Sc->Felddaten[ScItemY * 
                                            Sc->FileHeader.XKCount + ScItemX] 
                                           [PY * Sc->FileHeader.SizeOfKachel + PX]], 
                                   Sc->ColB[Sc->Felddaten[ScItemY * 
                                            Sc->FileHeader.XKCount + ScItemX] 
                                           [PY * Sc->FileHeader.SizeOfKachel + PX]]); 
     //                    glColor3b(Sc->ColR[PY], Sc->ColG[PX], Sc->ColB[ScItemX]);                  
                         glVertex2f ( 50 * (ScItemX- Sc->TickX) + PX,
                                     -50 * (ScItemY- Sc->TickY) - PY);
                         glVertex2f ( 50 * (ScItemX- Sc->TickX) + PX,
                                     -50 * (ScItemY- Sc->TickY) - PY-1);
                         glVertex2f ( 50 * (ScItemX- Sc->TickX) + PX+1,
                                     -50 * (ScItemY- Sc->TickY) - PY-1);
                         glVertex2f ( 50 * (ScItemX- Sc->TickX) + PX+1,
                                     -50 * (ScItemY- Sc->TickY) - PY);
                         }
                      } 
                   }
                }
                 glColor3f(1,1,1);                  
                 glVertex2f(-1.0,-1.0);            
                 glVertex2f(-1.0, 1.0);            
                 glVertex2f( 1.0, 1.0);            
                 glVertex2f( 1.0,-1.0);            
                glEnd();  
                glPopMatrix ();
                SwapBuffers (Sc->hdc);
    
              }
              ValidateRect();
              break;
            case WM_DESTROY:
                PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
                break;
            default:                      /* for messages that we don't deal with */
                return DefWindowProc (hWnd, message, wParam, lParam);
        }
        return 0;
    
    }
    

    cYa
    DjR

    [ Dieser Beitrag wurde am 04.01.2003 um 20:12 Uhr von DocJunioR editiert. ]



  • hat sich dein problem jetzt erledigt?



  • GetRight läuft bei mir im Hintergrund immer mit, ist besser so :).

    cya 🙂



  • hat sich leider nix geändert. das Prog hat eine Prozessorausnutzung von 100% - und ich weiß nicht warum 😞



  • Wieso, ist doch gut so... wenn es als einziges Programm läuft, kann es doch ruhig eine Auslastung von 100% haben, stell dir mal vor, der Prozessor wäre immer nur zu 50% ausgelastet.. das wär ja Verschwendung!

    cya 🙂



  • aber das Prog dürfte im Normalzustand nicht mehr Auslastung als das Wordpad haben. 😞
    ich mach ja da nun auch wieder nicht so sehr viel 😞

    cYa
    DjR



  • man, kannst du nicht einfach immer ein bisschen mehr code rausnehmen, und gucken ob es dann irgendwann verschwindet? nimm doch einfach von WM_PAINT mal ganz raus und guck ob es dann immer noch dauernd gesendet wird. wenn nicht, dann tust du eben den quellcode wieder dazu bist du den fehler hast. stell dich doch ned so an



  • smiley: bei meinen geistigen Verrenkungen in Letzter Zeit (nicht wegen diesem Programm *gg*) komme ich scheinbar nicht mehr auf die simpelsten Sachen. Ich meld mich abernochmal, wenn das nicht funzt *gg*



  • so, ausprobiert: sowie WM_PAINT da steht (auch wenn nix drin ist) verbrät das System die komplette Rechenzeit 😞 warum kann ich aber nicht sagen 😞 - ich würd einfach raten, dass die Message ständig von irgendwoher gesendet wird.

    irgendwelche Ideen? der Quellcode liegt dem Prog bei. (entwickelt mit dem DevCpp-Paket)



  • Schrieb doch einfach mal Begin- und EndPaint rein, wie es sich für eine Windowsanwendung gehört. Wenns dann nicht geht reden wir weiter.



  • Hmm.. okay 😃

    aber verstehen tu ich das noch nicht so ganz - naja, bin kein Win32-Profi.
    Wenn ich in GL arbeite, wozu brauche ich dann die Begin- und EndPaint - Anweisungen?



  • Mach doch einfach eine Funktion z.B. Zeichnen(); in der du alle deine OGL-Zeichenaktivitäten machst. Diese Funktion kannst du dann aufrufen, wenn es neu gezeichnet werden soll, anstatt immer InvalidateRect aufzurufen, um ein neuzeichnen zu erzwingen. Im WM_PAINT-Zweig rufst du nur diese Funktion auf und gibst aber nicht 0 zurück, sondern rufst DefWndProc(...); auf.
    So sollte es dann gehen.



  • hmm.. sollte eigentlich auch schneller sein - wenn ich mich nicht irre.. geht ja dann auch direkt in die Funktion und nicht erst übers Windows.
    Ich werd mal schauen. 🙂


Anmelden zum Antworten