VS2005 VC++ WinXP MFCです。
ダイアログベースのアプリを作成していますが、マウスの移動(座標)を
拾いたいと思っております。
具体的には、フォームのある一部分で左ボタンをクリックし、
そのままドラッグしたときのマウスの移動量を取得し、その移動量を
随時記録します。
左ボタンを放すまで記録します。
OnMouseMove()だと、フォームの外に外れるとイベントが発生せずに止まってしまいます。
(フォーム内のタブコントロール上ですら止まってしまいます)
希望としては、フォーム外であってもフォーム内と同じように座標を拾いたいです。
(D&Dではなく、ただ移動座標(デスクトップ上の絶対座標でも、移動量だけでも可)を
拾うだけです。)
ちなみに、シングルモニターです。
そこで、
LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch(Msg){
case WM_LBUTTONDOWN:
:
:
}
のような記述を試したのですが、これはAPIなので使用できない(コールされない)よう
です。
そこでWndProcのクラス化なども調べたのですが、理解できずに困っています。
なにかヒントはありますでしょうか?
よろしくお願いいたします。
SetCapture()してはどう?
bun様
ありがとうございます!
SetCapture()はCWnd::(MFC)のものとHWND(API)と両方あるということだったんですね?
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
SetCapture();
CDialog::OnLButtonDown(nFlags, point);
}
void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)
{
//ここでpoint.xなどを取得・処理
CDialog::OnMouseMove(nFlags, point);
}
void CPartsBuilderDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
ReleaseCapture();
CDialog::OnLButtonUp(nFlags, point);
}
これでうまく取得できました。
[SetCapture MFC]で改めて検索し、
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200802/08020045.txt
ここも見つかり、よく読んでから気がつきました。
迅速な回答、ありがとうございました!
上記の訂正。
void CMyDlg::OnLButtonUp(UINT nFlags, CPoint point)
↑ここがコピペミスでした。