Handle übergeben, Control weg!?!?



  • Servus,

    ich habe mal wieder eine kleine Frage:

    Ich habe 2 Funktionen. Die erste Button (OnChange), die zweite IsStringNumeric. Nun übergebe ich das Handle der Editbox an meine Funktion (IsStringNumeric) bei dem Ereignis OnChange. Durch das handle des Fenster in der Funktion IsStringNumeric, hole ich mir den Inhalt der Editkomponente, lösche Text. Nachdem die Funktion aufgerufen wird ist das Control Edit weg. Ich stehe heute Morgen echt auf dem Schlauch. Vielleicht kann mir dort einer weiterhelfen.

    Ein bisschen Quellcode:

    void CMeinDialog::OnEnChangeEdit()
    {
    	IsStringNumeric(m_ctrEdit.m_hWnd);
    }
    
    void CMeinDialog::IsStringNumeric(HWND hEditCtr)
    {
    CString strEdit;
    int iEditString;
    char cEdit;
    CEdit ctrEditBox;
    
    ctrEditBox.m_hWnd = hEditCtr;
    
    ctrEditBox.GetWindowText(strEdit);
    
    iEditString = strEdit.GetLength();
    	if (iEditString != 0)
    	{
    		cEdit = strEdit[iEditString-1];
    
    		for (int i = 48; i <= 57; i++)
    		{
    			if (cEdit == i ) break;
    			else
    			{
    				if (i == 57) 
    				{
    					ctrEditBox.SetSel(iEditString -1, iEditString, FALSE);
    					ctrEditBox.Clear();
    
    				}
    			}
    		}
    	}
    }
    

    Tja und nach der Funk IsStringNumeric schmeisst er mir das Control weg.
    Ich hoffe mal mir kann jemand weiterhelfen...

    Thx
    Hellsgore



  • Du kannst nicht einfach eine CEdit-Instanz auf dem Stack anlegen und den m_hWnd-Member zuweisen. Wenn diese Instanz zerstört wird, wird das Fenster mit zerstört.

    Du könntest IsStringNumeric einen CEdit*-Parameter mitgeben.

    Oder du könntest mit CWnd::FromHandle an ein CWnd* kommen, dass du dann auf ein CEdit* casten müsstest.



  • Servus,

    danke für deine Antwort ist mir einleuchtend. Aber hast du schonmal versucht eine CWnd* auf eine CEdit* zu casten? kriege ich nicht hin. Ich muss doch irgendwas übergeben können mit dem ich das Control bearbeiten kann.

    Thx
    Hellsgore



  • Hellsgore schrieb:

    Aber hast du schonmal versucht eine CWnd* auf eine CEdit* zu casten? kriege ich nicht hin.

    Wo ist das Problem?

    CEdit* pEdit = static_cast<CEdit*>(CWnd::FromHandle(hEditCtr));
    


  • Ja bin ich denn Banane???
    Das habe ich gerade eben gemacht und er wollte das nicht...
    SAKRA
    naja danke dir aufjedenfall für deine Hilfe. Ich gucke mal was ich da gemacht hatte...

    Thx
    Hellsgore


Anmelden zum Antworten