Aus dem Hauptformular heraus eine Funktion einer Page eines Tab Controls richtig starten
-
Hallo,
Auf dem Hauptdialog IDD_MainDlg (MainDlg.h, MainDlg.cpp) liegt ein Tab Control (TabDaten.h, TabDaten.cpp) mit der Page IDD_PageWerteDlg (PageWerteDlg.h, PageWerteDlg.cpp).
Auf der Page IDD_PageWerteDlg befinden sich ca. 80 Textfelder für die Ein/Ausgabe von Daten und speichert diese in dem Array "Werte[ProgNr][WertNr]".
Der erste Index des Arrays steht für eine Programmnummer.
Die Eingabe der Programmnummer erfolgt über das Textfeld ProgNr aber auf dem Hauptdialog IDD_MainDlg.
Hierzu meine Frage: eine OnUpdateEdit_ProgNr kann ja nur in der MainDlg.cpp erfolgen - hiermit könnte ich eine static Funktion der PageWerteDlg.cpp zum Aktualisieren der Textfelder aufgerufen - jetzt bekomme ich aber in dieser static Funktion bei > SetDlgItemText(IDC_EDIT_Wert_1, value_1); < die Fehlermeldung "Ein nicht statischer Memberverweis muss relativ zu einem bestimmten Objekt sein."Wie kann man dieses am besten Lösen?
Ersuche um eure Hilfestellung.
Vielen Dank - Grüße, Sati
-
SetDlgItemText ist nicht statisch und benötigt aus der CWnd Klasse den m_hWnd Member.
-
die statische Funktion für "SetDlgItemText(IDC_EDIT_Wert_1, value_1);" habe ich wie folgt verändert:
void CPageWerteDlg::TestStaticFunction() { HWND m_hWnd = GetForegroundWindow()->GetSafeHwnd(); ::SetDlgItemText(m_hWnd, IDC_EDIT_Wert_1, "3"); // Zur Kontrolle rücklesen TCHAR str_Spinwert[6]; ::GetDlgItemText(m_hWnd, IDC_EDIT_Wert_1, str_Spinwert, 5); }
In der TextBox wird aber nichts angezeigt - auch der Rücklesewert str_Spinwert hat den Ihalt "0".
Was mache ich falsch?
-
Wieso glaubst, Du dass Dein Foreground Window bitte Dein Dialog ist?
Nochmal: Warum brauchst Du bitte eine statische Funktion?
-
Wie folgt umgebaut und es funktioniert:
Statische Funktion raus => aus "static void CPageWerteDlg();" wurde wieder "void CPageWerteDlg();".
In dieser Funktion von SetDlgItemText(IDC_EDIT_Wert_1, buffer) auf ::SetDlgItemText(Global::m_hWnd_Daten, IDC_EDIT_Wert_1, buffer) umgestellt,
und im OnInitDialog() mit "m_hWnd = GetSafeHwnd();" den handle geholt.Grüße