[C++/MFC] Enable/Disable Dialogcontrols (Button, Editbox)

  • #1
S

Spagetti_Eis

Mitglied
Themenersteller
Dabei seit
07.11.2005
Beiträge
8
Reaktionspunkte
0
Hallo zusammen,

ich finde einfach nicht, wie ich z.B. eine Editbox oder einen Button in meinem Dialog disablen bzw. enablen kann. Ich möchte in meinem Programm, wenn ich auf Button 1 geklickt habe Button 2 enablen (Button 2 hab ich bereits im Editor von Anfang an disabled).

Muß ich dazu auf CWnd zurückgreifen? Da gibts ja diese Funktion EnableWindow, aber die enabled mir ja nur die Mausklicks und Eingaben für den gesamten Dialog.

Wie greife ich aber auf meinem Button zu (ich hab schon die Membervariable m_button angelegt).

Vielen Dank schon im Voraus
IH
 
  • #2
Hab die Lösung (dank CodeFatal im tutorials Forum)!!!

Einfach für jedes gewünschte Control eine eigene Membervariable (Control) anlegen und dann mit der public CWnd-Funktion EnableWindow() die Dinger enablen.

z.B.
Code:
m_button.EnableWindow(TRUE);

Bye
 
  • #3
Ja, Du musst daran denken, dass die Controls von CWnd abgeleitet sind; Du kannst also CWnd-Methoden benutzen.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_hierarchy_chart.asp

Was ich aber eigentlich sagen wollte:  Falls Du für die entsprechenden Controls keine Control-Variable anlegen willst (vielleicht, weil Du diese nur für eine/wenige Funktion benötigen würdest und Du viele Controls hast), kannst Du z.B. auch

a)
Dir lokal vom Parent-Window per CWnd::GetDlgItem:
CWnd* pCtrlWnd= parent->GetDlgItem(nDlgItemID);
einen Zeiger auf das Control holen und Methoden von CWnd verwenden, z.B.
pCtrlWnd->EnableWindow(FALSE);
Wenn Methoden des Controls verwendet werden sollen, die erst in der Schnittstelle des Controls eingeführt werden, muss man casten:
CEdit* pEdit= (CEdit*) parent->GetDlgItem(ID_EDIT);
pEdit->IrgendeineCEditMethode(...);

Wenn Du das im Parent-Window selbst machst, kannst Du natürlich die eigenen CWnd-Methoden direkt verwenden (ohne Zeiger auf ein Parent):
CWnd* pCtrlWnd= GetDlgItem(nDlgItemID);


b)
Dir das Handle des Parent-Windows holen, dann über die Windows-Funktion
HWND GetDlgItem(HWND hDlg, int nDlgItemID);
das Handle des Controls. Dann lassen sich mit diesem Handle als Parameter
die entspr. Windows-Funktionen aufrufen, z.B.
BOOL EnableWindow(HWND hWnd, BOOL bEnable);
 
Thema:

[C++/MFC] Enable/Disable Dialogcontrols (Button, Editbox)

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.959
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben