2

私のアプリケーションには、小さなメッセージがポップアップするウィンドウがあります (ツールチップに似ていると考えてください)。このウィンドウは、レイヤー属性を使用してアルファ背景などを描画します。

これらのウィンドウを一度にいくつか開いていて、マウスで 1 つをクリックすると、それらが消えると、アプリケーションがフォーカスを失います (現在のウィンドウの背後にあるアプリにフォーカスが切り替わります)。

ウィンドウでの対話を停止するにはどうすればよいですか?

4

2 に答える 2

1

WM_NCACTIVATE運がなかったメッセージで遊んだ後、私はWM_SETFOCUSメッセージを上書きしました:

void CMyWindow::OnSetFocus(CWnd* pOldWnd)
{
    if (pOldWnd != NULL)
    {
        pOldWnd->SetFocus();
    }
}

それはトリックを行うようです。なぜそれが機能するのかわかりません!その問題に関するコメントを歓迎します。

于 2008-09-08T14:45:24.000 に答える
1

これが機能するのは、OnSetFocus (多くの On* メソッドと同様) が、アクションが実際に発生する前にアクションを先取りする機会を与えるためです。フォーカスが実際に非対話型ウィンドウに切り替わることはありません。

于 2008-09-09T00:59:00.953 に答える