1

我的应用程序中有一个 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;
}

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

4

1 回答 1

1

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

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

于 2015-06-02T22:03:11.270 回答