締切り済みの質問
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
0人が「このQ&Aが役に立った」と投票しています
回答(1件中 1~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
OKWaveのオススメ
おすすめリンク