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通知が送信されます。

(論理) エラーは、ドロップされた DB への接続テストがここで実行されていることです (また、異常なexit手順も)。ここでは、ListView の追加タスクのみを実行する必要があります。データベース接続チェックは、コールスタックの上位で処理する必要があります。良い例は、LVM_DeleteAllItems(LV M _DeleteAllItems に注意してください) を送信し、ListView を空にすることをトリガーしたコード内の場所です。

于 2015-06-02T22:03:11.270 に答える