VC++6.0 MFC WindowsXP sp2
検索処理を行っている最中に処理を中断したいのですが、
実際にボタンを押すと落ちてしまいます。
IDC_EDIT_SEARCH_FILENAME で定義しているボタンを押下したときの処理を
中断したいです。
void XXXXXView::OnBtnStopSelected()
{
// 検索中止処理
CWnd* pEditWnd = GetDlgItem( IDC_EDIT_SEARCH_FILENAME );
pEditWnd->PostMessage( WM_CLOSE, 0, 0);
}
検索処理って一体何の?
IDC_EDIT_SEARCH_FILENAME って何のコントロールですか?
名前だけ見ると EditBox 、でもボタンっていうからには Button か CheckBox か。
でも実際に呼んでいるのは CWnd 。さ~っぱり分かりませんて。
何の話かよく分かりませんが、通常、正しい手段で処理を終了させずに強制終了
(この場合Windowの破棄?)を行なうと何が起こるか分かりません。
つまり、
1)何か(ファイル?)の検索を行うプログラムです
2)IDC_EDIT_SEARCH_FILENAMEボタンを押すと検索が開始されます
3)途中で「中断」ボタンを押すことで
検索を(一時)停止することができます(OnBtnStopSelected()が呼ばれる)
とやりたかったのだけれど、
検索を止める(pEditWnd->PostMessage( WM_CLOSE, 0, 0);)と
プログラム自体が落ちます。
ってことでしょうか。
WM_CLOSEを何故送るのかがそもそも疑問(私が知らないだけ?)。
WM_CLOSEを送ったら、プログラムが落ちるのは当たり前じゃ??
検索を止めたいなら、何かしらのループ中で、
検索キャンセルのメッセージが来たかどうかを常に監視する
というようなことをやればいいんだと思うけど。
# もちろんスレッドは必要。
# メッセージっていっても、boolで十分。