フォームの外までドラッグしてもMouseMoveを拾いたい – プログラミング – Home

フォームの外までドラッグしてもMous...
 
通知
すべてクリア

[解決済] フォームの外までドラッグしてもMouseMoveを拾いたい


DirtRunner
 DirtRunner
(@DirtRunner)
ゲスト
結合: 16年前
投稿: 5
Topic starter  

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のクラス化なども調べたのですが、理解できずに困っています。

なにかヒントはありますでしょうか?
よろしくお願いいたします。


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

SetCapture()してはどう?


返信引用
DirtRunner
 DirtRunner
(@DirtRunner)
ゲスト
結合: 16年前
投稿: 5
Topic starter  

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
ここも見つかり、よく読んでから気がつきました。

迅速な回答、ありがとうございました!


返信引用
DirtRunner
 DirtRunner
(@DirtRunner)
ゲスト
結合: 16年前
投稿: 5
Topic starter  

上記の訂正。

void CMyDlg::OnLButtonUp(UINT nFlags, CPoint point)

   ↑ここがコピペミスでした。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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