Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Accelerator Table? Wie unterscheide ich.

Empfohlene Antworten

Veröffentlicht

So, ich nochmal, gibet irgendeine möglichkeit, einen tastendruck abzufangen und dann zu unterscheiden, ob die rechte Entertaste oder die in der Mitte gedrückt wurde? Accelerator hilft mir da net so viel oder?

Naja, also für die beiden Entertasten gibt es nur eine

Virtualkey-Konstante: VK_ENTER.

Deswegen kannst du für die beiden Tasten nicht

unterschiedliche Acceleratoen definieren.

Aber es gibt trotzdem eine Möglichkeit, zwischen den Tasten

zu unterscheiden :D, und zwar in der Fensterprozedur.

Du reagierst in der Fensterprozedur auf die Nachricht

WM_KEYDOWN. Dort überprüfst du, ob wParam == VK_ENTER. Wenn das der Fall ist, schaust du, ob im lParam das Flag KF_EXTENDED gesetzt ist. Ist auch dies der Fall, so handelt es sich um die "erweiterte" Enter-Taste, also die

im NumPad-Block.

Nochmal als Quellcode:


LRESULT WINAPI WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)

{

    switch (Msg)

    {

    //...

    case WM_KEYDOWN:

        if (wParam == VK_ENTER)

        {

            if (lParam & KF_EXTENDED)

                // Entertaste rechts unten gedrückt

            else

                // "normale" Entertaste gedrückt

        }

        break;

    //...

    }

    //...

}

Viel Spaß beim Werkeln!

Hmm, klingt einleuchtend, aber von welcher Fensterprozedur sprichst du?

Ich hab nur Klassen?!? :confused: :confused:

und davon noch so viele?!?!

Demnach schreibst du das mit MFC?

Dann musst du mit dem Class Wizard für das entsprechende

Fenster einen Windows-Message Handler für das

WM_KEYDOWN-Ereignis erstellen, in dem du dann folgendes

tust:


void [i](OBJECT)[/i]::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 

{

    // TODO: Add your message handler code here and/or call default

    if ((nChar == VK_RETURN) && (nFlags & 0x100))

        // erweiterte Entertaste

    else

        // normale Entertaste

    [i](Vorige Instanz)[/i]::OnKeyDown(nChar, nRepCnt, nFlags);

}


hmm, amazing.

Irgendwie tut der garnix. sicher das das flag 0x100 sein muß? Ich hab das jetzt genau so gemacht, ich mein, das kling ja auch einleuchtend. Ich habs zu sicherheit mal überall ausprobiert, aber selbst wenn ich in WM einen Haltepunkt setze und dann debugge komme ich nie dorthin.

:confused: :confused:

Also, tach nochmal!

Ich hab mir jetzt mal den MFC-Sourcecode angeschaut,

die Nachricht WM_KEYDOWN mit wParam = VK_RETURN wird

vom Programmgerüst oft abgefangen.

Aber an der richtigen Stelle kann man trotzdem

unterscheiden :D, du musst nämlich die Methode

PreTranslateMessage(MSG* lpMsg) überschreiben,

dann klappts, z. B.:


BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 

{

	// TODO: Add your specialized code here and/or call the base class

	if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)

	{

		if (pMsg->lParam & 0x01000000)

			AfxMessageBox("numpad enter tastendruck!");

		else 

			AfxMessageBox("normaler enter tastendruck!");

	}

	return CFrameWnd::PreTranslateMessage(pMsg);

}

Hab's nochmal ausprobiert, es funktioniert.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.