Wie kann ich "SetPixel" anwenden?



  • Hallo Leute,

    ich habe bereits in den FAQ's, und in der MSDN nachgeschaut, wie man die Funktion "SetPixel" anwenden kann. In der MSDN ist diese Funktion allerdings nur unzureichend beschrieben, es fehlt auch ein Codebeispiel. Ihr müsst wissen, das ich ein totaler Anfänger in Sachen WinAPI bin, deswegen habe ich keine Ahnung davon.

    Mir geht es darum, in der Konsole einen Pixel zu setzen, um damit eine einfache Linie zu zeichnen, oder ein Rechteck. Da es aber eine WinAPI Spielerei ist, habe ich den Thread hier reingesetzt.

    Ich kriege das "SetPixel" einfach nicht zum laufen, der Linker meldet mir immer einen Error. Ich hab da mal was davon gelesen, das man extra eine Lib linken muss, ich weis den Namen nicht mehr. Genauer gesagt, ich weis nicht mal, wie ich eine Lib linken soll. Ich verwende den Dev - C++ Folgenden Beispielcode habe ich kompiliert, als mir ein Fehler gemeldet wurde:

    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    HDC hDC;
    
    int main ()
    {
         SetPixel( hDC, 4,4, RGB( 255, 0, 0 ) ); 
         system ("PAUSE");
    }
    

    Der Compiler bringt mir den folgenden Fehler:

    [Linker error] undefined reference to `SetPixel@16'

    Hat jemand eine Ahnung? Muss ich tatsächlich eine Lib linken? Wie mach ich das?

    Danke euch,

    MfG Mikey



  • Das soll offensichtlich ein Consolen-Programm werden. Ich verwende SetPixel eigentlich nur unter GUI-Programmen (WINAPI WinMain etc.).

    Im Zweifel mal die GDI.dll linken. Wenn das nicht reicht, auf bewährte C-Graphic-Funktionen zurückgreifen.



  • Danke dir für die Antwort.

    Hast du aber irgendeine Ahnung wie ich die Lib unter Dev C++ linke?

    Edit: Achja, C - Grafikfunktionen gibt es ja auch noch ?! Super, dann kann ich mal danach suchen 😃 Hab das vorher nicht gewusst. Also wenns mit SetPixel nich funktionieren sollte, dann google ich mal nach "C - Grafikfunktionen", und ab ins Tutorial 😉



  • Ööhm, nein, ich arbeite nicht mit DEV-C++ :(. Gibt es so etwas wie einen Projektordner oder eine Projektdatei oder Projektverwaltung? Dann "dem Projekt hinzufügen" wählen... Vielleicht auch die Linkereinstellungen... oder so ähnlich...



  • Hmm ne, ich hab mal nen Projekt erstellt, und dann unter "Diese Befehle zur Linker - Kommandozeile hinzufügen" einfach mal -GDI.dll reingeschrieben. Aber der Compiler meldet mir weiterhin den Linkererror. Aber danke dir trotzdem, ich mach mich mal über die vorher erwähnten "C - Grafikfunktionen" schlau. Ich hab gedacht, für sowas gäbe es nur die API 😉



  • Also dein Code da oben ist -so wie er da steht- 'total' falsch: Wo soll der Pixel denn überhaupt landen ? Wo hast du hDC initialisiert ?

    Bzgl. des Linkens der Lib...Also ich benutze den Compiler auch nicht, aber du dürftest aufer HP bzw bei goolge doch dazu sicherlich was finden 😉 .

    Elektronix schrieb:

    Im Zweifel mal die GDI.dll linken. Wenn das nicht reicht, auf bewährte C-Graphic-Funktionen zurückgreifen.

    Also man linkt eigentlich immer gegen lib-Dateien (und nich Dll's 😉 )...

    Die Library die du für SetPixel brauchst ist: gdi32.lib



  • Ich hab hier im Forum noch mal einbisschen gesucht, und bin dann auf diesen Thread da gestoßen:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39307.html

    Aber sorry Leute, damit kann keiner was anfangen 😉

    Ich probier jetzt mal die oben erwähnte Variante mit der lib.

    Achso, und mein Code wäre total falsch.. hmm naja, wiegesagt ich programmiere bisweilen nur in der Konsole, sry wenn ich irgend einen Müll texte 😃

    hm ne funktioniert auch nicht, wie immer mal wieder ein Linkererror.



  • Ja, Codefinder hat Recht. Hab mich nie darum gekümmert, weil meine IDE das bei GUI-Programme immer von alleine macht.



  • Also bei google habe ich bereits vor Tagen einen guten Code dazu gefunden, aber da brachte mir der Compiler auch Linkererror. Ich habe auch die gdi32 lib gelinkt, aber das funzte nich. Kann aber auch sein, dass SetPixel für die Konsole nicht geeignet ist, nur soweit ich noch weis, war der Beispielcode auch für die Konsole 🙄



  • mikey schrieb:

    dass SetPixel für die Konsole nicht geeignet ist, nur soweit ich noch weis, war der Beispielcode auch für die Konsole 🙄

    LOL!, natürlich funktioniert SetPixel NICHT in der Console....und ihr habt mein obrigen Post wohl übersehen:

    CodeFinder schrieb:

    Wo hast du hDC initialisiert ?



  • Ne, hab ich nicht übersehen 😉 Weis nur nicht, was du damit meinst. Wenn du mit Initialisierung das hier meinst:

    HDC hDC;

    Dann wars das. Wenn nicht, dann habs ich nich 😉 Wie soll das ausschauen ?

    MfG mikey



  • Das ist nur ne Deklaration/Definition...

    Das meine ich (bspw.):

    hDC = GetWindowDC(...);

    Du arbeitest hier mit nem ungültigem DC.



  • Achso, uupps... 😃

    Naja, da des SetPixel eh nich für die Konsole ist, kanns ich ja sein lassen.

    ...Aber da gabs doch noch Konsolen - Grafikprogrammierung...?

    Irgend ne Idee, wie ich ein Rechteck oder eine Linie in einer Win32 Konsole zeichnen kann ?? 😕

    (nur mal ein Stichwort, wir sind hier im API Forum ! .. Ansonsten wären meine Fragen geklärt)

    thx schon mal



  • Guck dir das mal an ➡ Zeichnen in der Konsole (Win32)



  • Ja danke, aber genau den selben Link habe ich oben auch schon angegeben, guck mal nach meinem Kommentar danach ... Dann weist du, was ich von dem halte.

    ich mein, was will ich mit Assemblern? das ist doch bestimmt irgendeine Notlösung, die da getextet wurde! Zudem ist der Code bei mir nicht kompilierbar, gibts nen Haufen Fehlermeldungen 😉

    Aber trotzdem Danke dir, habs halt schon vorher gesehen....

    mikey



  • Da gibts 10000 Fehlermeldungen beim Kompilieren 😡 😡



  • Upps, sry hatte ich nit gesehen. Naja such doch mal bei google...da findeste bestimmt was (Hab atm keine Zeit mir den Code anzugucken, sry)



  • Naja hab ich 😃 Aber ich versuchs nochmal, vielleicht werde ich fündig,

    trotzdem danke euch für die Mühe.

    MfG mikey



  • Der code sollte funktionieren. Die ~10000fehler kommen daher das du devc++ benutzt, der code is fuer nen andren compiler geschrieben. Dieser modus mit 320x240 pixeln is wirklich nicht zu empfehlen fuer irgendwas ernsteres. Spielereien ok, aber sonst is das total veralteter pre-Windows95 code der in WindowsXP nur noch funktioniert weil MS versucht alte anwendungen so gut es geht laufen zu lassen. Dieser modus kann noch ganz brauchbar sein wenn man OHNE betriebsystem und im 16bit modus programmiert (zum beispiel bei der programmierung seines eigenen betriebsystems).
    In der eingabeaufforderung zu zeichnen is einfach nicht vorgesehn in modernen betriebsystemen und obwohl man es sicher irgendwie hinbekommen kann einen kreis oder was auch immer ueber diese schwarze textbox zu legen wirst du damit nur probleme haben da dieses fenster sehr unterschiedlich gestaltet sein kann in sachen wie position, schriftgroesse, schriftart, zeilen, farbe, puffer und so weiter...
    Meine empfehlung waere erstell dir ein einfaches fenster und zeichne dort hinein. Das drumherum scheint am anfang zwar laestig zu sein aber dafuer hast du dann ein ordentliches programm das mit sicherheit auch bei deinen freunden oder wo auch immer funktionieren wird.


Anmelden zum Antworten