In an older Win32 non-unicode app, I've got a text editor that handles IME in the following messages -
WM_IME_COMPOSITION:
...
if (lParam & GCS_RESULTSTR) // flag to say the IME character has been fully entered
We then populate a struct getting the data from
ImmGetCompositionStringW
Then we receive a WM_IME_CHAR message. This is passed on to the 'normal' text handler and ends up populating the text box with the data we retrieved earlier.
That's it, it's worked for 25 years so far.
However, entering Korean in Windows 11 does not work (Windows 10 does work). Korean IME in Windows needs two key presses for each character; the app sees the WM_IME_COMPOSITION and WM_IME_CHAR messages only after the 2nd key is pressed to complete the character.
After the first character is complete, WM_IME_ .... messages are no longer received. They've just stopped coming. The text box receives other messages as expected (eg WM_KEYDOWN). Catching it in the debugger often makes it work again.
Can anyone suggest what might be failing?