バグを修正する必要がある古いプロジェクト、WTL/VC++ があります。問題の 1 つ - 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 unsigned int
wParam 123171 unsigned int
lParam 0 ロング
lParam 0 ロング
Ctrl+Z -
uMsg 273 unsigned int
wParam 123179 unsigned int
lParam 0 ロング
これが意味をなさない場合は申し訳ありませんが、私の VC++ カンフーはかなり錆びています。どこでアイデアを探すべきか、誰かが私にヒントを与えることができれば、それは大歓迎です.
ありがとうございました!
O.