Fokus setzen...PreTranslateMessage



  • Hallo,
    in der PreTranslateMessage eines Unterdialogs überprüfe ich welches Steuerelement momentan aktiv ist und zeige dementsprechend Hinweise an.

    Dieser Unterdialog wird folgendermaßen aufgerufen:

    case DATA_LINK:
    		// Dialog anzeigen
    		m_pDataLink->SetParent(m_pKonfigDlg);
    		m_pDataLink->ShowWindow(SW_SHOW);
    
    		// Membervariablen initialisieren ( aus Struktur )
    		m_pDataLink->ReadIniEntries( m_pEinstellungenIni);
    
    		// Dialog anpassen nachdem Werte aus Struktur gesetzt wurden (Chkbox, Combo,...)
    		m_pDataLink->SetUpdateView();
    
    		// als aktives Fenster setzen
    		m_pDataLink->SetActiveWindow();
    
    		// Focus in Dialog setzen setzen
    		m_pDataLink->GetDlgItem(IDC_RADIO_CAN)->SetFocus();	
    		break;
    

    Mit der letzten Zeile setze ich den Fokus auf ein bestimmtes Steuerelement und möchte das dies dann auch AKTIV ist und über die PreTranslateMessage auch der Hinweis für DIESES Element angezeigt wird.

    Die Fokus-Zuweisung funktioniert bei allen Elementtypen....allerdings wird nur bei Chk-Boxen die PreTranslateMessage aufgerufen und der Hinweis richtig gesetzt.

    Wie schaffe ich das auch bei CEdits, RadioButtons, etc.??? 😕

    Danke schonmal.

    Gruss
    S.



  • welche Funktionen/Messages lösen denn den Aufruf der PreTranslateMessage aus? 😕
    Wie schaffe ich es diese Fkt gewollt aufzurufen?

    Danke.

    Gruss
    S.



  • Stefan H schrieb:

    welche Funktionen/Messages lösen denn den Aufruf der PreTranslateMessage aus? 😕

    Alle? 😕

    Wie schaffe ich es diese Fkt gewollt aufzurufen?

    Eine Nachricht an das Fenster schicken?

    Wie machst du denn den Hinweistext? Kannst du das nicht in eine eigene Funktion packen und extra aufrufen? 🙂



  • Nein, nur für Nachrichten die aus der Message Queue kommen wird PreTranslateMessage aufgerufen.
    Also WM_SETFOCUS würdest du z.B. nicht bekommen weil diese Nachricht direkt an das Fenster gesendet wird.



  • Hallo,
    ich fange ja in der PreTranslateMessage sowohl WM_MOUSEMOVE als auch diverse Tastendrück ab. Je nachdem wo sich der Mauszeiger befindet oder welches Element gerade aktiv ist wird dann der Hinweis ausgegeben.
    Von daher macht es ja schon Sinn das ganze in der PreTranslateMessage zu verarbeiten.

    Jetzt möchte ich aus einem Doc heraus einen Unterdialog anzeigen lassen und den Fokus einem bestimmt Steuerelement zuweisen....was dann eigentlich auch die PreTranslateMessage aufrufen und den Hinweis zum FOKUSIERTEN Element anzeigen sollte.
    So weit die Theorie.....aber in der Umsetzung fehlts halt noch.

    Wenn es mit SetFocus() nicht klappt, was kann ich denn noch machen?!?
    Irgendeine Idee?

    @msg
    Message Queue? Welche sind das, bzw. wo finde ich die? Sind das die im Assistenten? Sorry, aber der Begriff sagt mir nichts. 🙄

    Danke.

    Gruss
    S.



  • msq schrieb:

    Nein, nur für Nachrichten die aus der Message Queue kommen wird PreTranslateMessage aufgerufen.
    Also WM_SETFOCUS würdest du z.B. nicht bekommen weil diese Nachricht direkt an das Fenster gesendet wird.

    Die geht ja auch eher "am Dialog vorbei". Aber alle Nachrichten, die das Fenster empfängt müssten imho in PreTranslateMessage "ankommen".



  • CWnd::PreTranslateMessage

    Used by class CWinApp to translate window messages before they are dispatched to the TranslateMessage and DispatchMessage Windows functions.


Anmelden zum Antworten