首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CListBox之后销毁LBN_KILLFOCUS会导致异常

在CListBox之后销毁LBN_KILLFOCUS会导致异常
EN

Stack Overflow用户
提问于 2015-07-16 16:36:19
回答 1查看 174关注 0票数 0

我的目标是在CListBox对象失去焦点后销毁它。我向父对象添加了以下代码:

代码语言:javascript
复制
BEGIN_MESSAGE_MAP(CChildView, CWnd)
    ON_LBN_KILLFOCUS(IDC_LISTBOX, OnLBKillFocus)
END_MESSAGE_MAP()

void CChildView::OnLBKillFocus()
{
    listBox->DestroyWindow();
}

我创建了这样的对象:

代码语言:javascript
复制
listBox = new CListBox;
listBox->Create(WS_VISIBLE | WS_CHILD, CRect(10, 110, 100, 200), this, 1112);

但是在执行OnLBKillFocus函数之后,我得到了DefWindowProc中的一个异常。显然,已经销毁的ListBox试图处理WM_KILLFOCUS消息并崩溃,因为窗口句柄是NULL

下面是堆栈跟踪的一部分:

代码语言:javascript
复制
mfc110ud.dll!CWnd::DefWindowProcW(unsigned int nMsg, unsigned int wParam, long lParam) Line 1141    C++
mfc110ud.dll!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 2138 C++
mfc110ud.dll!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 290   C++
mfc110ud.dll!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 453    C++
mfc110ud.dll!AfxWndProcBase(HWND__ * hWnd, unsigned int nMsg, unsigned int   wParam, long lParam) Line 304  C++
user32.dll!_InternalCallWinProc@20()   Unknown
...

有没有人知道这次坠机的原因是什么,以及如何避免?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-17 07:25:14

使应该造成破坏和破坏的行动脱钩。

在收到WM_KILLFOCUS事件后,只需将PostMessage与一条私有消息(已注册的窗口消息或WM_APP+n)一起使用,并在收到此消息时销毁该窗口。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31459871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档