Habe ein Problem mit meinem Menü
-
Ertsmal Danke das du/sie dich/sich für mein Problem interessierst!
Ich habe mir ein Menü gebaut welches ich in D3D Spielen starten kann und auch soweit einwandfrei benutzen kann bzw. Es funktioniert!
ich habe die ganzen menüitems als static in ner .h deklariert und eingebunden die haben so nen basis struct
struct CMItem { public: char* szCaption; MITYPE miType; RECT rDisplay; BOOL bEnabled; char* szToolTip; };und sind z.B. so deklariert
static CMItem miReturn = {MENUBACKCHAR,MIRETURN,{0,0,0,0},TRUE,""};Jetzt zu meinem Problem!
Solange ich die Werte vom struct in der Menu.cpp wo sie eingebunden sind abfrage/verändere bekomme ich die richtigen werte! Das sehe ich dann an meinem Menü!
Sobald ich aus ner anderen .cpp wo die menu.h ebenfalls eingebunden ist versuche die werte abzufragen bekomme ich immer nur default also die definition von mir zurückgegeben!Ich kann mir absolut nicht weiterhelfen!
Hab jetzt schon gelesen das static die probleme macht.
aber was kann ich als ersatz nehmen?
-
Habe jetzt zumindest ein Lösung gefunden ohne einen enum mit den ganzen items zu machen
So wie es aussieht bekommt die andere cpp auch die ganzen Items aber frische und ie ist nicht an die veränderungen aus der menü.cpp gekoppelt!
Also frag ich die captions ab! sieht zwar altbacken aus aber es funzt!FLOAT CIngameMenu::GetValue(PVOID pItem) { for (INT i=0;i<iValueCount;i++) if (Values[i] && !strcmpi(((CMItem*)pItem)->szCaption,Values[i]->szCaption)) { switch (Values[i]->miType){ case MIVALUE: return Values[i]->fValue; case MISWITCH: return (FLOAT)*((BOOL*)&Values[i]->fValue); case MICOLOR: case MIKEY: return (FLOAT)*((BYTE*)&Values[i]->fValue); } } return 0.0; }
-
Bitte beende nicht jeden zweiten Satz mit einem Ausrufezeichen.
Du bist dir schon folgender Dinge bewusst?
staticführt dazu, dass in jeder Übersetzungseinheit eine eigene Definition und ein eigener Bezeichner entsteht.- Nach
case-Marken inswitchsollte generell einbreak;stehen, es sei denn, die folgenden Fälle sollen auch miteinbezogen werden. - Ein
structbraucht keinenpublic-Spezifizierer. - Wenn du mit Standard-C++ arbeitest, kannst du die kleingeschriebenen Varianten der Datentypen (
int,float,void*) benutzen. - Zudem gibt es da die Klasse
std::string, die dich von der mühsamen Arbeit mitchar*befreit. - Meistens gibts eine bessere Methode als die Übergabe eines Void-Zeigers.
- In C++ benutzt man
static_caststatt der C-Style-Casts mit Klammern. - Die Vorteile der ungarischen Notation seien mal dahingestellt...
-
Das doch egal wie ich einen satz beende oder?
1. ist jetz bekannt ja
2. das in meinem fall irrelevant da die func dadurch beendet wird
3. das sie keinen brauch ist klar ist ein überbleibsel weil normalerweise ne klasse sein sollte aber damit hatte ich noch mehr schwierigkeiten
4. das jedem sein stil
5. das auch
6. pvoid ist universell ich kanns ja interpretieren wie ich will (auch so ne stil sache)
7. kenn ich net ich versteh mit meinem alles (auch wieder stil)
8. keine lust gehabt danach zu googlen da unbekanntSo wie ich das jetzt mache hat das ganze jetzt ein riesen nachteil
es ist total lahm durch die for schleife wenn ich viele werte abfragen muss bzw das menü viele items hat!Welche Möglichkeiten gibt es noch das ich direkt auf die items zugreifen kann?
Mir fällt das hier noch ein aber da ich mich an die struktur dann halten muss scheidet diese variante für mich aus!
ich könnte ein enum machen damit ich den index von Values habeEvtl ist es ja auch möglich die Items aus anderen cpp's irgendwie an die aus der menu.cpp zu koppeln aber da hab ich keinen ansatz!
Gibt bestimmt wieder irgendso eine Lösung bei der, wenn man sie sieht sofort denkt "stimmt ja...hätte ich ja drauf kommen können"
Evtl weis es einer von euch und kann mir weiterhelfen!