У меня есть устаревший проект, в котором мне нужно исправить ошибки, WTL / VC ++.Одна из проблем - сбой главного окна (ну, конечно, всего приложения) после нажатия клавиш Ctrl + X или Ctrl + Z.У меня нет пользовательских ускорителей, назначенных этим клавишам.Я обнаружил, что «фатальные» комбинации клавиш вызывают бесконечный цикл сообщений с
uMsg == 273 (0x00000111)
, который в конечном итоге приводит к ошибке переполнения стека:
Command Code: 5, ID: 29892, HANDLE: 0xe091aFirst-chance exception at 0x007f88fa
in <myApp>.exe: 0xC00000FD: Stack overflow.
Unhandled exception at 0x007f88fa in <myApp>.exe: 0xC00000FD: Stack overflow.
Я просто пропатчилэто в функции обработки сообщений -
BEGIN_MSG_MAP (CMDIChildWindowImpl)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
MESSAGE_HANDLER(WM_CLOSE, OnClose)
MESSAGE_HANDLER(WM_TIMER, OnTimer)
* *
COMMAND_ID_HANDLER(ID_FILE_NEW, OnNewDownload)
COMMAND_ID_HANDLER(ID_UPLOAD_FOLDER_SET, OnUploadFolderSet)
COMMAND_ID_HANDLER(ID_OPEN_RECORD_BY_ID, OnOpenOnline)
* *
NOTIFY_CODE_HANDLER(HLN_PORTAL_RECORD_DOWNLOAD, OnPortalPageNotify);
NOTIFY_CODE_HANDLER(HLN_SELCHANGED, OnWebFormNotify);
if(uMsg == 273)
return false;
else
CHAIN_MSG_MAP(baseClass)
END_MSG_MAP ()
Но я не удовлетворен этим патчем для лейкопластыря, было бы неплохо понять, что происходит - и я действительно хочу, чтобы эти комбинации клавиш делали в моей форме стандартные настройки Windows, «вырезать» и"отменить"
больше информации о фатальных сообщениях:
Ctrl + X -
uMsg 273 без знака int
wParam 123171 без знака int
lParam 0 long
lParam 0 long
Ctrl + Z -
uMsg 273 без знака int
wParam 123179 без знака int
lParam 0 long
Извините, если это не имеет смысла, мой VC ++ кунг-фу довольно ржавый;Если бы кто-нибудь мог дать мне подсказку, где искать идеи, это было бы очень признательно.
Спасибо!
O.