VC++スクロールバーでのマウス座標の取得方法

このQ&Aのポイント
  • VC++初心者の方ですね。子ウィンドウにビットマップ画像を表示し、マウスポインタが指している場所のRGB値を表示するプログラムを作成している中で、スクロールバーがある子ウィンドウではスクロールした後でもマウスポインタの座標が子ウィンドウの左上に表示されてしまいます。そこで、スクロールしたピクセル数を取得し、その分マウスポインタの座標に加算する方法を知りたいということですね。OnHScrollとOnVScrollを使用するのかどうか迷っているようですが、適切な変数にスクロールしたピクセル数を格納する処理があれば教えてほしいということですね。
  • VC++初心者の方が、子ウィンドウにビットマップ画像を表示し、マウスポインタが指している場所のRGB値を表示するプログラムを作成しています。しかし、スクロールバーがある子ウィンドウではスクロールした後でもマウスポインタの座標が子ウィンドウの左上に表示されてしまいます。そこで、スクロールしたピクセル数を取得し、その分マウスポインタの座標に加算する方法を知りたいという質問です。OnHScrollとOnVScrollを使用するのかどうか悩んでいるようです。
  • VC++初心者の方が、子ウィンドウにビットマップ画像を表示し、マウスポインタが指している場所のRGB値を表示するプログラムを作成中です。スクロールバーがある子ウィンドウでは、スクロールした後でもマウスポインタの座標が子ウィンドウの左上に表示されるため、スクロールしたピクセル数を取得してマウスポインタの座標に加算する方法を知りたいとのことです。OnHScrollとOnVScrollを使用するのか迷っているようで、適切な処理方法を教えてほしいとのことですね。
回答を見る
  • ベストアンサー

VC++ スクロールバーが何ピクセル移動したか知るには?

VC++初心者なんですが、子ウィンドウにビットマップ画像を表示して、マウスポインタの指している位置のRGBの値を表示するプログラムを作っています。 このとき、画像がある子ウィンドウにスクロールバーがあるとき、スクロールしたあとでもマウスポインタの指すx、y座標が子ウィンドウの左上になってしまいます。そこで、何ピクセル分x、y座標方向にスクロールしたかがわかって、その分マウスポインタの位置に足せばよいと考えたのですが、何ピクセル分スクロールしたかをどう調べるかわかりません。OnHScrollとOnVScrollを用いるのかな?と思ったのですが、ヘルプを読んでもイマイチわかりません。何か変数に、どれだけx方向にスクロールしたか?y方向にスクロールしたか、を格納できるような処理があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • akinori_s
  • ベストアンサー率60% (21/35)
回答No.2

OnHScrollとあるのでMFCのCScrollViewを使っているのですよね GetScrollPosもしくはGetScrollPositionでスクロール座標を取れませんか?

mkmarimo
質問者

お礼

回答ありがとうございます。早速試してみたところ教えていただいた方法でできました。感謝!また、VC++のことで質問書き込むときがあるかもしれないので見かけた際は是非!よろしくお願いします。

その他の回答 (1)

  • KojiS
  • ベストアンサー率46% (145/312)
回答No.1

スクロールバーは相対的になっているので、自分で計算しないといけません。 全部で何ピクセルあって、ウィンドウサイズがいくつで、スクロールバー最大値がいくつになっているから、スクロールバーがいくつ移動したら何ピクセル分移動した事になる。という感じでしょうか。

関連するQ&A

  • スクロールさせると絵とマウスが離れてしまいます。

    お世話になります。 マウスに絵がくっついてくるスクリプト(スクリプトは↓のとおりです)なんですが、画面をスクロール(縦でも横でも同じです)させると、マウスと絵が離れてしまいます。たとえば下にスクロールさせると、マウスのポインタはスクロール幅だけ下がりますが(パソコン画面上はポインタの絶対的な位置は動かないのでブラウザ上の表示画面がスクロールした分だけ相対的には下がる)、絵の方はブラウザ上の表示位置が変わらないので、スクロールすると上に逃げてしまいます。 離れた状態でも絵は離れた位置で動き回ってはいます。また、スクロールを戻すとまたくっつきます。 どうしたものでしょうか?よろしくお願いします。 <!-- function move(){ pic1.style.pixelLeft=event.x; pic1.style.pixelTop=event.y; } //--> ・ ・ ・ <BODY onmousemove="move()"> <IMG src="******.gif" id="pic1" style="position:absolute;top:50;left:0">

  • ピクセル座標で2点間の直線上の座標点をPHPで求める方法を教えてくださ

    ピクセル座標で2点間の直線上の座標点をPHPで求める方法を教えてください。 やりたいことは、ピクセル座標点A、点Bを直線で結んだ時の ピクセル座標端の座標(X.Y)を求めたいです。 分かっている情報(引数)としては、 点AのX.Y(可変) 点BのX.Y(可変) ピクセル座標の高さ(範囲は0~n) ピクセル座標の幅(範囲は0~n) 条件としては 点Aは必ずピクセル座標の高さ、ピクセル座標の幅の範囲内の場所。 点Bはピクセル座標の高さ、ピクセル座標の幅の範囲外の場所。 点Aから見たときの点Bの場所は上下左右どこの位置でもOK 例えばサンプル画像の例1のように ピクセル座標の高さ30 ピクセル座標の幅40 点A(22.18)点B(20.39)を直線で結び この時のピクセル座標の高さ、ピクセル座標の幅上の座標点を求めたいです。 この場合Yの値は30は決まっているのですが、Xの値を求めたい。 例2の場合はXの値は0は決まっていてYの値を求めたいです。 何か数式にあてはめて求めることが出来るのでしょうか? PHPで作成したあとにそれをC++に置き換えも考えています。 色々考えてみたのですが、 まったくわからない状態です。 どなたかご教授いただければと思います。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 動的に切り替わる指定座標へ、スムーススクロール

    window.scrollTo("0",Y);で、 ウインドウを指定位置に移動させているのですが、 これをスムーススクロール対応するには、 どうすればよいでしょうか? Yは、指定座標(モニタ上の絶対位置)で、 任意のタイミングで、動的に取得してます。 イメージとしては、 関数みたいなのに、Y座標を渡して、 その都度、スムーススクロールさせるような使い方を想定してます。 jQueryとか、プラグインを使ってもいいですが、 なるべくシンプルに行きたいと思ってます。 また、結果的に、ページ内リンクも、スムーススクロールすることになったとしても別に構いませんが、 やりたいのは、リンクをスムーススクロールすることではなくて、 「動的に、都度切り替わる、Y座標へ、スムーススクロールしたい」ってことです。 難しいようであれば、 厳密なスムーススクロールじゃなくても、 何となくそれっぽく見えれば構いません。

  • ポインタが勝手に動いて暴れる、スクロールバーが上に上ってゆく・・・

    ポインタがすごい勢いで暴れます(T□T)真ん中まで矢印を持っていったはずなのに、瞬間移動みたいに下の方に行っちゃいます。しかもマウスをクリックした時の様な表示を勝手に出します。 ポインタの動きが直ったと思ったら、横のスクロールバーが勝手に上ってゆくようになります(T_T)勢いで下に下げて、ポインタをツールバーなどの表示画面外に素早く載せるとその位置で止まってくれます。 マウスが原因かと思い、マウスを引っこ抜いて抜いてもポインタが暴れます。 もう本当にイライラします(-_-;) 再起動すると正常になる時もありますが、最近になってひどくなってきました。 ちなみにノートPCです。 どうしたら良いでしょうか?(T▽T)

  • プログラミング初心者です。お知恵を貸してください。

    閲覧ありがとうございます。 最近プログラミングを学び始めたのですが以下の処理がうまくいかず悩んでいます。 if (画像の現在位置X + 40  <  タッチした位置の座標X,     画像の現在位置X - 40  >  タッチした位置の座標X,     画像の現在位置Y + 40  <  タッチした位置の座標Y ,     画像の現在位置Y - 40  >  タッチした位置の座標Y){ touch = true; } 画像の真ん中(添付した画像の水色の枠内)にポインタを置くとtouchがtrueになるようにしたいのですが真ん中以外にポインタを置いてもtouchがtrueになってしまいます。 数学も苦手で不等号の向きが間違っているのかなんなのか解りません。お知恵を貸してください。

  • ピクセルと地図の距離について

    説明しづらいのですが、8000m×8000mの地図画像をpictureboxに読み込んだんですがマウスムーヴのe.xとe.yで距離を1ピクセル=1mに合わせようとした場合、地図画像も8000×8000ピクセルのサイズに加工するしかないでしょうか?なるべく読み込む画像を大きくしたくないので良い方法がありましたら、よろしくお願いします。

  • MSFlexGridのスクロールバー位置

    VB5(SP3)です。 ある検索条件でMSFlexGridに100行表示させた後、垂直スクロールバーで50行ほど下方向にスクロールさせます。 この状態で違う検索条件で1行表示させた時、垂直スクロールバーの位置が変わらないため(TOPにこない)に何も表示されません。垂直スクロールバーを上方向にスクロールさせれば出てきます。 垂直スクロールバーをTOP位置に持ってくる方法はありませんか? MSFlexGrid.VscrollBar.Value=0とかあれば・・・・

  • スクロールについて

    最近 Update してからなのですが メールに限らず IE においても 下の方に長いページを見る時 マウスポインタを 右のバーの下の方の▼のちょっと上あたりに持っていって クリックすると ちょうど 表示されている1ページ?分だけスクロールしていたのですが それが 1.5ページ分位スクロールしてしまうようになってしまいました。結果 元に戻す為にさらに マウスポインタを 動かさねばならず 全く不便になってしまいました。当方 ノートで使用してますので ホイールマウスを使えとか 言う事は 無しにして どうしたら 前のように 1ページづつ スクロールしてくれるようになるでしょうか。 環境は Win2000 IE6 です。

  • スクロールバーの位置に合わせて画像を移動

    縦のスクロールバーの位置に合わせて画像を移動したいです。 マウスの位置に合わせて移動させる事は可能なのですが、すぐ動いたしまうので。。 一応、マウスの位置に合わせて移動は下記のようにしています(元々、縦横方向の移動を紹介しているページがあったのでそれを拝借して縦方向の移動だけにしています。) <script language="JavaScript"> <!-- mov_value=3; y_add=0; y_cur=0; y_pos=0; y_dotti=0; my_time=0; pos=0; function judge_pos(e){ if(document.layers){y_pos=e.pageY;} if(document.all){ y_pos=document.body.scrollTop+event.clientY; } if(y_cur<=y_pos)y_dotti=1; else y_dotti=0; disp(); } function disp(){ if(pos==0){pos=1; y_cur=y_pos;} if(y_dotti==1 && y_cur<=y_pos+y_add)y_cur+=mov_value; else if(y_dotti==0 && y_cur>=y_pos+y_add)y_cur-=mov_value; if(document.layers){ document.layers["lay0"].moveTo(y_cur); document.layers["lay0"].visibility='show'; } if(document.all){ document.all("lay0").style.pixelTop=y_cur; document.all("lay0").style.visibility='visible'; } if(y_dotti==1 && y_cur<=y_pos+y_add){ clearTimeout(my_time); my_time=setTimeout('disp();',20); } else if(y_dotti==0 && y_cur>=y_pos+y_add){ clearTimeout(my_time); my_time=setTimeout('disp();',20); } else { y_cur=y_pos; } return false; } if(document.layers)document.captureEvents(Event.MOUSEMOVE); document.onmousemove=judge_pos; //--> </script>

  • VB2005 スクロールバーポジション

    PanelにPictureBoxを入れてます。 PictureBoxがPanelより大きな時スルロールバーがでますが、その位置(Position)を取得したり設定するにはどうするのでしょうか? またスクロールさせた時、PictureBoxの描画範囲(Panel内の表示されている部分)の左座標、上座標、右座標、下座標の値を取得するには、どうしたらできるでしょうか?

専門家に質問してみよう