Aktivierung der Controlls mit der Tab-Taste



  • Hallo.

    In einem Dialog kann man ja den Fokus der Controlls mit Hilfe der Tabtaste wechseln. Das funktioniert bei mir allerdings nicht wenn der Dialog sich in einer DLL befindet. Der Dialog wird von einer .exe aus aufgerufen. Befindet sich aber in einer DLL. Bei Dialogen die sich in der .exe befinden funktioniert es Problemlos. Auch das neu setzen der Aktivierreihenfolge in Visual Studio erbrachte kein Erfolg. Woran liegt das?


  • Mod

    An der Message Loop und das IsDialgMessage nicht ausgeführt wird.

    Siehe:
    http://blog.m-ri.de/index.php/2008/07/04/mfc-fenster-in-anderen-applikationen-verwenden/



  • Aha. Leider weiß ich nun so viel wie vorher. Die Frage vieleicht anderes formuliert: Wie löse ich das Problem auf einfache weise.


  • Mod

    1. DLLs mit eigener Message-Loop integrieren.
    2. Wenn Du Owner des Programmes bis, die MFC in Shared DLL verwenden.

    Ansonsten steht alles in meinem Artikel. Inkl. Lösung Hook.



  • Freut mich dass Du dich so toll auskennst. Es wäre aber net wenn man das einem Anfänger einfacher z.B. an einem Beispiel erklären würde.


  • Mod

    hottehüh schrieb:

    Freut mich dass Du dich so toll auskennst. Es wäre aber net wenn man das einem Anfänger einfacher z.B. an einem Beispiel erklären würde.

    Was willst Du?
    Du schmeisst ein Problem rüber ohne zusagen was für eine DLL EXE und so weiter es ist. Ansonsten werden Dir die Antworten gegeben.

    Schön, dass Du Anfänger bist!
    Woher soll ich das wissen? Stand das in Deiner Frage?

    Wenn Du in Bereiche reinkommst die etwas komplexer werden, dann werden auch die Antworten komplexer. Coden muss man schon selber.
    Wenn Du Antworten bekommst, die Du nicht verstehst, dann Frage was Dir zu hoch ist und meckere nicht rum, dass der doofe Antwortgebende sich nicht genügend mit dem armen Anfänger beschäftigt hat...

    Es gibt nicht für alles ein Sample. Vor allem weil Du immer noch viel zu wenig Infos rüber wirfst. Zudem enthält auch mein Artikel wieder einen Link auf einen KB Artikel, der sehr wohl genau erklärt wie es gehen kann.

    Sofern es denn notwendig ist.

    Nochmal zum Thema: Wenn Deine EXE und die DLL beide die MFC als shared DLL verwenden hast Du kein Problem.
    Weiterhin stehen die Grundlagen auch hier in der MSDN (siehe IsDialogMessage).

    PS: Ja ich kenne mich ziemlich gut as, und ich beantworte seid Jahren in Foren Anfragen. Wenn es Dich meine Antworten stören, werde ich Dich weiterhin einfach ignorieren.
    OK?



  • Nicht gleich so gereitzt reagieren.

    Bisher hatte ich die Einstellung auf "MFC in einer gemeinsam genutzten DLL verwenden" aber aus einem bestimmten Grund musste ich auf statisches linken umstellen. Nichts desto trotz hat es auch vorher nicht funktioniert. Wieso auch immer.

    Habe einfach noch nichts von "WH_GETMESSAGE Hook" gehört und weiß nicht was ich damit machen soll.


  • Mod

    hottehüh schrieb:

    Nicht gleich so gereitzt reagieren.

    Warum nicht?
    Ich finde diese Art von Dir vermessen. Und darf man sich über solche Kommentare nicht mehr aufregen?

    "Gib Code rüber Alter, Erklärungen kannst Du Dir sparen!"
    "Vorsicht ich bin Anfänger, deshalb müsst IHR mir den Code schreiben, sonst bin ich sauer" 👎
    "Ich kenne Ctrl+C und Ctrl+V, jetzt helft mir gefälligst, dass ein Programm dabei rauskommt."

    Bei Postings wie Deinen frage ich mich immer wieder warum ich überhaupt noch Hinweise gebe.

    hottehüh schrieb:

    Bisher hatte ich die Einstellung auf "MFC in einer gemeinsam genutzten DLL verwenden" aber aus einem bestimmten Grund musste ich auf statisches linken umstellen. Nichts desto trotz hat es auch vorher nicht funktioniert. Wieso auch immer.

    1. Was für eine DLL hast Du denn verwendet? Extension/Standard?
    2. Warum musstest Du auf statisches Linken umstellen? Weil Du keine DLLs ausliefern willst. IMHO ein schlechter Grund, wenn Du selber schon DLLs baust.

    hottehüh schrieb:

    Habe einfach noch nichts von "WH_GETMESSAGE Hook" gehört und weiß nicht was ich damit machen soll.

    1. Alleine die Eingabe dieser Stichworte in Google bringt mich sofort zu:
    http://msdn.microsoft.com/en-us/library/ms644959(VS.85).aspx
    2. In meinem Artikel ist ein Link:
    http://support.microsoft.com/kb/194294/en-us

    Gelesen? Ich tippe mal "Nein"! Der Artikel besteht zu 50% aus Code und einer schrittweisen Anweisung wie man vorgeht...



  • 1. Reguläre DLL

    2. Ist es wichtig wieso ich auf statisches Linken umstellen musste.
    Ist halt firmenbedingt vorgegeben. Kann ich auch nichts machen. Ich denke halt immer ich gebe die Informationen weiter die das Problem direkt betreffen. Und nicht Dinge die nebensächlich sind.



  • Oft sind die nebensächlichen Dinge entscheidend 😉


  • Mod

    Statisches Linken bedeutet für Dich:
    Hook als Lösung, wenn es sich um einen nicht modalen Dialog handelt.

    Punkt! Warum das so ist, steht in meinem Blog!

    PS: Manche firmen interen Entscheidung basieren auf falschen Grundlagen, weil schnell eine schnelle Lösung gesucht wurde... Sie selbst gehören auf den Prüfstand.



  • Ok. Habe nun mal Testweise wieder auf "MFC als shared DLL verwenden" umgestellt. Leider funktioniert das mit der Tab-Taste trotzdem nicht.


  • Mod

    EXE und DLL?



  • Ja Exe und DLL und auch die Libs die zur DLL dazugehören.


  • Mod

    Und alle beteiligten DLLs,EXEs benutzen die MFC jeweils gemeinsam als Debug/Release Version?
    Und Dein modaler Dialog ist von CDialog abgeleitet?



  • Und alle beteiligten DLLs,EXEs benutzen die MFC jeweils gemeinsam als Debug/Release Version?

    Ja

    Und Dein modaler Dialog ist von CDialog abgeleitet?

    Mein Dialog ist von CDialog abgeleitet aber nicht Modal!



  • Hast Du dann in Deiner MessageLoop ein "IsDialogMessage" drin?



  • Nein



  • Nun, sach mal, hottehüh:

    Jochen Kalmbach schrieb:

    Hast Du dann in Deiner MessageLoop ein "IsDialogMessage" drin?

    hottehüh schrieb:

    Nein

    Wofür schreiben wir für Dich die Tasten wund?
    Der allererste Poster (Martin Richter) der auf Deine Frage antwortete hat goldrichtig vermutet, daß IsDialogMessage() fehlt:

    Martin Richter schrieb:

    An der Message Loop und das IsDialgMessage nicht ausgeführt wird.

    Siehe:
    http://blog.m-ri.de/index.php/2008/07/04/mfc-fenster-in-anderen-applikationen-verwenden/

    (Ok, wir dürfen Martin Richter vielleicht an den Pranger stellen, daß er zukünftig die Tippfähler zu vermeiden hat 😃 )

    Warum greifst Du unsere Hinweise nicht auf? Und notfalls mit den neu dazugelernten Stichworten weiterrecherchieren?

    Andererseits schreibst Du, daß irgendwelche Vorgaben firmenbedingt vorgegeben sind.
    Das müssen doch diejenige gemacht haben, die zumindestens irgendetwas programmiert haben, oder nicht.
    Und Du als selbsternannter Anfänger hast in der Firma keinen fähigen Ansprechpartner?
    Ehrlich gesagt, das klingt für mich ein wenig unglaubwürdig.

    Nix für ungut, wir wollen Dir weiterhin helfen, aber ein wenig mehr Eigeninitiative von Dir wünschen wir uns schon
    Martin


Anmelden zum Antworten