What’s wrong with TranslateMessage?  Two things:

  1. It probably shouldn’t be in the message loop.  Different windows do different things with character and keystroke messages.  Performance is not an issue here nowadays.  Having TranslateMessage in the message loop has resulted in awful things such as IsDialogMessage and TranslateAccelerator calls for every message that goes through the loop.
  2. More importantly though, TranslateMessage really should return TRUE if the keystroke message generates characters.  It should return FALSE in every other situation.  Unfortunately, TranslateMessage currently returns TRUE for WM_*KEYDOWN messages, even if no characters are generated by the keystroke (think F2 or Ctrl or up-arrow or Ctrl+Shift+X).  This means that application developers have no way of knowing if the key can be safely used as a shortcut key, or should be ignored because a WM_CHAR or similar is on its way to insert into the current focus.

    This in turn means that shortcut keys are typically processed (with TranslateAccelerator or a homegrown variety thereof) before TranslateMessage – and some characters are now inaccessible on some keyboard layouts.

    The typical workaround is to add a hack for Ctrl+Alt (AltGr).  Yuck.  And that doesn’t solve other supported combinations such as Ctrl+Shift.

So what’s the answer to these problems? TranslateMessageEx?

Categories: Developing Keyman

0 thoughts on “What’s wrong with TranslateMessage?”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Related Posts

Developing Keyman

Keyman Update for 19 July 2024

This blog reports on significant keyboard development updates over the period from 08 July 2024 — 19 July 2024. As always, you can follow all of our development online at github.com/keymanapp/keyman, and you may find Read more…

Developing Keyman

Keyman 17.0 is now available in beta

We are excited to announce that Keyman 17.0 is officially in beta. You can download Keyman 17.0 beta on Keyman downloads website. You are welcome to send us any feedback for Keyman 17.0 on Keyman Read more…

Developing Keyman

The Keyman Intern Project

Several members of the Keyman team work out of the National Polytechnic Institute of Cambodia (NPIC), វិទ្យាស្ថានជាតិពហុបច្ចេកទេសកម្ពុជា, in Phnom Penh, the capital of Cambodia. One of the things the Keyman team tries to do is Read more…