JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=0a1a41121b4a85304b97c0f0a442d4e6Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Case-Marken bei Windowsmessages
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 24.10.2003, 01:16    Titel: Case-Marken bei Windowsmessages Antworten mit Zitat

Hi,

ich bekomme die Fehlermeldung "Initialisierung von 'dreieck' durch 'case'-Marke übersprungen", wenn ich ein Objekt dreieck innerhalb der Windowsmessages verwenden will, also wenn es z.B. nur dann erstellt werden soll, wenn die linke Maustaste gedrückt wird oder so.
Ich kann das Programm nur fehlerfrei kompilieren, wenn ich die Anweisungen für WM_LBUTTONDOWN als letzte case Marke hinter allen anderen hinschreibe. Sobald ich eine andere case Marke darunter habe, kommt oben genannte Fehlermeldung.
Kann man das irgendwie hinkriegen, dass noch weitere case Marken fehlerfrei darunter gesetzt werden können oder geht es nicht anders =/

MFG
#C
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 24.10.2003, 07:40    Titel: Antworten mit Zitat

Puh schwer zu sagen ich würd mal tippen das du deine Marken nicht definiert hast (die Marke dreieck ohne zu initialisieren verwendest) oder das du ein break vergessen hast.

Zeig doch mal deine Switch Anweisung zum besseren Verständniss.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 24.10.2003, 08:22    Titel: Antworten mit Zitat

Du darfst in einer case Anweisung kein Objekt direkt zuweisen:

Code:

int i = 1; // Compiler meckert


int i;
i = 1; // okay


C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 24.10.2003, 11:32    Titel: Antworten mit Zitat

kann man nicht einfach die initialisierung in einen block schreiben?:
Code:


case XYZ:
{
  int x = 1;
}

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 24.10.2003, 13:47    Titel: Antworten mit Zitat

Du kannst die Variable auch einfach vor dem switch-Ausdruck initialisieren:
Code:
CALLBACK...wasauchimmer
{
    int i=0;
    switch(msg)
    {
        case irgendwas:
    }
}

_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 24.10.2003, 16:57    Titel: Antworten mit Zitat

Der Tipp von Christian funktioniert. Danke dafür =)

Ich hatte zudem noch vor, dass per Druck auf Pfeiltaste-Oben die Länge der Grundseite des Dreiecks (m_size) um 10 Pixel verlängert wird.
Dazu habe ich folgendes geschrieben:
Code:


case WM_KEYDOWN:
{
   
case VK_UP:

dreieck->setSize(dreieck->getSize()+10);
break;

case VK_DOWN:

if(dreieck->getSize()-10 > 0)
dreieck->setSize(dreieck->getSize()-10);
break;

}
return 0;
break;



Jedoch lässt ein Effekt auf sich warten Crying or Very sad
dreieck wurde vor der switch-Anweisung deklariert und mittels Konstruktor wurden die Membervariablen auf 0 gesetzt.
Die Werte werden bei WM_LBUTTONDOWN festgelegt, also x/y Koordinate und die Anfangsgröße.
Liegt der Fehler möglicherweise bei WM_KEYDOWN?
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 24.10.2003, 22:38    Titel: Antworten mit Zitat

Verstehe ich das richtig, du legst das Dreieck auch in der Funktion an? Und wo zeichnest du es?

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 25.10.2003, 02:40    Titel: Antworten mit Zitat

Also gezeichnet wird es unter WM_LBUTTONDOWN mit der Methode dreieck->drawD(HDC hdc).

Angelegt habe ich es hier:
Code:


LRESULT CALLBACK usw.
{
   
HDC hdc;
   
Dreieck* dreieck = new Dreieck();  // Konstruktor setzt alles auf 0
   
dreieck->setSize(30);  // Startgröße setzen


switch(msg)
{
....
}

_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 25.10.2003, 08:19    Titel: Antworten mit Zitat

Zyrian hat Folgendes geschrieben:
Der Tipp von Christian funktioniert. Danke dafür =)

Ich hatte zudem noch vor, dass per Druck auf Pfeiltaste-Oben die Länge der Grundseite des Dreiecks (m_size) um 10 Pixel verlängert wird.
Dazu habe ich folgendes geschrieben:
Code:


case WM_KEYDOWN:
{
   
case VK_UP:

dreieck->setSize(dreieck->getSize()+10);
break;

case VK_DOWN:

if(dreieck->getSize()-10 > 0)
dreieck->setSize(dreieck->getSize()-10);
break;

}
return 0;
break;



Jedoch lässt ein Effekt auf sich warten :cry:
dreieck wurde vor der switch-Anweisung deklariert und mittels Konstruktor wurden die Membervariablen auf 0 gesetzt.
Die Werte werden bei WM_LBUTTONDOWN festgelegt, also x/y Koordinate und die Anfangsgröße.
Liegt der Fehler möglicherweise bei WM_KEYDOWN?


Das ist klar, dass das nicht Funktioniert. Du musst in dem case-Zweig noch eine switch-Anweisung bauen, und zwar musst du wParam testen.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 25.10.2003, 16:15    Titel: Antworten mit Zitat

Ahjo, stimmt ja. Naja, sind eben die typischen Anfängerfehler Rolling Eyes

Also so:
Code:

case WM_KEYDOWN:

switch(wParam)
{
      
case VK_UP:
dreieck->setSize(dreieck->getSize()+10);
break;

case VK_DOWN:

if(dreieck->getSize()-10 > 0)
dreieck->setSize(dreieck->getSize()-10);
break;
}
      
return 0;
break;


Klappt aber trotzdem nicht Sad
Das Dreieck behält seine ursprüngliche Grundseitenlänge von 30 Pixeln.
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 25.10.2003, 19:49    Titel: Antworten mit Zitat

Du musst schon das Dreieck ändern, dass du auch zeichnest, wenn du in der Funktion immer wieder ein neues Dreieck erstellst, wird das kaum gehen.

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 26.10.2003, 02:01    Titel: Antworten mit Zitat

Juhuu, es funktioniert ^^

Lag tatsächlich daran, dass das Dreieck immer wieder neu in der CALLBACK Funktion deklariert wird. Genauso war die Anweisung dreieck->setSize(30); am falschen Platz.
Folglich war mein konkreter Denkfehler, dass ich verpeilt habe, dass die gesamte CALLBACK Funktion immer wieder durchläuft. Anscheinend hab ich angenommen, dass nur die switch-Schleife immer wieder durchläuft (wie kommt man nur auf solche Ideen...?).

Also, danke für die Hilfe =)

MFG
#C
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 26.10.2003, 02:38    Titel: Antworten mit Zitat

Ein Nachtrag noch:

Laut MSDN lassen sich Tastendrücke von normalen Buchstabentasten mittels VK_A bis VK_Z abrufen. Wieso sagt mein Compiler, dass er diese Befehle nicht kennt? Alle anderen Tasten wie die F-Tasten lassen sich prüfen aber nicht die Buchstaben...
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 26.10.2003, 07:57    Titel: Antworten mit Zitat

Sind (glaub ich) in winuser.h definiert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 26.10.2003, 11:32    Titel: Antworten mit Zitat

Wenn man Windows.h includiert, sollte Winuser.h automatisch ebenfalls (durch windows.h) includiert sein.
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum