Eingabefokus erhalten



  • Hallo!

    Ich habe eine MDI-Anwendung erstellt, die unterschiedliche Objekte (z.B. Diagramm, Graphik, Tabelle) innerhalb einer Ansicht (View) darstellt. Ähnlich wie z.B. MathCad. Damit man diese Objekte bearbeiten kann (Verschieben, Größe ändern usw.), wird, sobald der Nutzer auf das Objekt klickt ein Childwindow erstellt und das jeweilige Objekt in diesem neuen Fenster gezeichnet.
    Also ein Beispiel:
    Meine Ansicht

    CMeinProgrammView::OnDraw(CDC* pDC)
    

    zeichnet u.a. ein Diagramm. Der Nutzer klickt dann mit der Maus auf das Diagramm um es zu bearbeiten. Dafür wird ein neues Fenster erstellt. Es gibt dafür die Klasse

    CDiagrammFenster : public CWnd
    

    .
    Das Fenster erstelle ich in einer Memberfunktion meiner Ansicht

    CMeinProgrammView::OnLButtonDown(...)
    {
       ...
       //wenn im Diagrammbereich dann Fenster öffnen
       pDiagrammFenster->Create(NULL,NULL,WS_CHILD | WS_VISIBLE,CRect(..),this,1);
       //this ist der Zeiger auf die Ansicht, damit es ein Childwindow wird
       //das Fenster besitzt keinen Rand und auch keine Überschrift, damit es wie
       //ein Steuerelement aussieht
       ...
    }
    

    Letztendlich soll es eine Art eigenes Steuerelement werden.

    In meinem Bearbeitungsfenster für das Diagramm kann ich nun mittels Methoden auf Mausklicks reagieren und das Diagramm bearbeiten.

    Mein Problem ist nun folgendes: Das Fenster reagiert nicht auf Tastatureingaben, weil es den Eingabefokus nicht hat. Die Funktion

    SetFocus();
    

    oder auch

    SetActiveWindow()
    

    funktioniert aber nicht. Was muß ich tun damit Tastatureingaben auch in meinem neuen Fenster ankommen und nicht nur in der Ansicht? 😕

    Vielen Dank schon mal im voraus auf Eure zahlreichen Antworten. 🙂



  • Aha, hast also das implementiert, was über OLE (ActiveX)-Container schon geht .. gute Übung ;o)

    Hm, also bei mir ging das immer, hab das bisher zwar nur mit CEdits gemacht, aber die hatten dann den Focus



  • Ja ich weiß, das das mit ActiveX und OLE usw. schon immer ging und geht. Aber ActiveX ist auch nicht ohne Aufwand und ich kenne mich damit auch nicht aus. Vielleicht stricke ich meine Variante ja auf ActiveX um.
    Die Frage war aber, wie bekomme ich die Tastatureingaben in mein Fenster?
    Falls es mit ActiveX Containern und Servern usw. überhaupt nur geht, bliebe mir nichts anders übrig.



  • Was ist denn pDiagrammfenster überhaupt für ein Fenster?
    Prinzipiell sollte es gehen, wie ich schon sagte, möglicherweise musst Du ne andere Fenster-ID nehmen



  • OK, habe noch mal ein wenig Herumprobiert. Die Fkt. SetFocus() funktioniert schon, nur sieht man es dem Fenster nicht an ob es den Fokus hat oder nicht, auch dann nicht, wenn es eine Überschrift (Caption) hat. Eine Darstellung des Fokus müßte man dann selbst programmmieren. 🕶
    PS: der Zeiger pDiagrammFenster ist vom Typ CDiagrammFenster und dieses ist von CWnd abgeleitet. CDiagrammFenster ist das Fenster, in dem, wie in meinem Beispiel, das Diagramm bearbeitet werden kann.


Anmelden zum Antworten