HDC?
-
Naja die Klasse an sich nicht, die will ich ja erst schreiben

Aber den dazu nötigen Code hab ich schon auf meiner hp verbastelt:
http://sirnonamesplace.de/tutorials/tut_schrift2.htm
Bitte die schlechten und teilweise falschen Erklärungen ignorieren ... ich weiß ...

In der Funktion BuildFont (wenn du die page bis ganz unten durchscrollst hast du den code ohne Kommentare) steht
SelectObject(hDC, font); // Selects The Font We CreatedJa ... und da ist das Problem.
-
@ miller_m: Ja, da hast Recht. Aber wie kann ich globale Variablen auch in eine Klasse verwenden? Zugegebenermaßen fehlt mir da sehr viel Grundwissen

-
SirNoname schrieb:
@ miller_m: Ja, da hast Recht. Aber wie kann ich globale Variablen auch in eine Klasse verwenden? Zugegebenermaßen fehlt mir da sehr viel Grundwissen

einfach benutzten
als hättest du sie selber deklariert.
-
übergebe hdc einfach an deine build methode

und versuche globale variablen zu vermeiden.
-
Also ich hab zum NeHe- Grund- Code meine neue Klasse dazugebastelt. Im Code steht, wie miller_m das schon ganz richtig bemerkt hat, die hDC deklariert und initialisiert. OK. Super. In meiner Klasse (genauer in der *.cpp) steht dann der böse Befehl
SelectObject(hDC, font); // Selects The Font We Createdund beim Compilier-Versuch
40 C:\Dokumente und Einstellungen\s\Desktop\Font selbstgemacht\schrift.cpp
`hDC' undeclared (first use this function)... Aber man könnte es ja trotzdem mit einer Übergabefunktion probieren .... *Bastel* ...
-
zeig mal deine klasse
-
OK ...
die *.h:
#ifndef SCHRIFT_H #define SCHRIFT_H class schrift { public: schrift(); ~schrift(); void init(HDC *o); void BuildFont(); }; #endifdie *.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); }; #endifDie 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 Createdbin 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 }; #endifDie 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
)