Werte an ein Dialog übergeben



  • Hallo,
    wenn ich in meiner MFC Anw. ein Btn klicke dann wird ein Dialog nicht-modal geöffnet:

    CDialog* pDialog; 
    pDialog = new CDialog(); 
    pDialog->Create(IDD_BOOTDIALOG,this);
    pDialog->ShowWindow(SW_SHOW);
    

    In diesem Dialog welches nichtmodal geöffnet wird befindet sich ein Textfeld. (m_textbox)
    Nun möchte ich, dass wenn ich im Hauptdia ein Button klicke, über dieses textfeld im nicht-modal geöffneten Dialog etwas ausgegeben wird.
    Kann mir jemand helfen?
    Danke!!
    gruß



  • Du kannst z.b. mit Hilfe des Assistenten eine Membervariable für Dein Textfeld anlegen (m_textbox ??). Diese Variable wird vom Assistenten Automatisch im Public bereich angeleget und kann vom Main Dialog verändert werden. UpdateData nicht vergessen...

    gruss
    Marcus



  • mein problem ist:

    ich will auch steuerelemente im hauptdialog ändern, aber mit einer Fkt ausserhalb der klasse,welche aber auch nicht element einer anderen klasse ist. geht das? ich denke, ich muss wohl einen zeiger auf das hauptdialogfeld erzeugen bzw erfragen und somit auf die member-variablen der Hauptdialogklasse zugreifen zu können. aber bisher leider kein erfolg, hier die vereinfachten codeschnippsel:

    CSoundModul DirectSoundObjekt;
    BOOL CMainDlg::OnInitDialog() // 
    {...
    DirectSoundObjekt.SoundInit(this, m_hWnd);// zeiger und Handle des Haupt-Fensters übergeben
    ...
    }
    
    bool CSoundModul::SoundInit(CWnd *pWnd, HWND hwnd)
    {...
    DirectSoundEnumerate((LPDSENUMCALLBACK) DSEnumCallback,*pWnd);// zeiger des Fensters weiterreichen, steht dann als lpContext zur verfügung!
    ...
    }
    
    bool  CALLBACK DSEnumCallback(LPGUID lpGuid, LPCTSTR lpcstrDescription,	LPCTSTR lpcstrModule, LPVOID lpContext)
    {
    CMainDlg  *pWnd =(CMainDlg*)lpContext;
    pWnd->m_strDriverModul="TEST"; // Membervariable ist mit Steuerelement verknüpft!
    pWnd->UpdateData(FALSE);
    
    return true;
    }
    

    naja, anscheinend übergebe ich den falschen zeiger, oder? aber keine ahnung, wie s richtig geht 😕 hilfe!!



  • mhh..das mit dem this-zeiger is natürlich quatsch oder`? der gibt mir ja nen pointer auf das DirectSoundObjekt. ich brauch nen zeiger auf mein Hauptdialogfeld. mhh....mit GetParent() gehts auch ned. verdammt! 😡



  • @spru
    this sollte eigentlich Ok sein Du befindest Dich in dieser Funktion ja im Namensspace des Main Dilaogs "CMainDlg::".

    In Deinem Code stimmt denke ich die Übergabe des pWnd nicht

    DirectSoundEnumerate((LPDSENUMCALLBACK) DSEnumCallback,*pWnd);//

    mit *pWnd übergibst Du nicht den Zeiger sondern den Inhalt des Zeigers, pWnd ist schon ein Zeiger und wird in dem Fall direkt mit "pWnd" übergeben nicht "*pWnd".

    Gibt es eigentlich eine Fehlermeldung des Compilers oder was funktioniert konkrett nicht ?

    Reden wir hier eigentlich über 2 Probleme 1x von dArIcO und 1x von spru oder wie ? 🙂

    gruss
    Marcus



  • juhu, es klappt!! die übergabe des zeigers war, wie du schon gedacht hast, quatsch! so ists richtig:

    DirectSoundEnumerate((LPDSENUMCALLBACK) DSEnumCallback,pWnd);//
    

    kompiliert hat er immer ganz brav, aber beim aufruf der member-fkt hats gecrasht :p

    und warum 2 probleme in einem thread? sparen, wir müssen doch alle sparen!! 👍

    gruß spru



  • schön wenns nun *tuentut* 🙂

    2 probleme in einem thread, beinahe wäre ich durcheinander gekommen 😉

    gruss
    Marcus


Anmelden zum Antworten