VB6 SP5 WindowsXP SP2
フォーム上にフレームをはり、そのフレーム上にテキストボックスを
はります。
このとき、テキストのTopプロパティの値はフレームのTopを0とした
相対的な値になるのですが、これとは別にフォームのTopを0とした
絶対的な値を取得することはできるでしょうか?
テキストボックスのTopにフレームのTopを足したらダメなの?
フレームのTopを加算してもいいのですが、フレームが何重にも
重なる場合面倒だなと思い、フレームの有無に関わらず取得できれば
便利です。
Container のコントロールを見て、それが Parent のコントロール
(つまり Form)と同じものになるまで、コンテナからの相対位置を
繰り返し取得し続けていくとか。
一番上のフォームの絶対座標を取得
テキストの絶対座標を取得
あとは計算する。
「Win32API」の「ClientToScreen関数」を使えばできるのでは?
(1)Formのクライアント領域左上(0,0)のScreen座標を求める。
(2)テキストボック(実際に座標を求めたいコントロール)の、
フレーム(そのコントロールの直接のコンテナコントロール)上の
位置(.Left,.Top)のScreen座標を求める。
(3)(2)と(1)の差を求める。
とか・・・
#コレなら、間に何階層あっても、同じ処理で済むはず・・・
ClientToScreenよりもMapWindowPointsの方が楽そうな。
iRet = MapWindowPoints(Text1.hWnd, Me.hWnd, 0, 0)
MapWindowPointsで取得することができました。
どうもありがとうです。
ツイート | ![]() |