Mit 'SetPixel' erzeugte Grafiken verschwinden wieder !



  • Hallo Leute,

    also ich hab da mal eine wichtige Frage an euch:

    Wenn ich mittels 'SetPixel' z.B ein Rechteck in die Konsole zeichne, verschwindet es bei anschließendem Minimieren, bzw. Maximieren der Anwendung wieder. Oder auch wenn ein fremdes Programmfenster die Konsole verdeckt, ist es danach nicht mehr sichtbar, also alle gezeichneten Pixel sind verschwunden.

    So bin ich vorgegangen:

    Zuerst erstelle ich ein Handle auf mein Fenster:

    SetConsoleTitle ("MeinFenster");
    HWND hWnd = FindWindow(NULL, "MeinFenster");
    HDC hdc = GetDC(hWnd);
    

    Anschließend zeichne ich nun meine ersten Pixel, hier eine Linie:

    int x,y = 0;
    
    for (;x<50;x++) 
    { 
      SetPixel (hdc,x,y,RGB(255,255,255)); //Linie 
    }
    

    Aber sobald irgendwas die Grafik verdeckt, ist sie aufeinmal für immer und ewig verschwunden ...

    Übergebe ich vielleicht das Handle falsch ? Oder muss ich die Linie in regelmäßigen Abständen neu zeichen ?

    Danke für die Hilfe,

    Mikey.



  • mikey schrieb:

    Oder muss ich die Linie in regelmäßigen Abständen neu zeichen ?

    Ich würde sagen - JA...

    Wie das mit der Konsole ist, weiß ich nicht. Beim Fenster muß man auf die Nachricht WM_PAIN mit Neuzeichnen reagieren.



  • Lass es sein, es gibt keine saubere Lösung dafür.



  • Lass es sein, es gibt keine saubere Lösung dafür.

    Haja, das blöde ist blos, dass ich wochenlang nach einer vernünftigen Funktion zum Zeichnen gesucht habe, und da kam mir eben SetPixel in den Weg ...

    Und das funktioniert jetzt auch net richtig (zumindest in der Konsole)

    Ich glaub ihr habt Recht, entweder ich mach jetzt meine Linien mithilfe von ASCII - Codes, oder ich lass es ganz bleiben.


  • Mod

    Geht es Dir um den Desktop, oder ganz allgemein?
    Für den Dsktop müsstest Du eine DLL injezieren und den Desktop sbclassen und dort einen eigenen WM_PAINT Handler installieren!
    Ganz allgemein würde es ja jede Applikation betreffen, das geht so nicht.

    Willst Du das nur temporär oder permanent?
    Temporär könnte man auch einfach ein Fenster über den ganzen Desktop legen und dahinein Zeichnen.



  • Ich hab ja vorher geschrieben, ich brauch's für die Konsole.

    Ich glaube, das mach ich letztendlich mit ASCII - Zeichen, so funktioniert's auch. Nur wisst ihr, was ich mich mittlerweile frage?

    Ich hab mir mal vor ein paar Tagen ein uraltes AntiVirus Programm von Microsoft angeguckt, es war noch auf DOS. Ich habe es in der Konsole angezeigt bekommen, und da waren auch jedemenge Rechtecke, Linien, Muster, etc ... Irgendwie MUSS das möglich sein ! (Ist jetzt nicht an euch gerichtet 😃 )

    Haja, ich werde mich noch einbisschen in der MSDN amüsieren, ansonsten, wiegesagt ASCII. Evtl. fällt jemandem von euch noch was ein, ansonsten trotzdem danke !!

    Mikey.



  • Ich glaub für Konsolen-Grafik nutzen Spieleprogrammierer dies hier recht oft:
    http://alleg.sourceforge.net/index.de.html



  • mikey schrieb:

    Evtl. fällt jemandem von euch noch was ein, ansonsten trotzdem danke !!

    wie währs mal mit - sich langsam von der Konsole verabschieden? M$ macht da nicht mehr lange mit...

    Früher oder später wirst du die Konsole beim Windoof wohl vermissen müssen...

    Was ist das für ein Viren-Scanner, das noch auf einer Kosole läuft - habe noch nie gesehen? Hast du da vielleicht einen Screenshot oder so?



  • wie währs mal mit - sich langsam von der Konsole verabschieden? M$ macht da nicht mehr lange mit...

    Früher oder später wirst du die Konsole beim Windoof wohl vermissen müssen...

    Da wär ich mir mal nicht so sicher ... Und wie bitte sollten dann Anfänger 'normale' Programme schreiben können ?? Mit cout, endl, usw. ?!?

    Dann müsste also jeder gleich mit Windowsprogrammierung anfangen. Völliger Schwachsinn. Ich glaube nicht, dass die Konsole weg kommt.

    Was ist das für ein Viren-Scanner, das noch auf einer Kosole läuft - habe noch nie gesehen? Hast du da vielleicht einen Screenshot oder so?

    Nee, hab ich leider nicht mehr da. Es war im Prinzip das selbe wie eine Fensteranwendung, nur in der Konsole und in 16 Farben (was weis ich wieviel). Also oben links gibt's auch 'Datei' 'Bearbeiten', etc. ... Kann man sogar mit der Maus anklicken, das funzt. Einige Elemente haben die tatsächlich mit ASCII - Zeichen gezeichnet, aber ich weis nicht, wie sie farbig gefüllte Rechtecke und Körper erstellten. ... Vllt. habt ihr ja eine Idee, oder ich frag bei Billy mal selber nach 🕶 😃





  • mikey schrieb:

    Ich hab mir mal vor ein paar Tagen ein uraltes AntiVirus Programm von Microsoft angeguckt, es war noch auf DOS. Ich habe es in der Konsole angezeigt bekommen, und da waren auch jedemenge Rechtecke, Linien, Muster, etc ... Irgendwie MUSS das möglich sein ! (Ist jetzt nicht an euch gerichtet 😃 )

    Du musst nur die Richtige Codepage einstellen, dann kannst Du auch solche Rechtecke/Linien/muste/usw. darstellen... das hat aber nun mal gar nichts mit "Zeichnen" zu tun!
    Das sind ganz normale "Zeichen", welche einfach keine Buchstaben sind 😉
    Nimm z.B. die Codepage 850, da sind solche Zeichen drin (beginnend ab 0xB9):
    http://www.microsoft.com/globaldev/reference/oem/850.mspx



  • Hey danke dir, hab nicht gewusst, dass das 'offiziell' ist, bzw. dass es eine extra Tabelle gibt 🙂

    Das sind ganz normale "Zeichen", welche einfach keine Buchstaben sind

    Hab ich ja auch selber geschrieben 😃 Das Problem war bisher nur das SetPixel. Und die Zeichen konnte ich auch nicht vernünftig anwenden, weil ich den dazugehörigen Code nicht wusste.

    Aber dank dir habe ich jetzt eine schöne Tabelle, wo alles verzeichnet ist. Das hilft mir schonmal um einiges weiter !! Also die Sache müsste geklärt sein.

    Danke nochmal an alle!

    mikey



  • Ja genau. Oder starte mal einfach per Eingabeaufforderung edit, da siehst du es auch 😉



  • btw:
    @Winnie01:

    WM_PAIN
    

    Klingt schmerzvoll...



  • wie das bei Vista ist weiss ich grad ausn kopf nicht, werd ich mal daheim nachschaun

    obwohl, ich hab ich vista nicht als VPC rumliegen #nachgugg

    so

    run-> CMD funktioniert weiterhin, ich denk mir das das durch das neuere Microsoft PowerShell ersetz wurde welches ja auf den framework basiert

    daheim hab ich vista am laufen und auch alle meine eigens geschriebenen programme {c++/MFC/WinAPI} funktionieren tadellos

    um darauf zurueck zu kommen, die alte "Dos-Box" gibts schon lange nicht mehr, das ist die "Command-Box" welche die dos befehle eigens umgesetzt hat, und bei der PowerShell erst recht

    um fuer programmierer auf die box zu bleiben find ich bloedsinn, die eigentlichen rechenoperationen laufen doch eh ohne augabe, und ob man nun std::cout << _T("Test") << str::endl; macht oder
    m_TStatic.SetWindowText(_T("Test")); ist doch eigentlich voellig egal, ist doch nur die schnittstelle zum user, sagt ja nichts ueber das eigentliche programm aus

    meine vermutung ist das es "irgendwann" soweit kommen wird das MS sich einfallen laesst wie man den aufruf "std::cout" oder aehnliches auf ein eigenes programm umleitet welches die shell ersetzt {aufpoppendes fenster, eigenes terminalfenster whatever}



  • @ Martin Richter

    DU HAST WOHL N ARSCH OFFEN DU KANACKE



  • Klingt schmerzvoll...

    Loooool, 👍 😃 ^^
    Auja, PAIN .... Den Fehler hab ich auch schon öfters gemacht ^^

    @ Larsonson: Kollege, keiner soll hier irgendwem derartig beschimpfen. --->lächerlich.


Anmelden zum Antworten