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


  • Mod

    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?


  • Mod

    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


Anmelden zum Antworten