| HOME-Page Prof. Stephan | ||||
| online-Skripten | ||||
| Einführung in MS VISUAL C++ (MFC) | ||||
| Anhang A: Zusammenfassung der Programmelemente für Dialogfenster. | ||||
Voraussetzung: wir haben eine Class CxyzDlg, welche von der MFC-Class CDialog abgeleitet wurde. Man prüft dies, indem man im Class Wizard die Registerkarte "Klassen-Info" (ganz rechts) aufruft, dort die Class CxyzDlg einstellt (in unserem Beispiel ist dies CEingabe). Dann müßte als Basisklasse CDialog zu sehen sein.
Zur Initialisierung des Programms, welches hinter einem Dialogfenster steht, wird die Routine CxyzDlg::OnInitDialog() benutzt. Wenn diese Routine nicht vorhanden ist, muß sie m.H. des Class Wizard erstellt werden. Dazu stellt man als Objekt-ID den Classname (also CxyzDlg) und als Nachricht WM_INITDIALOG ein und erzeugt die function.
Wichtig: Man darf eigene Anweisungen nur am Ende von CxyzDlg::OnInitDialog() einfügen, der Aufruf der Basisfunction CDialog::OnInitDialog(); muß erhalten bleiben. Dies ist im Code auch durch einen Kommentar angezeigt:
BOOL CEingabe::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Zusätzliche Initialisierung hier einfügen
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
}
Jedem sogenannten Steuerelement (Control - es ist stets ein Unterfenster
des Dialogfensters und hat einen eigenen Typ) ist zur Identifikation
eine ganzzahlige Konstante zugeordnet, die ID. Wir brauchen uns um den
Wert dieser Konstanten nicht zu kümmern, er wird vom Developer Studio
automatisch verwaltet. Wer die Werte dennoch einmal sehen möchte,
braucht nur Ansicht -> Resourcensymbole zu wählen. Im Fenster,
welches dann geöffnet wird, kann man die Werte auch ändern: wir warnen
davor, dies zu tun. Um jetzt auf dieses Element (dieses Unterfenster) während des Programmlaufs
zuzugreifen, gehen wir gedanklich stets von der ID aus. Dabei
unterscheiden wir 3 Fälle:
Steuerelemente (Controls): Zugriff auf ~
void CDemoDlg::OnKillfocusBreite()
{ GetDlgItemText ( IDC_BREITE , m_strBreite ) ; // Eingabestring bei WINDOWS abholen
.........
CWnd * pF = (CWnd *) GetDlgItem ( IDC_BREITE ) ;
pF -> SetFocus () ;
Hier ist darauf zu achten, daß der pointer stets den Typ bekommt, der sich
aus der Class der aufzurufenden function ergibt. Für SetFocus ist dies der
(ziemlich allgemeine) Typ CWnd *, in anderen Fällen muß man andere Typen wählen:
CSpinButtonCtrl * pSpin = ( CSpinButtonCtrl * ) GetDlgItem ( IDC_SPIN_BREITE ) ;
pSpin -> SetRange ( 10 , 100 ) ; pSpin -> SetPos ( 50 ) ;
void CEingabe::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
.........
if ( pScrollBar -> GetDlgCtrlID() == IDC_SPIN_BREITE )
{ .........
}
Es gibt zwei Methoden, um unter Visual C++ member variables einer Class
zu definieren. Dabei muß man sich erst darüber klar werden, welche Art von
Variable man hat:
Variablen: Definition und Zugriff
Für diese Variablen gilt:
v . membername = "Hugo" ; // Anfangswert der zugehörigen Edit Box
v . DoModal () ; // Ausführung des Dialogs
CString NeuerWert = v . membername ; // letzter Wert der Edit Box
GetDlgItemText ( IDC_E_BREITE , m_strEBreite ) ;
x
xxxx
Prof.Stephan@t-online.de