忽略Listcontrol' DELETE_ALL_ITEMS'关闭申请时的事件

时间:2015-06-02 20:55:54

标签: c++ mfc event-handling listcontrol

我的应用程序中有一个MFC ListControl。我有一个事件发生在"视图中的所有项目都被删除"。该事件抛出一条错误消息,然后关闭该程序。

我的问题是,如果单击 X (关闭)按钮,也会调用该事件。

这是我的LVN_DeleteAllItems事件的代码:

void Users::OnLvnDeleteallitemsList1(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    MessageBox("The SQL connection has been dropped.  Please restart the application.","SQL Connection Error",MB_ICONSTOP);
    exit(EXIT_FAILURE);
    *pResult = 0;
}

如果应用程序正确关闭(使用右上角的按钮),是否有办法防止事件被调用?

1 个答案:

答案 0 :(得分:1)

这是正常行为。当按下X按钮时,主窗口收到WM_CLOSE,并开始调用其子析构函数。当调用ListView析构函数时,它的所有项都被清理掉了,因此会发出LVN_DeleteAllItems通知。

(逻辑)错误是正在执行与被丢弃的DB的连接测试(以及异常的exit过程)。这里只应执行ListView附加任务。应该在callstack中处理更高的数据库连接检查:一个很好的例子是发送LVM_DeleteAllItems的代码中的位置(注意LV M _DeleteAllItems),并触发ListView为清空。