Tab bewirkt nichts



  • Heiho

    Ich habe meine Fensterklasse, diese subclasst eine Editbox klasse, sodass ich nur beim OnCreate() ein m_ebElement.Create(..) machen muss

    funktioniert alles wunderpraechtig..

    im create uebergebe ich nur die position, die id, das parent und den titel
    in der editklasse habe ich die styles stehen

    nu hab ich hier mehere editboxen welche ich mit tab durchspringen kann
    ich habe auch nach googlen gelesen das ich WS_TABSTOP und WS_GROUP hinzufuegen soll, aber das bringt mich bisher zu keinen erfolg
    wenn ich in der ersten box bin und tab drueck passiert nichts

    wie kann ich das nu realisieren ?

    ich habe uebrigens auch eine SetFocus methoden in der editklasse - evtl kann ich mit der was machen



  • Kann es sein, daß die WM_CHAR-Nachricht der Subclass-Prozedur mit wParam = VK_TAB nicht CallWindowProc(orgproc) erreicht?



  • die edit subklasse behandelt gar keine nachrichten - alle messages werden weiterhin in der main klasse von dem fenster bearbeitet

    zb habe ich eine funktion die nennt sich

    OnChangeEditElemName()

    diese fang ich ab mit
    WM_COMMAND: EDIT_ID

    diese funktion wird stets aufgerufen sobald ich eine taste drueck in der editbox, das bedeutet fuer mich das alle aktionen in der box der main klasse bekannt gemacht werden

    also die message das ich in der box was aendere wird bearbeitet - aber ein TAB zur naechsten box funktioniert nicht



  • Dann ist wahrscheinlich das Parentfenster des Edit-Steuerelements kein Dialog. Der Dialogmanager nämlich dahinter regelt das Springen von einem Tabstop zum anderen. Bei einem "normalen" Fenster hilft nur selber programmieren.



  • ne das ist richtig, es ist kein dialog, ich hab nur drei dialoge, diese sind aber not hilfs - settings dialoge usw, es geht um das hauptfenster selber,

    ich braeuchte n schubs wie ich das progggen koennte

    jedes edit feld ist mit einen "SetFocus" ausgestattet - ich frag mich nur wie ich erfahre welches feld denfocus hat und wie ich auf den naechsten komm



  • hab bis eben rumprobiert, ich bekomm das WM_KEYDOWN nur wenn ich den focus nach programm starte nicht veraender, aber sobald ich in eine editbox klick werden alle tasteneingaben messages nicht zum main fenster weitergeleitet - in Spy++ muss ich child windows mit aktivieren um die messages zu sehen - aber abfangen kann ich diese nicht

    wie komm ich an die messages ?

    ich hab wie gesagt nur das OnChange - also sobald was geaendert wird - aber in dieser OnChange funktion kann ich bereits holen was in der box eingegeben wurde - aber ueber die info was zuletzt gedrueckt wurde erfahr ich nichts /=

    so wie es aussieht bekomm ich keine messages von der editbox zu dem main fenster, ausser das etwas geaendert wurde welches dann bei wm_command landet



  • Es liegt alles an deiner Message-Loop.

    while( GetMessage(&msg, NULL, 0, 0) )
         {
            if( !IsDialogMessage(g_hMainWindow, &msg) )// <--- WICHTIG!!!
            {
               TranslateMessage(&msg);
               DispatchMessage(&msg);
            }
         }
    


  • bisher habe ich dieses hier:

    while(GetMessage(&msg, NULL, 0, 0)){
        if(!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    

    dein verdacht scheint richtig zu sein, werde es morgen mal testen - vielen dank dafuer {=



  • Männer machen alles ganz ganz genau:

    Win32 Programmer's Reference schrieb:

    BOOL GetMessage(...

    If there is an error, the return value is -1. For example, the function fails if hWnd is an invalid window handle.

    Deshalb:

    while(GetMessage(...) > 0))
    


  • vielen dank - genau das wars, nun kommen alle messages beim parent an - fein fein {=


Anmelden zum Antworten