メイン ウィンドウ、レイヤード ウィンドウを表示し、COM ドラッグ アンド ドロップを実装するプログラムがあります。一般的に言えば:
- 通常のトップレベルウィンドウを作成します。
- WS_EX_LAYERED と UpdateLayeredWindow/SetLayeredWindowAttributes を使用してレイヤード ウィンドウを作成します (両方試しました)。レイヤード ウィンドウは、1 で作成したウィンドウの上に配置されます。レイヤード ウィンドウは子ウィンドウではありません。
- 次に、COM の DoDragDrop 関数を使用してドラッグ アンド ドロップを開始します。IDropSource::QueryContinueDrag では、ImageList_BeginDrag、ImageList_DragMove などを呼び出します。
問題は、COM が表示しているドラッグ イメージ (イメージ リスト内のイメージ) が、レイヤード ウィンドウの上ではなく下に表示されることです。レイヤード ウィンドウの上にカーソルが表示されます (予想どおり)。下から上に、私が得ているレイヤーは次のとおりです。
- メインウィンドウ(下)
- COMドラッグ画像
- レイヤード ウィンドウ
- カーソル(上)
それは次のとおりです。
- メインウィンドウ(下)
- レイヤード ウィンドウ
- COMドラッグ画像
- カーソル(上)
KB943326「Windows Server 2003 または Windows XP で、重なっている階層化されたウィンドウが正しい順序で表示されない」(" http://support.microsoft.com/kb/943326 ") を既に適用しましたが、違いはありませんでした。
XP SP2 を実行しています。
アイデアが尽きてしまったので、何か提案をいただければ幸いです...
ありがとう、蘇グリーン