I would like Scintilla to ignore certain key combinations like, Ctrl+Enter or Ctrl+D, and to notify the parent window when they are entered. I read through the documentation and could not figure out how to do this. Is this possible?
Is it possible to tell Scintilla to ignore certain keystrokes and pass them to the parent window?
1.1k views Asked by Lawrence Barsanti At
2
There are two options, really. Hooking into
WM_KEYDOWN
, as suggested, is one. The other is to use an accelerator table (see http://msdn.microsoft.com/en-us/library/ms645526(VS.85).aspx) to translate the keypresses into higher-level command IDs and process the command IDs in yourWM_COMMAND
handler.Using the accelerator table is undoubtedly the "right" way, but
WM_KEYDOWN
seems to work just as well, and doesn't require changing the message loop code/tracking down the magic framework function that needs to be overridden/etc.(If using MFC, the magic framework function for window-specific accelerator tables is
CWnd::PreTranslateMessage
. Override it, callTranslateAccelerator
in there (passing in the accelerator table that is loaded in the constructor/OnCreate
/etc.) and returnFALSE
-- ifTranslateAccelerator
returned 0 -- orTRUE
-- if it returned something else. This allows the use of keyboard shortcuts that are specific to Scintilla windows.)By the way, both these methods coexist quite happily, so some keypresses can be handled with accelerators and some with
WM_KEYDOWN
. My last Scintilla program did this; I totally can't remember why, I'm afraid, but it certainly worked fine.