¿Es posible decirle a Scintilla que ignore ciertas teclas y las pase a la ventana principal?

StackOverflow https://stackoverflow.com/questions/1982448

Pregunta

Me gustaría que Scintilla ignore ciertas combinaciones de clave como, Ctrl+Enter o Ctrl+D, y notifique a la ventana principal cuando se ingresan. Leí la documentación y no pude descubrir cómo hacer esto. es posible?

¿Fue útil?

Solución

Hay dos opciones, de verdad. Enganchando WM_KEYDOWN, como se sugirió, es uno. El otro es usar una tabla de acelerador (ver http://msdn.microsoft.com/en-us/library/ms645526(vs.85).aspx) para traducir los KeyPresses en ID de comando de nivel superior y procesar las ID de comando en su WM_COMMAND manipulador.

El uso de la tabla de acelerador es sin duda la forma "correcta", pero WM_KEYDOWN parece funcionar igual de bien, y no requiere cambiar el código de bucle de mensaje/rastrear la función de marco mágico que debe ser anulado/etc.

(Si usa MFC, la función de marco mágico para las tablas de acelerador específicas de la ventana es CWnd::PreTranslateMessage. Anularlo, llamar TranslateAccelerator allí (pasando en la tabla del acelerador que se carga en el constructor/OnCreate/etc.) y regresar FALSE -- si TranslateAccelerator devuelto 0 - o TRUE - Si devolviera algo más. Esto permite el uso de atajos de teclado que son específicos de las ventanas de Scintilla).

Por cierto, ambos métodos coexisten bastante felizmente, por lo que algunas clave se pueden manejar con aceleradores y algunos con WM_KEYDOWN. Mi último programa de Scintilla hizo esto; No puedo recordar por qué, me temo, pero ciertamente funcionó bien.

Otros consejos

Bueno, si todo lo demás falla, podría subclase el procedimiento de ventana del control de Scintilla. Sería bastante sencillo interceptar los mensajes wm_keydown y wm_keyup, filtrarlos y luego pasarlos a la ventana principal de Scintilla Proc o a la ventana de su padre.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top