Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

1

17.03.2008, 19:11

Kommunikation 2er fensterklassen

hallo leute..

mir fällt keine elegante lösung für folgendes problem ein:

wenn ich den client starte erscheint zuerst ein kleines login-fenster in dem ich IP und nickname eingebe. wenn ich auf den button "ok" klicke will ich dass das fenster verwschwindet und der eigentliche client erscheint; verbunden mit dem server.

ich weiss jetzt nur nucht wie ich die beiden fenster miteinander kommunizieren lassen soll..

mein code sieht im groben jetzt mal wie folgt aus. das client fenster wird erzeugt, jedoch noch nicht angezeigt.

was wäre eine schöne variante den client connecten zu lassen bzw. anzeigen zu lassen nachdem das login-fenster(das wie gesagt IP und nickname kennt) verschwindet?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)

{
    frmLogin Login;
    frmClient Client;

    { // erzeuge Login

    }

    { // erzeuge Client

    }

    MSG msg;
    while(GetMessage (&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return static_cast<int>(msg.wParam);
}
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Bugger

Frischling

Beiträge: 66

Wohnort: Bezirk Freistadt

Beruf: EDVO HTL Schüler

  • Private Nachricht senden

2

18.03.2008, 08:35

ich würde entweder bei CWnd::Create() über lpParam nen Pointer auf ne Struktur mit den Daten für beide Fenster übergeben oder nen Globale Var
anlegen(was natürlich net so sauber wär) ;)
Hältst du nicht den Bug in Ehren, wird er dich noch manches Lehren.

Ein Gespräch setzt voraus, dass der andere Recht haben könnte.

3

18.03.2008, 09:30

Beide Fenster (wenn es überhaupt zwei braucht) können ja dieselbe Fensterprozedur (WinProc) verwenden. Oder via SendMessage und benutzerdefinierten Nachrichten kommunizieren.

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

4

18.03.2008, 10:19

Für das Login-Fenster einen Dialog verwenden, der per DialogBox vor dem Sichtbarmachen des Client-Fensters aufgerufen wird und alle Daten, die das Client-Fenster benötigt in einer Struktur speichert.
Signaturen werden überbewertet

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

5

18.03.2008, 13:51

wie macht man benutzerdefinierte nachrichten.. diese lösung scheint recht komfortabel zu sein..

was wäre denn die "OOP-mäßigste variante"?

die variante mit einer struktur über lParam:

ich wollte mal daten an einen thread übergeben, und da hat man mir gesagt dass das keine schöne variante wäre.. also daten über den lParam zu übergeben..

nat. kann ich auch eine globale variable machen, aber wie gesagt: ich will eine annehmbare schöne lösung finden ^^
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

18.03.2008, 14:27

Ähm? Übergeben von Daten über einen, dafür vorgesehenen, Parameter ist keine schöne Lösung Oo? Naja gut. Vielleicht ist das Geschmacksache :badgrin: . Benutzerdefinierte Nachrichten gehen recht einfach:
PostMessage( WM_APP + Nummer_deiner_Nachricht).

OOP Lösung? ggf. sowas:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
while(quit == false)
{
    Klasse_Login login;
    Klasse_Client client;
    if(!login.run())
        quit = true;
    else if(!client.run())
        quit = true;
}
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige