Win2000 VC6.0 MFC
こんにちは。
初心者&初書き込みです。よろしくお願いします。
タイトルバーのないダイアログベースアプリケーションを作成しています。
これをドラッグして移動できるようにしたいです。
それで OnMouseMove() をオーバーライドして作ってみました(↓)。
が、一応ちゃんと動くのですが、メッセージがループしそうですし、
なにか間違っている気がします。
このような場合の正しい書き方を教えてください。
よろしくお願いします。
void CTestDlg::OnMouseMove(UINT nFlags, CPoint point)
{
CPoint cursorPos;
GetCursorPos( &cursorPos );
if( nFlags & MK_LBUTTON ){
CRect rect;
GetWindowRect( &rect );
SetWindowPos(
NULL,
rect.left + ( cursorPos.x - m_pointPrev.x ),
rect.top + ( cursorPos.y - m_pointPrev.y ),
0,
0,
SWP_NOSIZE|SWP_NOZORDER|SWP_SHOWWINDOW
);
}
m_pointPrev = cursorPos;
CDialog::OnMouseMove(nFlags, point);
}
ご所望の動きを実現するにはいくつかの方法がありますが、
WM_LBUTTONDOWNを処理する方法もあります。
void CHogeDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CDialog::OnLButtonDown(nFlags, point);
PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
}
提示された方法でも全く問題ないですが、
こんな方法でも可能です。
UINT CTestDlg::OnNcHitTest(CPoint point)
{
UINT ht = CDialog::OnNcHitTest(point);
if (ht == HTCLIENT)
ht = HTCAPTION;
return ht;
}
sugarさん、dairygoodsさん、早速のご返答ありがとうございます。
なるほど!
あたかもタイトルバーにマウスポインタがあるようにして、
そのように処理をさせてしまうということですよね!?
なんだかすごいです。
是非両方の方法で処理させて見ます。
まだまだ初心者ですので、今後もつまらない質問を
書き込みさせていただくかもしれませんが、どうぞよろしくお願いします。
本当にありがとうございました!