我有一个MFC列表控制在我的应用程序。我有一个事件,当"视图中的所有项都被删除"时发生。该事件抛出错误消息,然后关闭程序。
我的问题是,如果单击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按钮被按下时,主窗口接收一个WM_CLOSE,并开始调用它的子析构函数。当ListView析构函数被调用时,它的所有项都被清除,所以这就是你的LVN_DeleteAllItems
通知。
(逻辑)错误是到正在被丢弃的DB的连接正在这里执行测试(以及异常的exit
过程)。这里只需要执行ListView附加任务。数据库连接检查应该在调用栈中处理得更高:一个很好的例子是在代码中发送LVM_DeleteAllItems
(注意LVM_DeleteAllItems)的地方,并触发ListView被清空。