CRect::MoveToYについて

[戻る]
ごん 2011/08/11(木) 14:47:08
開発環境はVC++6.0です。

CRect::MoveToYを使用したいのですがコンパイルが通りません。

【エラー】
 error C2039: 'MoveToY' : 'CRect' のメンバではありません。

【ソースコード】
 CRect rect(0, 0, 100, 100);
 rect.MoveToY(10);

CRectのクラスを見てみましたが確かにMoveToYは定義されていませんでした。
これは自分でソースを追加しなければいけないのでしょうか?

みい 2011/08/11(木) 16:54:36
2003以降で追加された関数ですので、VC6では使えません。
自力で作成する必要があります。

みい 2011/08/11(木) 16:56:22
<追記>
OffsetRectで代用できませんか?

aetos 2011/08/11(木) 17:10:35
VC++ 6.0 ではないのかな。2003 からあるようですね。
VC++ 6.0 を使う限りは、CRect::MoveToY と書いてコンパイルを通すということは諦め
るしかないでしょう。
同じ結果になるような自作メソッドを別途つくりましょう。
CRect のソースコードを書き換えるようなことはやめましょうね。

ごん 2011/08/11(木) 17:17:45
[[解決]]
みいさん
VC++6.0では、MoveToYは使用できないのですね。
勉強不足で申し訳ありません。

OffsetRectで代用出来ました。
ありがとうございます。

【ソースコード】
 CRect rect(0, 0, 100, 100);
 rect.OffsetRect(0, 10);

ごん 2011/08/11(木) 17:23:28
[[解決]]
aetosさん
入れ違いになり申し訳ありません。

>同じ結果になるような自作メソッドを別途つくりましょう。
>CRect のソースコードを書き換えるようなことはやめましょうね。

今回は代用関数がありましたが今後同じようなことがあれば気をつけたいと思います。
ありがとうございます。

仲澤@失業者 2011/08/12(金) 15:32:16
解決しちゃってますが、
 rect.MoveToY(10);
と
 rect.OffsetRect(0, 10);
とは、意味も動作も違います。

1.MoveToY(n)は「全体のY位置をnへ移動。
 つまり bottom=n+Height()、top=n」
2.OffsetRect(0, n)は「topとbottomへnを加算。
 つまり bottom+=n、top+=n」ですね。

まぁ、本人の意図した動きであったのならそれでよいですけど(vv;)。

みい 2011/08/12(金) 16:36:14
>【ソースコード】
> CRect rect(0, 0, 100, 100);
> rect.OffsetRect(0, 10);
ちゃんと使い方まで書いておけばよかったですね(^^;)
ちょっと時間がなかったのでごめんなさい。
Top=0からの移動だからこれでも大丈夫ですが、
「移動したい位置−現在位置」でオフセット算出して
OfssetRectの引数にセットするのが正しい代用方法です。

ごん 2011/08/18(木) 13:45:25
仲澤@失業者さん
みいさん

確認遅くなり申し訳ありません。
今回は,エディットボックスを縦方向にセンタリングしたく質問致しました。
偶然Top=0なのでうまく出来たようです。

補足ありがとうございます。大変勉強になりました。

古いスレッドには追加発言できません。