我有一个遗留项目需要修复 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 无符号整数
wParam 123171 无符号整数
lParam 0 长
lParam 0 长
Ctrl+Z -
uMsg 273 无符号整数
wParam 123179 无符号整数
lParam 0 长
对不起,如果这没有意义,我的 VC++ 功夫相当生疏;如果有人能给我提示在哪里寻找这些想法,那将不胜感激。
谢谢!
O。