PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fenster-ID abfragen


Vedek Bareil
2002-12-30, 22:39:56
ich bin z.Z. ein Windows-Programm am schreiben (unter Dev-C++), das mehrere Schaltflächen enthält, von denen jede eine andere Aktion auslösen soll, wenn sie angeklickt wird.
Laut C. Petzold: "Windows-Programmierung" muß ich dazu in die switch-Verzweigung der Window-Prozedur (des Programmfensters) ein case WM_COMMAND eintragen, und unter dem dann die Fenster-ID der geklickten Schaltfläche abfragen, etwa so:

switch(message)
...
case WM_COMMAND:
if (Fenster-ID von Button1)
{Aktion 1}
if (Fenster-ID von Button2)
{Aktion 2}
...
nur schweigt sich Petzold darüber aus, was ich denn statt "Fenster-ID von Button1" eintragen muß. Er mach wohl eine Andeutung, daß das über LOWORD(wParam) funktioniert, erläutert das aber nicht näher. Ich hab das dann mal so probiert, daß ich die Fenster-ID von Button1 als (HMENU) 1 festgelegt und die Abfrage in der Form

if(LOWORD(wParam) = (HMENU) 1)
{Aktion 1}
realisiert habe, aber das klappt nicht.

Vedek Bareil
2002-12-30, 23:05:20
LOOOOOOOL

Man sollte vielleicht auch wissen, daß der Vergleichsoperator in C++ vor allem überhaupt nicht = ist. Sondern etwas vollkommen anderes, nämlich == :D
Dann klappt's nämlich auch mit dem LOWORD:

case WM_COMMAND:
if (LOWORD(wParam) == 1)
{Aktion 1}
if (LOWORD(wParam) == 2)
{Aktion 2}

Nagilum
2002-12-30, 23:22:01
Oder man gewöhnt sich direkt sowas an:

if ( 1 == LOWORD( wParam ) ) {...}

Elemental
2002-12-31, 17:04:32
Weisst du denn nicht welche IDs die Schaltflächen abschicken? Also in Visual Studio kann man im ResourceEditor selber festlegen, wie die zu sendende ID eines Buttons heisses soll.


case WM_COMMAND:
if ( ID_Button1 )
{
//Aktion 1
}

if ( ID_Button2 )
{
//Aktion 2
}


ID_Button1 und ID_Button2 sind hier einfach die IDs, die man selbst vorher den verschiedenen Buttons zugeordnet hat.
Weiss aber net, wie das mit Dev-C++ geht.


mfG
Elemental