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

1

28.07.2010, 12:14

Problem mit Fensternachrichten

Hallo,
ich habe einige kleine Klassen geschrieben, die die Standardsteuerelemte der Windows API kapseln. Jedes Fenster hat eine Liste von Steuerelemten, die es enthält. Kommt jetzt eine Nachricht für ein Steuerelement, wird diese in der WindowCallback an das Steuerelement weitergeleitet, so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_DESTROY:
        {
            CWindow::windows[hWnd]->closed = true;
            return 0;
        }
        case WM_COMMAND:
        {
            CWindow::windows[hWnd]->controlElements[(HWND)lParam]->SetEvent(HIWORD(wParam));
            return 0;
        }
    }

    return DefWindowProc(hWnd, msg, wParam, lParam);
}


Das Problem ist jetzt, ich habe Groupboxes, die auch eine Liste von Steuerelementen enthalten. Wenn jetzt eine Nachricht für zum Beispiel einen Button in einer Groupbox kommt, wird die Nachricht nicht an den Button weitergeleitet, da hWnd jetzt das Handle zur Groupbox ist, oder? lParam müsste jetzt der Handle des Button sein, sehe ich das richtig. Wie würdet ihr sowas lösen? Ich kann mir nur vorstellen, alle Fenster durchzugehen und zu überprüfen ob hWnd ein Childwindow ist. Danke schonmal.

2

28.07.2010, 12:27

LPARAM beinhaltet HWND des Controls.
Wenn Nachricht von einem Control stammt.
Andernfalls ist es NULL.
fka tm

3

28.07.2010, 13:10

die nachrichten die kommen, sind eigentlich immer von einem control, die frage ist nur ob das parent des controls das hauptfenster oder ein child des hauptfensters ist.

4

28.07.2010, 13:56

Das kannst du doch beim Erstellen des Controls festlegen (hWndParent)?
Weiß nicht, ob ich dein Problem richtig verstehe... :huh:
fka tm

5

28.07.2010, 14:02

Ansonsten kannst du doch einfach Prüfen, ob das Parentfenster (gibts mit GetParent(deinFensterhandle)) gleich dem Hauptfenster ist, wenn ich dein Problem richtig verstehe ?

6

28.07.2010, 14:42

hm, das problem scheint etwas anders zu sein. Das Verhältnis der fenster ist so:

Hauptfenster ist Parent von Groupbox ist Parent von Button

das Problem: die Callback von Hauptfenster erhält keine ereignisse von button, da Groupbox parent von button ist. Wie komme ich den an die Events von der Groupbox? Ich komme nicht an die Callback funktion, weil ich die Standard Fensterklasse "BUTTON" genommen hab...

kann es sein, dass ich einfach keine childfenster als parent angeben sollte?

7

28.07.2010, 14:53

Hm, vielleicht hilft dir das hier: http://msdn.microsoft.com/en-us/library/…28VS.85%29.aspx Damit kannste die WndProc eines Fensters mit Vordefinierter Klasse ändern. (GWLP_WNDPROC)

Werbeanzeige