[3033]
    Re4:ファイルの更新不具合
    wmlhq(管理者による再投稿)
    
    ▼ ryojiさん
> ここは多少遅れてもタイマーでの更新検出に任せたほうが無難な気がします。
絶対反対! ここは、m_bBeginSelectの信頼性にかかわるので、直すべきです。
> ダイアログを閉じたあとで遅れてCEditViewにWM_LBUTTONDOWNが届くからでしょう。
> そこでm_bBeginSelectがTRUEにセットされる。
m_bBeginSelectは正解です。でも、次のSetFocusが悪さをしないか心配になります(他力本願モード)。
case WM_LBUTTONDOWN:
//case WM_RBUTTONDOWN:
	::SetFocus( ::GetParent( m_hwndParent ) ); // これはWM_SETFOCUSを速達するんじゃないの?
	if( m_nMyIndex != m_pcEditDoc->GetActivePane() ){
		/* アクティブなペインを設定 */
		m_pcEditDoc->SetActivePane( m_nMyIndex );
	}
//		MYTRACE( " WM_LBUTTONDOWN wParam=%08xh, x=%d y=%d\n", wParam, LOWORD( lParam ), HIWORD( lParam ) );
	OnLBUTTONDOWN( wParam, (short)LOWORD( lParam ), (short)HIWORD( lParam ) ); // SetFocusの後でこれが呼ばれる。
	return 0L;
そしてCEditWndの中で
	case WM_SETFOCUS:
//		MYTRACE( "WM_SETFOCUS\n" );
		/* ファイルのタイムスタンプのチェック処理 */
		m_cEditDoc.CheckFileTimeStamp();
		/* 編集ウィンドウリストへの登録 */
		CShareData::getInstance()->AddEditWndL
ist( m_hWnd );
		/* メッセージの配送 */
		lRes = m_cEditDoc.DispatchEvent( hwnd, uMsg, wParam, lParam );
ここでCheckFileTimeStampが呼ばれます。CheckFileTimeStampはダイアログをモーダルにしてスレッドを停止してしまいます。憶測では、ダイアログが閉じた後、スレッドはcase WM_LBUTTONDOWNのSetFocusの直後に戻り、OnLBUTTONDOWNを呼び、m_bBeginSelectをセットする。
ややこしい仕様なので、WM_LBUTTONDOWNとOnLBUTTONDOWNは区別して考えてください。