HDC?



  • OK ...

    die *.h:

    #ifndef SCHRIFT_H
    #define SCHRIFT_H
    
    class schrift
    {
       public:
    	 schrift();
    	 ~schrift();
    
       void init(HDC *o);
       void BuildFont();
    
    };
    
    #endif
    

    die *.cpp:

    #include "schrift.h" 
    
    #include <windows.h>		// Header File For Windows
    #include <gl\glu.h>			// Header File For The GLu32 Library
    
    int base; // Die erste Display List 
    HDC			hDC2;		
    
    schrift::schrift()
    {
    
    }
    
    schrift::~schrift()
    {
    
    }
    
    void schrift::init(HDC *o)
    {
       hDC2 = o;
    }
    
    void schrift::BuildFont()
    {
       HFONT font;                  // Wir generieren eine CFont- Klasse
       base = glGenLists(256);      // Wir generieren 256 Display-Listen
    
       font = CreateFont( -12, // Height Of Font
       0, // Width Of Font
       0, // Angle Of Escapement
       0, // Orientation Angle
       FW_BOLD, // Font Weight
       FALSE, // Italic
       FALSE, // Underline
       FALSE, // Strikeout
       ANSI_CHARSET, // Character Set Identifier
       OUT_TT_PRECIS, // Output Precision
       CLIP_DEFAULT_PRECIS, // Clipping Precision
       ANTIALIASED_QUALITY, // Output Quality
       FF_DONTCARE|DEFAULT_PITCH, // Family And Pitch
       "Comic Sans MS"); // Font Name
    
       SelectObject(hDC2, font); // Selects The Font We Created
    
    }
    

    Die init- Funktion ist der verzweifelte Versuch, den hDC zu übergeben ... irgendwie blick ich das nicht ...

    (im Hauptcode steht dann

    zug1.init(hDC);
    


  • void init(HDC *o); <- o als Pointer und in der Funktion selbst so tun als wäre es keiner, hmm ?



  • Also

    void schrift::init(HDC *o)
    {
       hDC2 = &o;
    }
    

    ?



  • warum nicht gleich der build funktion übergeben? und die globale var dir schenken.

    void schrift::BuildFont(HDC hDC2)
    { 
    // ...
    

    [edit]
    deine methodennamen übernommen



  • Bis jetzt hab ich ja nur diese eine Klasse ... der "eigentliche" Code ist ja prozedual aufgebaut. Ich muss also auch noch diese ganzen OpenGl- Sachen (Fenster erstellen, initiieren, Szene zeichnen) in eine Klasse "verpacken", sodass ich dann diese gemischte Klasse mit dem ganzen Zeug drin hab, und die Schrift- Klasse und dann eben nur noch eine sehr kurze main- Funktion. Richtig?

    Weil anders komm ich ja nicht um dieses hDC als globale Variable drumrum ...



  • Edit:

    Die kann ich ja nicht weglassen, deshalb wollt ich sie jetzt in eine andere Klasse reinbasteln. hDC wird ja auch im "restlichen" Code noch gebraucht ... weglassen oder nur für meine Schriftklasse benutzen kann ich sie also nicht.



  • SirNoname_ schrieb:

    Bis jetzt hab ich ja nur diese eine Klasse ... der "eigentliche" Code ist ja prozedual aufgebaut. Ich muss also auch noch diese ganzen OpenGl- Sachen (Fenster erstellen, initiieren, Szene zeichnen) in eine Klasse "verpacken", sodass ich dann diese gemischte Klasse mit dem ganzen Zeug drin hab, und die Schrift- Klasse und dann eben nur noch eine sehr kurze main- Funktion. Richtig?

    jaein.

    mit weglassen meinte ich das

    // schrift.cpp
    #include "schrift.h"
    
    #include <windows.h>        // Header File For Windows
    #include <gl\glu.h>            // Header File For The GLu32 Library
    
    // könntest du als member von schrift machen
    // int base;
    
    // weg mit
    // HDC            hDC2;
    
    schrift::schrift()
    {
    
    }
    // ...
    


  • OK, ich hab jetzt mal n bisl ausprobiert. Hier erstmal mein "Erfolg":

    Die schrift.h:

    #ifndef SCHRIFT_H
    #define SCHRIFT_H
    #include <windows.h>        // für den HDC
    
    class schrift
    {
       private:
       HDC *p_hDC;
    
       public:
    	 schrift();
    	 ~schrift();
    
       void BuildFont();
       void init(HDC *x);
    };
    
    #endif
    

    Die schrift.cpp:

    #include "schrift.h" 
    
    #include <windows.h>		// Header File For Windows
    #include <gl\glu.h>			// Header File For The GLu32 Library
    
    int base; // Die erste Display List 
    
    schrift::schrift()
    {
    
    }
    
    schrift::~schrift()
    {
    
    }
    
    void schrift::init(HDC *x)
    {
       p_hDC = x;
    }
    
    void schrift::BuildFont()
    {
       HFONT font;                  // Wir generieren eine CFont- Klasse
       base = glGenLists(256);      // Wir generieren 256 Display-Listen
    
       font = CreateFont( -12, // Height Of Font
       0, // Width Of Font
       0, // Angle Of Escapement
       0, // Orientation Angle
       FW_BOLD, // Font Weight
       FALSE, // Italic
       FALSE, // Underline
       FALSE, // Strikeout
       ANSI_CHARSET, // Character Set Identifier
       OUT_TT_PRECIS, // Output Precision
       CLIP_DEFAULT_PRECIS, // Clipping Precision
       ANTIALIASED_QUALITY, // Output Quality
       FF_DONTCARE|DEFAULT_PITCH, // Family And Pitch
       "Comic Sans MS"); // Font Name
    
       SelectObject(*p_hDC, font); // Selects The Font We Created
    
    }
    

    Und in dem "alten" Code:

    schrift zug1;
    //
    zug1.init(&hDC);
    

    OK, zumindest gibt das keine Compilerfehler mehr 😃

    Ich weiß ich ignoriere eure Vorschläge mit dem Konstruktor vehemend, aber das hab ich eben ausprobiert und bin gescheitert 👎 . Deshalb jetzt diese Variante mit der init- Funktion.

    Da ich den restlichen Code noch nicht drin hab, seh ich auch nicht, inwieweit das jetzt ein Erfolg ist. Klappt das so mit der Übergabe des HDC? Sind die Pointer alle richtig gesetzt und werden sie richtig behandelt? Besonders bei

    SelectObject(*p_hDC, font); // Selects The Font We Created
    

    bin ich mir da nicht sicher, da dort vorher eben kein Pointer als erstes Element steht ...

    Ich mach einfach mal weiter, aber wenn jemand nen Fehler sieht, wär nett mich drauf hinzuweisen 🙂 (Oder wenn mir mal Jemand schnell das mit der Übergabe per Konstruktor erklären kann 😕 )

    -> THX für eure Hilfe!



  • sind nur ein paar vorschläge

    #ifndef SCHRIFT_H
    #define SCHRIFT_H
    #include <windows.h>        // für den HDC
    
    class schrift
    {
    //   private:
    //    HDC *p_hDC;  unnötig
       public:
    	 schrift();
    	 ~schrift();
    
       void BuildFont(HDC hdc);
    //   void init(HDC *x); wie gesagt auch unötig und warum einen pointer
    };
    #endif
    

    Die schrift.cpp:

    #include "schrift.h" 
    
    // hast du schon in schrift.h
    // #include <windows.h>		// Header File For Windows
    #include <gl\glu.h>			// Header File For The GLu32 Library
    
    // könntest du noch als member machen
    int base; // Die erste Display List 
    
    void schrift::BuildFont(HDC hdc)
    {
       HFONT font;                  // Wir generieren eine CFont- Klasse
       base = glGenLists(256);      // Wir generieren 256 Display-Listen
    
       font = CreateFont( -12, // Height Of Font
       0, // Width Of Font
       0, // Angle Of Escapement
       0, // Orientation Angle
       FW_BOLD, // Font Weight
       FALSE, // Italic
       FALSE, // Underline
       FALSE, // Strikeout
       ANSI_CHARSET, // Character Set Identifier
       OUT_TT_PRECIS, // Output Precision
       CLIP_DEFAULT_PRECIS, // Clipping Precision
       ANTIALIASED_QUALITY, // Output Quality
       FF_DONTCARE|DEFAULT_PITCH, // Family And Pitch
       "Comic Sans MS"); // Font Name
    
       SelectObject(hDC, font); // Selects The Font We Created
    }
    

    Und in dem "alten" Code:

    schrift zug1;
    //
    zug1.BuildFont(hDC);
    

    SirNoname schrieb:

    Ich weiß ich ignoriere eure Vorschläge mit dem Konstruktor vehemend, aber das hab ich eben ausprobiert und bin gescheitert 👎 . Deshalb jetzt diese Variante mit der init- Funktion.

    ctor hat doch keiner angesprochen 😕



  • Hihi ... ja .... jetzt hab ich`s verstanden *gggg* 😃 😃 😃

    Klar, so is mein Zeiger wirklich überflüßig 👍

    Ich hab das irgendwie so verstanden, dass ich den HDC mit dem Konstruktor übergeben muss .... schon ewig lang rumherprobiert hier *ggg*

    -> THX <-

    (deine Vorschläge sind damit also alle angenommen und umgesetzt 😉 😃 )


Anmelden zum Antworten