|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 22.09.2003, 19:51 Titel: Bildschirmmodus wechseln |
|
|
Wie wechselt man mitten im Spiel von Fenster in Vollbildmodus und wieder umgekehrt? Welche Attribute ich bei Direct 3D ändern muss, ist mir klar. Doch wenn ich den Modus wechsle, bekomm ich erstmal nur nen weißen Bildschirm. Man muss die Komponenten alle neu laden. Doch wie soll das konkret aussehen? Wenn ich im Fentermodus die Menüleiste haben will und im Vollbildmodus nicht, müsste ich das Fenter neu laden. Doch wie macht man das fehlerfrei. Ich habe es nicht hingekriegt. |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 23.09.2003, 07:29 Titel: |
|
|
Du musst nicht unbedingt das Hauptfenster neu laden, aber du musst die Eigenschaften des Hauptfensters anpasses: WS_POPUP im Vollbildmodus und WS_OVERLAPPEDWINDOW im Fenstermodus. Das Menu ist ebenfalls nur per Handle zu (ent)laden.
DIe DirectX-Objekte müssen freigegeben werden und anschließend neu geladen werden. also fast so, als ob du das Programm beendest und danach neu startest. (Ist vielleicht leichter so, wenn du dir Fenster oder Vollbild in der Registry merkst und das Umschalten wärend der Programmlaufzeit unterbindest) _________________
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 |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 23.09.2003, 09:58 Titel: |
|
|
Also "WS_POPUP im Vollbildmodus und WS_OVERLAPPEDWINDOW im Fenstermodus" kenn ich auch. Nur wie verändern man Werte, ohne direkt ein Fenster neu erstellen zu müssen. Ich übergebe eigentlich die Werte an eine Funktion, die ein neues Fenster erstellt. Aber wie verändert man einfach nur die Attribute eines Fensters? |
|
Nach oben |
|
|
Cyianor Super JLI'ler
Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 29.09.2003, 18:10 Titel: |
|
|
Du machst zwei Funktionen:
CreatePopUpWindow()
CreateOverlappedWindow()
bei der einen ist der Wert dann eben WS_POPUP bei der anderen WS_OVERLAPPEDWINDOW. Dann rufst du halt die auf, die du gerade brauchst. |
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 30.09.2003, 06:43 Titel: |
|
|
Ja, aber der erstellt immer ein neues Fenster bei mir. Hast du vielleicht nen Ausschnitt aus nem Programmcode, wo sowas gemacht wird? _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 30.09.2003, 07:30 Titel: |
|
|
Mit der Funktion Code: | LONG SetWindowLong(
HWND hWnd,
int nIndex,
LONG dwNewLong
); | kannst du unter anderem auch die Fensterform verändern, also z.B. den Status WS_OVERLAPPED oder WS_POPUP setzen.
Ein Codebeispiel müsste in der MSDN zu finden 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 |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 30.09.2003, 08:45 Titel: |
|
|
Danke für den Tip. _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 30.09.2003, 14:02 Titel: |
|
|
Ich hab noch ne Frage zu SetWindowLong() bzw. SetWindowPos().
Ich habe das in einer MFC-Anwendung verwendet, indem ich ein neues Fenster(wie gehabt) erstelle.
Aber wenn ich jetzt die Parameter in der richtigen Reihenfolge schreibe, meckert der Compiler, dass die Funktion nicht soviele Parameter hat oder dass die Parameter vom falschen Typ sind.
Nachdem ich in der MSDN geguckt habe, habe ich herausgefunden, dass es da anscheinend mehrere Überladungen gibt, aber komischerweise nimmt er immer eine, die eine Windowsklasse zurückgibt und als Parameter verlangt(ich glaub "CWnd"). Ist das so normal oder kann man da was dagegen machen? _________________ 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 |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 30.09.2003, 14:51 Titel: |
|
|
Du musst aufpassen die "richtige" Funktion zu nehmen.
Versuche es mal mit ::GetWindowLong(hwnd,index);
Die Doppelpunkte sind Absicht.
C. |
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 30.09.2003, 18:16 Titel: |
|
|
Wofür sind die Doppelpunkte gut?
Außerdem hätte ich noch ne Frage zur Funktion SetWindowLong:
Ich habe in der MSDN-Hilfe nachgeschaut und die Parameterbeispiele durchgelesen. Unter den meisten kann ich mir nicht viel drunter vorstellen. Ich habe auch einfach mal folgendes eingegeben:
SetWindowLong(hWnd,WS_POPUP || WS_VISIBLE,WS_POPUP || WS_VISIBLE);
Es gibt kein Compilerfehler. Aber auswirkungen auf mein Fenster hatte es keine. Wie wende ich die Funktion mit der Absicht an, die Menüleiste anzeigen zu lasse bzw. ausblenden zu lassen? _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 01.10.2003, 14:50 Titel: |
|
|
Es gibt einen Unterschied zwischen logischer und binärer verknüpfung (z.B. durch Oder). Die Logische "Veroderung" ist hier aber nicht die richtige, du mußt die Binäre "Veroderung" nutzen":
SetWindowLong(hWnd,WS_POPUP | WS_VISIBLE,WS_POPUP | WS_VISIBLE); _________________
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 |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 01.10.2003, 18:57 Titel: |
|
|
Also es hat alles den gleichen Effekt bei mir. Der liegt bei Null. Ich initialisiere alles neu: Direct3D, DirectXAudio, DirectInput und lade sogar die Texturen und sounds neu. Doch diese Leiste oben will einfach nicht mehr erscheinen, wenn ich von Vollbild in Fenstermodus umschalte. Gibt es eine bestimmte Reihenfolge der initialisierung die man einhalten muss? _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
|
|
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
|