タイトルバーのないダイアログの移動 – プログラミング – Home

タイトルバーのないダイアログの移動
 
通知
すべてクリア

[解決済] タイトルバーのないダイアログの移動


きなさ
 きなさ
(@きなさ)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

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);
}


引用未解決
トピックタグ
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

ご所望の動きを実現するにはいくつかの方法がありますが、
WM_LBUTTONDOWNを処理する方法もあります。

void CHogeDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CDialog::OnLButtonDown(nFlags, point);

PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
}


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

提示された方法でも全く問題ないですが、
こんな方法でも可能です。

UINT CTestDlg::OnNcHitTest(CPoint point)
{
UINT ht = CDialog::OnNcHitTest(point);
if (ht == HTCLIENT)
ht = HTCAPTION;
return ht;
}


返信引用
きなさ
 きなさ
(@きなさ)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

sugarさん、dairygoodsさん、早速のご返答ありがとうございます。

なるほど!
あたかもタイトルバーにマウスポインタがあるようにして、
そのように処理をさせてしまうということですよね!?

なんだかすごいです。
是非両方の方法で処理させて見ます。

まだまだ初心者ですので、今後もつまらない質問を
書き込みさせていただくかもしれませんが、どうぞよろしくお願いします。
本当にありがとうございました!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました