タスクバーのアイコンにドラッグするとダイアログを表示する方法

[戻る]
eight 2007/02/25(日) 05:05:27
こんにちわ。
タスクバーにアイコンを表示し、ドラッグ状態のマウスが
タスクバーアイコンに重なるとダイアログを表示して
そのダイアログにドロップするプログラムを作っています。

で、マウスがドラッグ状態かどうかを取得できずに困っています。
以下ソースです。

#define WM_TRYFORCUS WM_APP + 1

LRESULT CLINKB2Dlg::OnTrayForcus(WPARAM wParam, LPARAM lParam)
{
    CString strwork;
    POINT point;
    ::GetCursorPos(&point);

    switch( lParam)
    {
     case WM_MOUSEMOVE:
        short mouseState = ::GetAsyncKeyState(VK_LBUTTON);
        if ( (mouseState & 0x8000) == 0x8000 )
        {
          ShowWindow(SW_SHOW);
        }
    return 0L;
}

上記ソースでは、
タスクバーアイコンの上でマウス左ボタンを押してマウスを少し動かすと
ダイアログを表示できるのですが、
他の場所(例えばデスクトップ上)でマウスの左ボタンを押したまま
タスクバーアイコンの上にマウスを移動してもダイアログが表示できません。

ドラッグ状態の検知の仕方が悪いのか、
GetAsyncKeyStateの使い方が悪いのか、
タスクバーアイコンからのメッセージの受け取り方に問題があるのか、
色々と調べたのですがどうしても分かりませんでした。

どなたか助けて頂けないでしょうか。
宜しくお願いします。

ぬふや 2007/02/25(日) 18:15:50
WM_MOUSEMOVEは自分のウィンドウの上とかでないと送られないので別の方
法がいるはずです。

手っ取り早くタイマーを使って、画面端などにカーソルが有るときにウィンドウを表
示してしまうとかもありのような気がします。

ファイルなどをドラッグするのならばOLEのドラッグだと思います。
http://search.microsoft.com/results.aspx?mkt=ja-JP&setlang=ja-
JP&q=OLE+Drag
このあたりで。

古いスレッドには追加発言できません。