Öffnen der Menüleiste mit F10 deaktivieren
-
Moin,
der Titel sagt es schon. Wie kann ich es unterdrücken, dass sich mit F10 die Menüleiste im Dialog öffnet? Wollte die Tasten von F9-F12 für eigene Funktionen im Programm nutzen, aber jetzt muß ich F10 immer 2mal drücken damit die Funktion ausgelöst wird
LG
-
WM_KEYDOWN abfragen und pruefen ob f12 gedrueckt wurde, wenn ja delegier an deine funktion weiter
amsonsten schau mal was in der accelerator definiert ist
-
Ist F10 nicht MW_SYSKEYDOWN?
Naja, bei mir sieht es in der PreTranslateMessage so aus:
if ((pMsg->message == WM_SYSKEYDOWN) && (GetKeyState(VK_F10) & 0x8000)) { // tu was... return FALSE; }
-
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 dasreturn 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
-
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
-
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.
-
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)) {
-
1!=10 <duck&wech>
-
<KnueppelHinterherWerf>