Warum funktioniert CButton (Pushbutton) nicht in einer CDialogBar?
-
Hallo,
in einer CDialogBar wurde ein neuer CButton (Pushbutton) manuell installiert. Aber er ist grau und ohne Funktion:
Definition in *.h:
public:
CButton m_Button;
afx_msg void OnButton();Deklaration in *.cpp:
BEGIN_MESSAGE_MAP(CDlgToolbar, CDialogBar)
ON_BN_CLICKED(IDC_BUTTON, &CDlgToolbar::OnButton)
END_MESSAGE_MAP()void CDlgToolbar::OnButton()
{
// Bei Betätigung des Buttons springt der Debugger hier nicht rein!
}LONG CDlgToolbar::OnInitDialog (UINT wParam, LONG lParam){
...
m_Button.Create(_T("Button Text"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,CRect(950, 10, 1110, 45), this, IDC_BUTTON);
m_Button.ShowWindow(SW_SHOW);
...
}Bei Betätigung des Buttons und einem Haltepunkt in der Messagehandler Funktion: OnButton() springt der Debugger erst gar nicht in die Funktion. Nur warum nicht? Vielleicht liegt auch dort der Fehler. Weil meines Wisses ein Steuerlement ohne Messagehandler Funktion immer ausgegraut dargestellt wird.
Alternativ habe ich den CButton auch einmal als Checkbox mit dem Attribut "BS_AUTOCHECKBOX" deklariert. Alles andere blieb identisch. Die Checkbox funktioniert im Gegensatz zu "BS_PUSHBUTTON" einwandfrei!
Nun bin ich doch recht ratlos.
Kann es sein das ein CButton in CDialogBar nicht erlaubt ist?
Oder hat jemand eine Idee warum der Button nicht funktioniert, oder wie sich die Ursache finden lassen könnte?
Grüße,
Bernd
-
Sicher, dass Du den Buttonnicht mit EnableWindow disabled hast?
BTW: Die ID IDC_Button im Create ist unterschiedlich zu IDC_BUTTON in den Handlern!
-
Martin Richter schrieb:
Sicher, dass Du den Button nicht mit EnableWindow disabled hast?
Leider ja, im ganzen Programm ist keine Funktion EnableWindow() implementiert.
Martin Richter schrieb:
BTW: Die ID IDC_Button im Create ist unterschiedlich zu IDC_BUTTON in den Handlern!
Das war ein Tipfehler meinerseits (ist geändert) bei der Übertragung ins Forum. Falls der Fehler im Programm wäre, hätte der Compiler sicher eine Fehlermeldung ausgegeben.
-
Fehler gefunden:
Um in einer CDialogBar ein CButton zu installieren, muss der Messagehandler des Buttons in der übergeordneten CMainFrame Klasse implementiert werden. http://www.codeproject.com/Messages/1179298/Re-Why-is-a-CButton-disabled-on-CDialogBar.aspx
Ufff, und da soll einer drauf kommen, wenns mit dem gleichen CButton als Checkbox oder RadioButton tadelos in der CDialogBar Klasse klappt.
Wird Zeit zu QT zu wechseln!