ウィンドウをつまんで動かしたい

締切り済みの質問

ウィンドウをつまんで動かしたい

POPUP,TOPMOST属性のウィンドウにボタンを貼り付けたタイマーを作っています。ボタン以外の場所をクリック&ドラッグすることでウィンドウを自由に移動できるようにしたくて以下の様にコードを書いたのですが上手く動きません。

case WM_LBUTTONDOWN:
SetCapture(hwnd);
mPrevXPos = LOWORD(lParam);
mPrevYPos = HIWORD(lParam);
return 0;

case WM_LBUTTONUP:
ReleaseCapture();
return 0;

case WM_MOUSEMOVE:
if(wParam & MK_LBUTTON)
{
MoveX = LOWORD(lParam)-mPrevXPos+wPrevXPos;
MoveY = HIWORD(lParam)-mPrevYPos+wPrevYPos;
if(MoveX<0) MoveX=0;
if(MoveY<0) MoveY=0;
MoveWindow(hwnd,MoveX,MoveY,WIHDOW_WIDTH,WINDOW_HEIGHT,TRUE);
}
return 0;

case WM_MOVE:
wPrevXPos = LOWORD(lParam);
wPrevYPos = HIWORD(lParam);
return 0;

このようにしてウィンドウの左のほうを掴んで左方向にくいっと動かすとウィンドウが消滅してしまいます。MoveWindow関数はTRUEを返しています。SetCaptureを外すとウィンドウは消滅しなくなるので、マウス座標にマイナスの値が入るのがイケナイようなのですがどうすればよいのか分かりません。またMoveWindow関数にマイナスの座標が入ってもウィンドウが消えてしまうためスクリーンの左隅でストップするようにしてますが、この制約も取り除きたいのですがどうすればよいでしょう?

投稿日時 - 2009-11-12 14:34:05

連想キーワード:

QNo.5442072

困ってます

0人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

回答(1件中 1~1件目)

ANo.1

WM_NCHITTESTでHTCAPTIONを返すのが簡単です。
http://msdn.microsoft.com/ja-jp/library/ms645618(en-us,VS.85).aspx

投稿日時 - 2009-11-12 15:37:18

お礼

ありがとうございます!

case WM_LBUTTONDOWN:
SendMessage(hwnd,WM_NCLBUTTONDOWN,HTCAPTION,lParam);
return 0;

まさかこれだけであっさりできるとは…

投稿日時 - 2009-11-12 16:09:38

あわせてチェックしたい
  • MoveWindow ...
  • 他のPCでDVD Movei Righter4で作成したDVDを読み込めない ...
  • Windowをドラッグ移動したい ...
PR

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら