Öffnen der Menüleiste mit F10 deaktivieren



  • Muß ich dann einfach PreTranslateMessage in meinem Dialog überschreiben und bei VK_F10 TRUE zurück geben, bzw meine Funktion aufrufen ?



  • IUnknown schrieb:

    Muß ich dann einfach PreTranslateMessage in meinem Dialog überschreiben und bei VK_F10 TRUE zurück geben, bzw meine Funktion aufrufen ?

    Nein, da wo "tu was" steht, rufst du deine Funktion auf.
    Und wenn du nix getan hast bzw. das Verhalten der Basisklasse willst, dann rufst du die Basisklasse auf.
    Bei mir ist das

    return CFrameWnd::PreTranslateMessage(pMsg);
    

    Und gib FALSE zurück, steht doch da. Aber du merkst schon, wenn du Murks machst, dann spinnt u.U. der ganze Dialog. :p



  • OK funktioniert soweit 🙂 Allerdings wird trotzdem bei F1 die Standard-Funktion ausgeführt wenn ich die Taste drücke... Beispiel:

    BOOL CTest1Dlg::PreTranslateMessage(MSG *pMsg) {
      if ((pMsg->message == WM_SYSKEYDOWN) && (GetKeyState(VK_F10) & 0x8000)) {
        MessageBox(_T("Hier hat wer F10 gedrückt."));
        return FALSE;
      }
      if ((pMsg->message == WM_KEYDOWN) && (GetKeyState(VK_F1) & 0x8000)) {
        MessageBox(_T("Und hier F1"));
        return FALSE;
      }
      return CDialog::PreTranslateMessage(pMsg);
    }
    

    Wenn ich TRUE statt FALSE zurück gebe, kommt bei F10 nicht die Menüleiste, bei F1 aber trotzdem die Hilfe -.-



  • In der CTest1.cpp

    BEGIN_MESSAGE_MAP(CTest1, CWinAppEx)
    	//ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
    END_MESSAGE_MAP()
    

    Turmfalke64


  • Mod

    Warum hast Du bitte eine Dialog basierende Anwednugn gebaut und der ein Menü verpasst?

    Warum baust Du nicht eine CFormView Anwednung? Die hat einen Accelerator der Du ganz einfach die enstprechenden Funktionstasten angeben kannst inkl. WM_COMMAND Id.

    Ich verstehe diesen extremen Hang zu dialogbasierenden Anwednungen nicht, wenn es doch Menüs Toolsbars und sonst was geben soll...



  • IUnknown schrieb:

    OK funktioniert soweit 🙂 Allerdings wird trotzdem bei F1 die Standard-Funktion ausgeführt wenn ich die Taste drücke... Beispiel:

    BOOL CTest1Dlg::PreTranslateMessage(MSG *pMsg) {
      if ((pMsg->message == WM_SYSKEYDOWN) && (GetKeyState(VK_F10) & 0x8000)) {
        MessageBox(_T("Hier hat wer F10 gedrückt."));
        return FALSE;
      }
      if ((pMsg->message == WM_KEYDOWN) && (GetKeyState(VK_F1) & 0x8000)) {
        MessageBox(_T("Und hier F1"));
        return FALSE;
      }
      return CDialog::PreTranslateMessage(pMsg);
    }
    

    Wenn ich TRUE statt FALSE zurück gebe, kommt bei F10 nicht die Menüleiste, bei F1 aber trotzdem die Hilfe -.-

    du prüfst einmal gegen WM_SYSKEYDOWN und das funktioniert, bei dem anderen pruefst du gegen WM_KEYDOWN und das geht nicht
    nun dafst du mal raten wo das problem liegt {o;

    aber wie schon mehrfach gesagt wurde, check vorher erstmal eine accelerator


  • Mod

    Und warum verwendest Du GetKeyState und nicht wParam?



  • @ Martin: Weil das im Code von estartu stand und ich habs mal für mein Quote so übernommen. Nehme sonst auch wParam.
    Ich arbeite auch noch nicht lange mit der MFC, hab also einfach den Wizard für nen Dialog genommen und da war nunmal das Menü mit bei 🙂

    @ Mr Evil: Vielleicht ist der Zaunpfahl zu klein, aber ich komm nicht dahinter 🙂

    @ Turmfalke: danke 🙂



  • Martin Richter schrieb:

    Und warum verwendest Du GetKeyState und nicht wParam?

    Und ich hatte an der Stelle mal wparam und das zickte rum.


  • Mod

    estartu schrieb:

    Martin Richter schrieb:

    Und warum verwendest Du GetKeyState und nicht wParam?

    Und ich hatte an der Stelle mal wparam und das zickte rum.

    Kann ich mir schwer vorstellenen... Außer Du möchtest währned einer Nachricht noch zusätzlich z.B. prüfen ob die Strg/Umschalt-Taste gedrückt ist. Dann benutzte ich das auch...



  • IUnknown schrieb:

    @ Mr Evil: Vielleicht ist der Zaunpfahl zu klein, aber ich komm nicht dahinter 🙂

    Probieren wir es mal wie bei einem spiel fuer kinder
    Finde den unterschied:

    if ((pMsg->message == WM_SYSKEYDOWN) && (GetKeyState(VK_F10) & 0x8000)) {
    if ((pMsg->message == WM_KEYDOWN   ) && (GetKeyState(VK_F1 ) & 0x8000)) {
    

  • Mod

    1!=10 <duck&wech>



  • <KnueppelHinterherWerf>


Anmelden zum Antworten