こんにちわ。
タスクバーにアイコンを表示し、ドラッグ状態のマウスが
タスクバーアイコンに重なるとダイアログを表示して
そのダイアログにドロップするプログラムを作っています。
で、マウスがドラッグ状態かどうかを取得できずに困っています。
以下ソースです。
#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の使い方が悪いのか、
タスクバーアイコンからのメッセージの受け取り方に問題があるのか、
色々と調べたのですがどうしても分かりませんでした。
どなたか助けて頂けないでしょうか。
宜しくお願いします。
WM_MOUSEMOVEは自分のウィンドウの上とかでないと送られないので別の方
法がいるはずです。
手っ取り早くタイマーを使って、画面端などにカーソルが有るときにウィンドウを表
示してしまうとかもありのような気がします。
ファイルなどをドラッグするのならばOLEのドラッグだと思います。
http://search.microsoft.com/results.aspx?mkt=ja-JP&setlang=ja-
JP&q=OLE+Drag
このあたりで。