私のアプリケーションには、小さなメッセージがポップアップするウィンドウがあります (ツールチップに似ていると考えてください)。このウィンドウは、レイヤー属性を使用してアルファ背景などを描画します。
これらのウィンドウを一度にいくつか開いていて、マウスで 1 つをクリックすると、それらが消えると、アプリケーションがフォーカスを失います (現在のウィンドウの背後にあるアプリにフォーカスが切り替わります)。
ウィンドウでの対話を停止するにはどうすればよいですか?
私のアプリケーションには、小さなメッセージがポップアップするウィンドウがあります (ツールチップに似ていると考えてください)。このウィンドウは、レイヤー属性を使用してアルファ背景などを描画します。
これらのウィンドウを一度にいくつか開いていて、マウスで 1 つをクリックすると、それらが消えると、アプリケーションがフォーカスを失います (現在のウィンドウの背後にあるアプリにフォーカスが切り替わります)。
ウィンドウでの対話を停止するにはどうすればよいですか?
WM_NCACTIVATE
運がなかったメッセージで遊んだ後、私はWM_SETFOCUS
メッセージを上書きしました:
void CMyWindow::OnSetFocus(CWnd* pOldWnd)
{
if (pOldWnd != NULL)
{
pOldWnd->SetFocus();
}
}
それはトリックを行うようです。なぜそれが機能するのかわかりません!その問題に関するコメントを歓迎します。
これが機能するのは、OnSetFocus (多くの On* メソッドと同様) が、アクションが実際に発生する前にアクションを先取りする機会を与えるためです。フォーカスが実際に非対話型ウィンドウに切り替わることはありません。