Frage zu SetWindowTextW
-
Ich habe ein kleines Programm(dialog-based).
Welches eine EingabeBox und einen Button hat.Funktion: Ich gebe in meiner Eingabebox einen Namen ein und mit dem klick auf dem Button wird der Titel des Fensters verändert, entsprechend der Eingabe.
1. Frage: Ist das schlecht programmiert wenn ich einfach von der CDialogKlasse die entsprechende Funktion aufrufe?
void CTestAppDlg::OnBnClickedOk() { UpdateData(TRUE); CDialog::SetWindowTextW(m_edit2); }Laut MSDN wird SetWindowTextW anders gahandelt, aber dazu hätt ich eine weitere Frage.
void CTestAppDlg::OnBnClickedOk() { UpdateData(TRUE); CDialog* dlg; dlg->SetWindowTextW(m_edit2); }Nach CDialog dlg;* müßte ich dlg initialisieren.
Aber wie? Laut MSDN wird mit GetItemDlg(IDCNAME) initialisiert, aber ich benötige doch ein Fensterhandle ? Mit "GetItemDlg(IDC_EDIT2)" würde ich den Namen des Fenster in meine Eingabebox stehen haben, aber das soll so nicht sein.
-
Hallo,
für einen Aufruf wie Du das vor hattest ...
CDialog::SetWindowText( _T("DialogName") );... müsste die Methode SetWindowText() statisch sein. Deshalb musst du das so machen wie es in der MSDN steht.
Wenn Du eine Dialog basierte Anwendung angelegt hast, müsste ja irgendwo in deinem Code deine Dialogklasse definiert sein.// Header Datei class CMyDialog:public CDialog { // Datenmember und Methoden // die nächste Zeile wird wohl noch nicht in deiner Klasse stehen, // kannst du aber einfügen ... dazu gleich mehr afx_msg void OnInitDialog(); };Ein guter Punkt um deinen Dialog zu initialisieren wäre die virtuelle Methode OnInitDialog(). Dies ist eine virtuelle Methode der Klasse CDialog, die du in deiner Klasse (im obigen Beispiel CMyDialog) überschreiben kannst. Dort könntest du dann den Dialognamen setzen.
// cpp Datei void CMyDialog::OnInitDialog() { this->SetWindowText( _T( "Mein Dialog Name" ) ); // das this da oben ist im übrigen ein Pointer auf deine Dialog Klasse, was // in deinem angegeben Beispiel aus der MSDN das "dlg" wäre. // dlg->SetWindowText( _T("Dialog Name") ); }Naja ... so oder so ähnlich müsste es gehen.
-
Hallo,
Keydo schrieb:
Ich habe ein kleines Programm(dialog-based).
Welches eine EingabeBox und einen Button hat.Funktion: Ich gebe in meiner Eingabebox einen Namen ein und mit dem klick auf dem Button wird der Titel des Fensters verändert, entsprechend der Eingabe.
1. Frage: Ist das schlecht programmiert wenn ich einfach von der CDialogKlasse die entsprechende Funktion aufrufe?
void CTestAppDlg::OnBnClickedOk() { UpdateData(TRUE); CDialog::SetWindowTextW(m_edit2); }Es ist unüblich und unnötig, die Basisklasse beim Aufruf voranzustellen. Und warum verwendest du SetWindowTextW? Auch hier wird üblicherweise über die Projekteinstellungen gewählt, ob die SetWindowTextW-Funktion aufgerufen werden soll (UNICODE):
void CTestAppDlg::OnBnClickedOk() { UpdateData(TRUE); // wird je nach Projekteinstellung umgewandelt in SetWindowTextA oder SetWindowTextW SetWindowText(m_edit2); }Keydo schrieb:
Laut MSDN wird SetWindowTextW anders gahandelt, aber dazu hätt ich eine weitere Frage.
void CTestAppDlg::OnBnClickedOk() { UpdateData(TRUE); CDialog* dlg; dlg->SetWindowTextW(m_edit2); }Nach CDialog dlg;* müßte ich dlg initialisieren.
Aber wie? Laut MSDN wird mit GetItemDlg(IDCNAME) initialisiert, aber ich benötige doch ein Fensterhandle ? Mit "GetItemDlg(IDC_EDIT2)" würde ich den Namen des Fenster in meine Eingabebox stehen haben, aber das soll so nicht sein.Was hast du hier vor? Den Fenstertitel eines anderen Dialogs (also nicht den von CTestAppDlg ) ändern?
MfG,
Probe-Nutzer