gpt4 book ai didi

MFC CWinApp::PreTranslateMessage:识别消息(ID:49390),导致关闭时崩溃

转载 作者:行者123 更新时间:2023-12-03 17:39:31 26 4
gpt4 key购买 nike

一个简单的问题:那是什么信息?它来自哪里?

症状:

我在关闭时遇到 CWnd::WalkPreTranslateMessage 崩溃
我的应用程序。这是由处理的消息引起的
主框架销毁后的CWinApp::PreTranslateMessage及其C++
对象被破坏并且在 MFC 内部处理 WM_QUIT 消息之前
- 我不调用 (Afx)PostQuitMessage。

我重载了 CWinApp::PreTranslateMessage 来跟踪消息
穿过。

这发生在 VS2005(32 位)和 VS2010(64 位)以及调试和 Release模式下。

时间线:

  • CWinThread::m_pMainWnd 为 NULL(已正确销毁)
  • CWinApp::PreTranslateMessage 被调用

    其参数 MSG* 消息如下所示:
    hwnd: NULL
    message: varies from 49390 to 49401
    wParam: 17
    lParam: looks random

    => CWnd::WalkPreTranslateMessage 崩溃

  • 在运行时,我看到带有该 ID 的消息通过
    CWinApp::PreTranslateMessage。有一种消息
    有趣的可能有助于确定这些消息的位置
    来自:

    MSG* 消息如下所示:
    hwnd: NULL
    message: 49390
    wParam: 17
    lParam: looks random at first, though ...
    lParam hiword: is incremented by 1 each time the message passes through
    lParam loword: is constant

    这些消息似乎是其中 hwnd 明确为 NULL 的线程消息。
    我仍然想知道它们有什么用,如何阻止它们填充消息队列
    或如何处理它们以在关闭时不使应用程序崩溃。

    好吧,现在我这样处理它是不对的。
    if (m_pMainWnd)
    return CWinApp::PreTranslateMessage(pMsg);
    else
    return FALSE;

    请帮我识别这些消息,谢谢!

    最佳答案

    RegisterWindowMessage 返回该范围内的消息(高于 0xC000 的任何消息) .我怀疑你做错了什么,因为这种事情不应该发生——而且在正确编写的 MFC 应用程序中也不应该发生。

    关于MFC CWinApp::PreTranslateMessage:识别消息(ID:49390),导致关闭时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14424222/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com