Причина заключается в очень сложном способе ввода с клавиатуры в Visual Studio.
Цикл сообщений Visual Studio отдает первый приоритет сообщениям Windows (исключая буквенно-цифровой ввод) командам Visual Studio.Он вызовет цепочку IOleCommandTarget
для активного IVsTextView
.Упомянутые вами ключи специально обрабатываются частями редактора и, следовательно, имеют приоритет, обрабатывают сообщение и приводят к потере фокуса ввода.
Чтобы обойти это, нужно добавить экземпляр IOleCommandTarget
в целевую цепочку команд OLE IVsTextView
для активного представления.Когда ваше окно активно, вы можете перехватить данные ключи, пометить их как отключенные, и тогда они будут перенаправлены в ваше окно.
Я бы хотел привести здесь небольшой фрагмент кода, но, к сожалению, нет небольшого фрагмента кода, который бы адекватно демонстрировал это решение.Вместо этого я укажу вам тот же прием, который использовался в моем эмуляторе Vim для Visual Studio.