フォーカスを当てずにダイアログを作成、閉じるときにフォーカスを当てる方法


ウエダ  2011-08-05 15:55:37  No: 72860  IP: 192.*.*.*

タスクトレイ アプリを作成しています。タイマーである時間が経過したときにダイアログを表示させます。
ダイアログ表示時に、他の作業をしているとフォーカスがダイアログに移動するのを防ぎ、表示したダイアログを閉じたいときにクローズボタンで閉じる。ということをしたいのですが、どのようにすればよいでしょうか?

一応、WS_EX_NOACTIVATEを設定することで、フォーカスを当てないところまではできたのですが、
今度は、表示ダイアログを閉じたり移動したりすることができなくなりました。

ソースは簡単で以下のようにしています。

BOOL CHogeDlg::OnInitDialog()
{
  省略
       
  //@@フォーカスを受け取らないようにする
  {
    UINT unSyle = GetWindowLong(m_hWnd, GWL_EXSTYLE);
    // キャプションのスタイルを削除
    unSyle = (unSyle | WS_EX_NOACTIVATE);
    SetWindowLong(this->m_hWnd,GWL_EXSTYLE,unSyle);
  }

}

お手数ですが、御教授をお願いいたします。

開発はVisualStudio2008 MFCで作成しています。

編集 削除
fuku  2011-08-05 18:27:15  No: 72861  IP: 192.*.*.*

試してはいませんけど、
ShowWindow(SW_SHOWNA);
を使うのでは駄目ですか?

編集 削除
ryo  2011-08-06 15:02:12  No: 72862  IP: 192.*.*.*

>ダイアログ表示時に、他の作業をしているとフォーカスがダイアログに移動するのを防ぎ
この「表示時」というのは、
「最初に表示や、プログラム上の何かのタイミングで表示更新したいとき」
でしょうか?それとも、
「表示させておきたい間は何があってもずっと。
  例えば、エンドユーザーが対象のダイアログをクリックしたとしても」
でしょうか?

編集 削除