2

子を含むメインウィンドウがあります。子供では、マウスホイールのスクロールを処理する必要がありますが、マウスホイールのメッセージがメインウィンドウに移動する場所をスクロールしても問題ありません。Spy++ でこれらの結果を得ました。

なぜそれが起こるのか分かりませんが、子の作成、私のコードに何か問題があると思います:

m_window = CreateWindowEx(0, CustomTreeView::m_className.c_str(), NULL, WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL, x, y, width, height, parent, NULL, NULL, NULL);
4

1 に答える 1

9

メッセージは、WM_MOUSEWHEELフォーカスのあるウィンドウ (つまり、最後にSetFocus()呼び出されたウィンドウ) に送信されます。マウス カーソルの位置は関係ありません。メッセージは常にフォーカス ウィンドウに表示されます。

フォーカス ウィンドウがホイール メッセージを処理しない場合、ホイール メッセージDefWindowProcはフォーカス ウィンドウの親に伝播され、再びその親に伝播されます。そのため、ホイール メッセージはウィンドウ階層を上に移動するだけです。

入力フォーカスを持たない子ウィンドウでホイール メッセージを取得したい場合は、それらを自分で転送するように手配する必要があります。

これを行う場合は、無限ループの可能性を回避するために、別のメッセージを介して行う必要があります。

于 2013-09-17T12:20:42.497 に答える