Editbox in anderes Fenster einbinden



  • Hallo,

    ich habe nun eine ganze Reihe probiert aber irgendwie funktioniert es nicht.

    Es geht um folgendes, ich ahbe eine DLL (mit MFC Unterstützung) in C++ (VS 6.0) für eine Anwendung (welche in VB6 geschreiben ist) geschrieben, auf die ich allerdings keinen Einfluss habe, diese übergibt mir das aktuelle Handle und WindowDC als int Wert.

    Leider klappt das mit folgenden Code nicht, die Anwendung stürzt bei aufrufen der Create Anweisung ab

    CWnd* x=new CWnd 
    
    CEdit* pEdit = new CEdit;
       pEdit->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,
    	   CRect(10, 10, 100, 100), x->GetWindow(WindowHandle), 1);
    

    Habe ich es mir vielleicht zu leicht gemacht? Ich bin für jede Idee dankbar 🙂



  • Meine Idee: Falsches Subforum.



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Schau dir lieber die Methode CWnd::FromHandle an und lass dir damit einen Zeiger auf ein Gültiger Windows_Object erstellen. Des weiteren kann das was du da erstellt hast gar nicht funktionieren, da du das CWnd-Object erzeugst aber nicht mit Create initialisierst, also zeigt x auf eine erzeugte aber uninitialisierte structur, was natürlich dann beim Aufruf von GetWindow(), was eh nicht dass macht was du willst, an die Wand fliegt.



  • Vielen Dank CTecS, hat mir sehr geholfen. Hier die funktionierende Lösung falls jemand ein ähnliches Problem mal hat:

    CWnd* x=CWnd::FromHandle((HWND)WindowHandle);
    
    CEdit* pEdit = new CEdit;
       pEdit->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,
    	   CRect(10, 10, 100, 100), x, 1);
    


  • Wobei mir dein Source immer noch nicht gefällt, denn das CEdit erstellst du mit new aber merkst dir den Zeiger nicht, wo und wie entsorgst du dann dein CEdit wieder?

    Genau so gut könnte dein Cedit auch ein Member der Klasse sein, du brauchst kein new und das entsorgen geht auch automatisch



  • Hmm aber wenn ich einfach

    CWnd* x=CWnd::FromHandle((HWND)WindowHandle); CEdit Edit; Edit.Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, CRect(10, 10, 100, 100), x, 1);
    

    oder eine von CEddit abgeleitete Klasse (mit Membervariable) ...

    CWnd* x=CWnd::FromHandle((HWND)WindowHandle); DEdit Edit; Edit.m_test.Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, CRect(10, 10, 100, 100), x, 1);
    

    benutze, wird kein Element auf dem Fenster erzeugt



  • Sorry da ist mir was mit der Anzeige verrutscht, hier nochmal der Quellcode

    CWnd* x=CWnd::FromHandle((HWND)WindowHandle);
    CEdit Edit;
    Edit.Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, CRect(10, 10, 100, 100), x, 1);
    
    CWnd* x=CWnd::FromHandle((HWND)WindowHandle);
    DEdit Edit;
    Edit.m_test.Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, CRect(10, 10, 100, 100), x, 1);
    


  • Wenn dann muß schon der CEdit ein Member deiner Klasse sein also im Header-File deiner klasse sein oder zumindest der Zeiger auf CEdit, damit du diese im Destructor wieder mit Delete frei geben kannst.



  • Öhm welche Klasse?

    An sich besteht fast alles aus einfachen Funktionen die exportiert werden.


  • Mod

    mounty schrieb:

    Öhm welche Klasse?

    An sich besteht fast alles aus einfachen Funktionen die exportiert werden.

    Dann hast Du ein Problem: Wo speicherst Du die Zeiger auf die Objekte. Wer entsorgt diese?


Anmelden zum Antworten