GetDlgItem liefert keinen Zeiger



  • hallo,

    ich habe in einem Dialog in OnInitDialog folgendes geschrieben um einen Pointer einer Resource zu erhalten:
    ...
    {
    CWnd* pWnd=GetDlgItem(IDC_EDIT_CO);
    if(pWnd != NULL)
    SetNewWnd(pWnd);
    ...
    }

    Wenn ich das ganze debugge, erhalte ich keinen Zeiger auf die Resource ID.
    Kann mir jemand schreiben was hier falsch ist bzw. warum man dort keinen Pointer erhält ? Das einzige was ich mir nur vorstellen kann ist das in OnInitDialog der Dialog mit den Resourcen nicht fertig erstellt ist und somit auch keinen Pointer auf das Feld liefert. Kann das sein ?



  • Hi,

    Ich denke die Steuerelemente sind noch nicht aktiv.

    Wenn Du CDialog::OnInitDialog() als erstes in Deiner überschriebenen
    Klasse aufrufst, sollte es funktionieren,

    Gruß
    Frank



  • GetDlgItem() kann erst dann etwas sinnvolles liefern, wenn das CWnd-Objekt sich sein Fenster zusammengebaut hat (und afaik ist das erst nach dem OnInitDialog()-Aufruf der Fall). Ansonsten stellt sich die Frage, wozu du das benötigst.



  • Danke

    also ich brauche es wirklich nur dafür um einen Pointer auf die Resource zu bekommen um dann mit diesem seine Eigenschaften zu ändern bzw. abzufragen.

    Wie rufe ich denn zuerst OnInitDialog auf bzw. von wo ?



  • Ja halt in deiner Funktion OnInitDialog erst die Funktion der übergeordneten Klasse, also CDialog::OnInitDialog aufrufen. Und dann kannst du den Rest in der Funktion machen ...


  • Mod

    mike2003 schrieb:

    Danke

    also ich brauche es wirklich nur dafür um einen Pointer auf die Resource zu bekommen um dann mit diesem seine Eigenschaften zu ändern bzw. abzufragen.

    Wie rufe ich denn zuerst OnInitDialog auf bzw. von wo ?

    Nicht Du rufst OnInitDialog auf, sondern OnInitDialog wird aufgerufen, wenn der Dialog erzeugt wird.



  • BOOL CMyDialog::OnInitDialog(void) 
    {
        CDialog::OnInitDialog(); // HIER muss das hin ... also vor den restlichen Code in der von dir überschriebenen OnInitDialog ...
    
        CWnd* pWnd = GetDlgItem(IDC_EDIT_CO);
        if (pWnd != NULL)
            SetNewWnd(pWnd);
    
        return TRUE;   // return TRUE unless you set the focus to a control
                       // EXCEPTION: OCX Property Pages should return FALSE
    }
    

Anmelden zum Antworten