Menüs
Menüpunkte
Symbolschaltflächen
Statuszeilen
Tooltips
Wenn Sie vorhaben, in Ihrer Anwendung Menüs zu benutzen, dann ist es in vielen Fällen nützlich, Ihre Ansicht nicht von CView, sondern von CFormView abzuleiten. Somit erreichen Sie, daß Ihre Dialogseite direkt im Anwendungsgerüst gebunden ist. Für eine derartige Dialogseite brauchen Sie keine neue Klasse zu erzeugen. Die Steuerelemente Ihrer Dialogseite werden der Ansicht zugeordnet. Der Resource-Editor erzeugt die Dialogseite automatisch für Sie. Auch wenn Sie die Dialogseite nicht von CDialog abgeleitet haben, stehen Ihnen die meisten Funktionen der MFC Klasse CDialog zur Verfügung. Es wird Ihnen auffallen, daß Ihre Dialogseite die Schaltflächen OK und Cancel nicht mehr hat. Sie brauchen auch diese Schaltflächen hier nicht, denn Sie steuern Ihr Programm über die entsprechenden Menüpunkte. Sie leiten die Ansicht von CFormView ab, wenn Sie im Schritt sechs des AppWizards für Ihre View-Datei als Basisklasse die MFC Klasse CFormView wählen.
void CMenuesView::OnPlus()
{
UpdateData(TRUE);
m_ergebnis=m_zahl1+m_zahl2;
UpdateData(FALSE);
}
Sie können zu einem Menübefehl auch eine Befehlsaktualisierung schreiben. Dies ist eine UPDATE_COMMAND_UI Nachricht, die ClassWizard Ihnen zu jedem Menübefehl zur Verfügung stellt. In der Nachrichten-Funktion für eine Befehlsaktualisierung können die Bedingungen für Aktivierung bzw. Nichtaktivierung eines Menübefehls geschrieben werden. Von dieser Möglichkeit ist im Beispielprogramm menues Gebrauch gemacht worden. Der Menübefehl Dividieren soll nur aktiviert werden, wenn in der Editbox für die zweite Zahl eine Ziffer außer Null steht, oder die besagte Editbox nicht ganz leer ist. Um dies zu realisieren, markieren Sie für den Menüpunkt Dividieren die Nachricht UPDATE_COMMAND_UI und erzeugen Sie die von ClassWizard vorgeschlagene Nachrichten-Funktion dazu. Der Bezeichner(ID) für den Befehl Dividieren heißt im Beispielprogramm ID_TEIL. Die Nachrichten-Funktion für die Befehlsaktualisierung sieht folgendermaßen aus:
void CMenuesView::OnUpdateTeil(CCmdUI* pCmdUI)
{
CString text;
GetDlgItemText(IDC_ZAHL2, text);
if(text=="0" |text=="")
{
pCmdUI->Enable(FALSE);
}
}
Mit Hilfe der MFC Funktion GetDlgItemText() schreiben Sie den Inhalt der Editbox für die zweite Zahl in die CString Variable text. Falls der Inhalt Null oder Leer sein sollte, sorgt die Funktion pCmdUI->Enable(FALSE); dafür, daß der Befehl Dividieren deaktiviert wird. Um ganz genau zu sein, der Parameter FALSE sorgt für die Deaktivierung.
Es ist öfter der Fall, daß Sie mit einem Menübefehl eine weitere Dialogseite, die Sie schon programmiert haben, aufrufen möchten: Im Beispielprogramm menues demonstriert der Menüpunkt Extra/Click me einen solchen Fall. Es geht ganz einfach: Sie müssen in der Nachrichten-Funktion des Befehls Click me die MFC Funktion DoModal() aufrufen: der Quellcode für die Nachrichten-Funktion zu dem Befehl Click me sieht wie folgt aus:
void CMenuesView::OnClickme()
{
CExtra dlg;
dlg.DoModal();
}
CExtra ist die Klasse Ihrer Dialogseite, die Sie mit dem Befehl Click me aufrufen möchten. Mit DoModal() rufen Sie die Dialogseite auf den Bildschirm auf. Damit dies auch so funktioniert, müssen Sie vorher die Headerdatei der Klasse CExtra mit der Anweisung #include"Extra.h" in die Ansicht bzw. CMenuesView.cpp gebunden haben.
Damit Sie Symbolschaltflächen benutzen können, müssen Sie im Schritt vier des AppWizards die Standardeinstellung akzeptiert haben. Symbolschaltflächen haben die gleiche Funktion wie Menübefehle. Normalerweise duplizieren Symbolschaltflächen die Menübefehle. Daher muß eine Symbolschaltfläche dieselbe ID haben, wie der entsprechende Menübefehl. Im Beispielprogramm menues haben z.B. der Menüpunkt Addieren und die Symbolschaltfläche + dieselbe ID, nämlich ID_PLUS.
Die Gestaltung der Symbolschaltflächen ist auch relativ einfach. Wenn Sie im Resource-Editor zum Toolbar gehen und z.B. auf IDR_MAINFRAME doppelklicken, rufen Sie somit den Toolbar-Editor auf. Der Toolbar-Editor funktioniert wie der Windows Bitmap-Editor Paintbrush. Sie werden eine Reihe von gemalten Symbolschaltflächen vorfinden, die Sie für Ihre spezielle Belange umgestalten können. Wenn Sie im Toolbar-Editor auf eine Symbolschaltfläche doppelklicken, gelangen Sie zu den Eigenschaften dieser Symbolschaltfläche. Hier können Sie dann u.a. die ID der Symbolschaltfläche bestimmen.
Um eine Statuszeile zu einem Menübefehl oder Symbolschaltfläche zu schreiben, rufen Sie im Resource-Editor den Menü-Editor auf. Wenn Sie auf den gewünschten Menüpunkt doppelklicken, gelangen Sie zu den Eigenschaften des Menüpunktes. Sie können dann im Feld Statuszeilentext(Prompt) den Text Ihrer Statuszeile eingeben. Das ist alles.
Es ist Ihnen bestimmt aufgefallen, daß wenn Sie in Windows Programmen z.B. Microsoft Word, den Mauszeiger auf eine Symbolschaltfläche positionieren, erscheint dann eine kurze Beschreibung für diese Symbolschaltfläche mit gelbem Hintergrund. Diese Technik können Sie auch für Ihre Anwendungen benutzen. Wenn Sie die Statuszeile für eine Symbolschaltfläche geschrieben haben, fügen Sie am Ende des Textes für die Statuszeile Backslash und die Buchstabe n(\n). Der Text, den Sie nach \n im Feld Statuszeilentext(Prompt) eingeben, erscheint dann als Tooltip, was auch als QuickInfo bezeichnet wird.