Dialogbox-Elemente deaktivieren [Win32 API]

Hallo Leute,
ich hoffe mal, dass sich wer von euch mit der Win32 API besser auskennt als ich, und dass das hier überhaupt reingehört ;)
Folgendes Problem: Ich habe mit dem Resourceneditor von MSVC++ 6.0 eine hübsche Dialogbox erstellt, die ich auch wunderbar per DialogBox(...) aufrufen kann, die Callback-Funktion spricht auch an, alles wunderbar.
Allerdings hab ich keine Ahnung, wie ich es bewerkstelligen soll, dass ich ein Element der Dialogbox (Button, Textfeld...) deaktiviere, also dass es eingegraut wird und nicht mehr auf Benutzereingaben reagiert. Ich glaube, dass es mit
SendDlgItemMessage(...);
gehen sollte. Aber welche Message muss man der Dialogbox bzw. dem jeweiligen Element schicken? In der MSDN hab ich keine entsprechende Message gefunden...
Ich hoffe mal, ihr könnt mir da weiterhelfen!

MfG
reima
 

Xeragon

Erfahrenes Mitglied
Die Message heißt WM_ENABLE, du solltest allerdings EnableWindow() verwenden, um ein Fenster zu aktivieren/deaktivieren.
 
Danke für deine Antwort. Aber ich will ja nicht die ganze Dialogbox deaktivieren, sondern nur einzelne Elemente davon, z.B. ein Button.
Damit das dann so aussieht:
disabled.jpg
 

Xeragon

Erfahrenes Mitglied
Du musst das Handle des jeweilige Buttons als Parameter übergeben, wenn du nicht die ganze box deaktivieren willst.
 
Ah, na also.
Ich dachte eigentlich, dass
SendDlgItemMessage(hDlg, IDC_CONTROL, WM_MESSAGE, wParam, lParam);
gleichzusetzen ist mit
SendMessage(GetDlgItem(hDlg, IDC_CONTROL), WM_MESSAGE, wParam, lParam);
Darum hab ich an deine Lösung zuerst gar nicht gedacht... Aber danke nochmal für deine Hilfe :)
 

Xeragon

Erfahrenes Mitglied
Die zwei sind eigentlich schon gleich.

aber EnableWindow(hDlg, bEnable)
ist nicht gleich
EnableWindow(GetDlgItem(hDlg, IDC_CONTROL), bEnable)
 
Na ja, das ist ja wohl klar, beim ersten wird die gesamte Dialogbox deaktiviert und beim zweiten nur das Control mit der ID IDC_CONTROL. Und du hast recht, SendDlgItemMessage(...) entspricht SendMessage(...) (mit den richtigen Parametern natürlich). Das Problem lag nur darin, dass das reine Senden der WM_ENABLE Nachricht eben nicht dasselbe ist wie der Aufruf von EnableWindow(...).
 

Xeragon

Erfahrenes Mitglied
Deswegen hab ich dir auch EnableWindow() empfohlen ;-).
Damit das sonst funtkioniert müssen vermutlich noch ein paar andere Messages verschickt werden.
 
D

Darky[TA-UF]

Hi, den Button kannste ganz einfach deaktivieren, und zwar so:
GetDlgItem(IDC_DEINBUTTON)->EnableWindow(FALSE);