kostenloser Webspace werbefrei: lima-city


Fenster neuzeichnen

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    progger

    Kostenloser Webspace von progger

    progger hat kostenlosen Webspace.

    Ich habe wieder mal ein Problem: Wenn man die Pfeiltaste nach oben drückt, wird die Funktion UpdateWindow() aufgerufen, womit die Nachricht WM_PAINT an das Fenster gesendet wird, damit es sich neuzeichnet. Das passiert bei mir aber leider nicht. Woran kann das liegen?
    Hier die Funktion, die die Nachrichten bekommt:
    LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
        int zahl = 123;
        switch(uMsg){
            case WM_CLOSE:
            DestroyWindow(hWnd);
            break;
    
            case WM_DESTROY:
            PostQuitMessage(0);
            break;
    
            case WM_KEYDOWN:
            switch(wParam){
                case VK_UP:
                zahl++;
                UpdateWindow(hWnd);
                break;
            }
            break;
            
            case WM_PAINT:
            PAINTSTRUCT ps;
            HDC hDC;
            char Text[100];
            sprintf(Text,"Text: %d",zahl);
            hDC = BeginPaint(hWnd,&ps);
            TextOut(hDC,0,0,Text,strlen(Text));
            EndPaint(hWnd,&ps);
            break;
        }
        return DefWindowProc(hWnd,uMsg,wParam,lParam);
    }


    Beitrag geändert: 21.10.2008 19:22:57 von progger
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. p***********d

    Ich kann dir bei deinem Problem nicht helfen, aber bitte tu mir doch nen Gefallen und benutz eine gescheite, plattformunabhängige und moderne Grafikbibliothek und nicht so einen M$-Quark. Bei aller Bescheidenheit, unübersichtlicheren Code hab ich echt noch nie gesehen. http://www.libsdl.org


    Beitrag geändert: 21.10.2008 19:52:29 von pinguinfreund
  4. Autor dieses Themas

    progger

    Kostenloser Webspace von progger

    progger hat kostenlosen Webspace.

    OK, das war klar von einem Pinguinfreund. Aber ich bin auch kein "M$"-Fan. Es soll nur ein schlechter Egoshooter werden. Und da ich Linux nicht installiert habe, könnte ich es auch nicht kompilieren. Sicherlich ist es bedauerlich, dass so wenige Linux benutzen und dafür umsomehr [Fenster]. Aber das unterstütze ich keineswegs.
    Und unübersichtlich finde ich meinen Code wirklich nicht :mad:

  5. Und da ich Linux nicht installiert habe, könnte ich es auch nicht kompilieren.

    Er meinte eine plattformunabhängige Graphikbibliothek. Also kannst du das ganze auch ohne Probleme unter Windows machen und hast noch dazu den Vorteil der Plattformunabhängigkeit.


    Und unübersichtlich finde ich meinen Code wirklich nicht

    Ich glaube "unschön" trifft es eher. (Ja, ich bin Ästhetiker, wenn es um Programmiersprachen geht^^).
    Es ist letzendlich deine Entscheidung, wie du das machst, aber ich kann dir SDL wirklich ans Herz legen.
    Nicht nur, weil es offen ist, sondern weil es auch recht einfach ist.
    http://lazyfoo.net/SDL_tutorials/index.php
  6. Autor dieses Themas

    progger

    Kostenloser Webspace von progger

    progger hat kostenlosen Webspace.

    Ich möchte mich erst in tiefere Materie vorwagen.
    Was kann ich denn am Code ändern? Ich fand ihn eigentlich schön:confused:
  7. tischfussball

    tischfussball hat kostenlosen Webspace.

    Vorweg: so wie du das machst, ist es sehr... ich sag mal aua. Du rufst aus einer Windowscallbackfunktion (WndProc()) die selbe Callbackfunktion (nämlich über UpdateWindow()) wieder auf, statt bereits im ersten Aufruf das zu erledigen, was erledigt werden soll (zahl mit neuem Wert ausgeben). Das ist vom Design her bisschen "doof", aber nicht weiter schlimm, wenn man nur lernen will.

    Das Problem liegt darin, dass der Wert der Variable zahl sich nie ändert. Du inkrementierst den zwar, aber dadurch, dass du dann WndProc() nochmal aufrufst (bzw. Windows per UpdateWindow() darum bittest, dies zu tun) und zahl nur lokal geändert worden ist, wird der Wert beim erneuten Aufruf von WndProc() wieder 123 betragen. Also funkioniert wahrscheinlich alles, du siehst es nur nicht.

    So, wie du es programmiert hast, ist die einfachste Lösung, zahl als static int zu deklarieren. Ist aber nicht gerade die schönste Lösung (siehe erster Absatz).

    Dein Code ist so ok. Die Setzung der geschweiften Klammern ist Geschmackssache, ansonsten ist es das, was jeder (echte) Windowsprogrammierer kennt (halt Quasi-Standard für eine Funktion, die die "Systemnachrichten" von Windows empfängt).
  8. mhm, ich kann über deinen Code auch nicht meckern. Ich finde ihn sogar übersichtlich. Viele "ältere" Programmierer benutzen ja diese schreibweise. Jedem wies ihm gefällt.

    Tischfussball hat es denk ich mal schon richtig gesagt. Du hast deine Zahl, erhöst sie und überschreibst sie mit der alten Zahl...
  9. Autor dieses Themas

    progger

    Kostenloser Webspace von progger

    progger hat kostenlosen Webspace.

    Nein, jetzt funktioniert es schon. Meine Zahl ist nicht wirklich einfach so in der Funktion definiert (das hab ich nicht bedacht). Sie ist ein Element einer Klasse. Und mit dem Code:
    RECT rc;
    SetRect(&rc,0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
    InvalidateRect(hWnd,&rc,1);
    UpdateWindow(hWnd);

    habe ich es dann auch geschafft, das gesamte Fenster zu aktualisieren.
    Ich bin für Vorschläge über Code und Programmierstil offen.
  10. tischfussball

    tischfussball hat kostenlosen Webspace.

    Du machst es so:
    bool Groesser(int zahl1,int zahl2) {
       if (zahl1 > zahl2) {
          printf("Zahl 1 ist groesser\\n");
          return true;
       }
       else {
          printf("Zahl 1 ist kleiner\\n");
          return false;
       }
    }


    Ich mache es so:
    bool Groesser(int iZahl1, int iZahl2)
    {
       if (iZahl1 > iZahl2)
       {
          printf("Zahl 1 ist groesser\\n");
          return true;
       }
       else
       {
          printf("Zahl 1 ist kleiner\\n");
          return false;
       }
    }


    Unterschiede:
    - Setzen der geschweiften Klammer anders
    - Leerzeichen zwischen Funktionsparametern/-argumenten nach Komma
    - Nutzen der ungarischen Notation

    Was von beiden du für besser hältst, bleibt dir überlassen, da hat jeder seine eigenen Vorstellungen. Man sollte nur die unterschiedlichen Stile kennen, falls man zum Beispiel mal in einem Projekt mitarbeitet, wo einem der Programmierstil vorgegeben wird. Und wenn du dich auf einen Stil festlegst, dann behalte ihn in einem Projekt auch durchgängig bei (z.B. beim Nutzen der ungarischen Notation alles, also auch Klassen und Klasseninstanzen, auf diese Weise benennen).
    Ein Buch für Windowsprogrammierer, dass ich dir sehr, sehr empfehlen kann, ist "Windows Programmierung" von Charles Petzold. Ist glaube ich im Verlag Microsoft Press erschienen. Davon gibt es auch ein "E-Book" (chm-Datei mit dem kompletten Buch auf Englisch), dass frei (illegal) im Internet zu finden ist (*lustige Geschichte, siehe unten). Vielleicht schaust du da mal rein und ich denke du wirst schnell davon überzeugt sein, dir das Buch anzuschaffen, auch wenn es natürlich seinen Preis hat.

    *lustige Geschichte:
    Charles hat sich vor längerer Zeit bei mir sehr über dieses E-Book beschwert. Das gab es mal als Zugabe zu einer der älteren Auflagen, zu einer Zeit, als von P2P-Tauschbörsen und Raubkopien, die sich jeder zieht, noch keine Rede war. Im Grunde ist es ihm auch egal, wenn sich hier und da mal einer so eine Raubkopie zieht und benutzt, da viele dann doch das Buch kaufen. Worüber er sich beschwert hat, waren die Chinesen. In einer seiner E-Mails hatte er mir so ungefähr folgendes geschrieben: "Nur bei den Chinesen ist es anders. Da kommt es mir so vor, als hätte jeder Chinese mindestens vier Mal mein Buch heruntergeladen, gekauft hat es aber so gut wie niemand. Das mit dem E-Book war die dümmste Idee, die ich jemals hatte". Fand ich sehr lustig.
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!