关闭应用程序时忽略 Listcontrol 'DELETE_ALL_ITEMS' 事件

Ignoring Listcontrol 'DELETE_ALL_ITEMS' Event when closing application

我的应用程序中有一个 MFC ListControl。我有一个事件发生在 "all items in the view were deleted" 时。该事件抛出错误信息,然后关闭程序。

我的问题是,如果单击 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;
}

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

这是正常行为。当按下 X 按钮时,主 window 收到一个 WM_CLOSE,并开始调用其子级析构函数。当 ListView 析构函数被调用时,它的所有项目都被清理,所以你的 LVN_DeleteAllItems 通知。

(逻辑上的)错误是这里正在执行与正在丢弃的数据库的连接测试(以及异常的exit过程)。这里只应执行 ListView 的附加任务。数据库连接检查应该在调用堆栈的更高层处理:一个很好的例子是代码中发送 LVM_DeleteAllItems 的地方(注意 LVM_DeleteAllItems),并触发了ListView 待清空。