はじめまして。行き詰ってしまったのでアドバイスお願いします。
.NET 2005 VC++/CLIで作成しています。
ボタンの右端にカーソルが来たときにカーソルをチェンジしたいのですがボタン左の座
標は取得できたのですが右端の座標が取得できません。
もしよろしければアドバイスお願い致します。
>ボタンの右端
とは具体的にどこでしょうか?
>ボタン左の座標は取得できたのですが
はどのようにして取得しているのでしょうか?
ボタンの右端とはボタンの横の長さの終端値です。座標はプロパティのLocationの値を
取得しています。イメージとしてはボタンの右端に来たときにカーソルを他のカーソル
に変えてボタンを引き伸ばせるようなアプリを作成しています。
よくわからないけど、ボタンのSizeプロパティから持ってこれないのでしょうか?
System::Drawing::Point a;
a = button1->Location::get();
上記にてボタンのX、Yの座標は取得できたのですがこのうちのX座標の値だけを
取得したいのですが方法はありますか?Point::XでX座標の値が取得出きるようなのです
が今一使い方が分かりません。
>今一使い方が分かりません。
ヘルプを読みましょう。
http://msdn2.microsoft.com/ja-jp/library/system.drawing.point_members
(VS.80).aspx
>a = button1->Location::get();
::get();
はなくても取得できませんか?
System::Drawing::Point a = button1->Location;
// 左上
int x = a.X; // Pointは値型なので -> では取得できない。
int y = a.Y;
System::Drawing::Size b = button1->Size;
a.Offset(b.Width, b.Height);
// 右下
int xx = a.X;
int yy = a.Y;
System::Drawing::Point a;
a = button1->Location::get();
int temp= a.X;
すみません。上記で取得出来ました。
Blueさん
System::Drawing::Point a = button1->Location;
上記でも取得出来ました(^^)
Locationプロパティだと左上の座標がデフォルトで取得できるのですが右下の座標を取
得したい場合はどのようにしたら良いでしょうか?
>右下の座標を取得したい場合
ボタンのSizeプロパティから計算するということは、既に(ソースコードも)書きました
が?
Blueさん
すみません、サンプルソースありがとうございました。おかげさまで取得出来ました!
あと一息ですので頑張ってみます。
たびたびすみません・・・。
現在はフォーム上にあるボタンの両端にマウスが来た際にマウスカーソルをチェンジす
る所までは出来ていますがその後にボタンをリサイズする所が上手くいきません。
やりたいのはボタンの端にマウスが来たときにカーソルを「横に伸ばせます」のお知ら
せカーソルに変えてボタンを横に引き伸ばしたいのです。
現在のステータスは
ボタンのマウスムーブイベントで両端の座標を取得し両端の座標がマウスカーソルの座
標と一致した時にカーソルチェンジをしています。ここまでは出来ているのですがその
後のボタンを伸ばす(button->width)をどこのイベントに書いて良いのか分かりませ
ん。マウスアップイベントに記述してしまうとマウス移動中は描画されないため見た目
がおかしくなってしまいます。
似たような描画プログラムを作成したかたよろしければ力を貸してください。
マウスダウン/ムーブ/アップを組み合わせてみてはどうでしょうか?
Blueさん
こんにちは、またお世話になりすみません。
マウスムーブイベント内に
private: System::Void button1_MouseMove(System::Object^ sender,
System::Windows::Forms::MouseEventArgs^ e) {
//カーソルのX座標を取得する
int ret = e->X;
//ボタンの右端の座標を取得する
System::Drawing::Size a = button1->Size;
int ret1 = a.Width;
//ボタンの左端と右端にカーソルがある時にカーソルをチェンジする
if((ret==0)||(ret==ret1-1)){
button1->Cursor = Cursors::SizeWE;
}
else{
button1->Cursor = Cursors::Default;
}
}
マウスアップイベント内に
private: System::Void button1_MouseUp(System::Object^ sender,
System::Windows::Forms::MouseEventArgs^ e) {
//カーソルのX座標を取得する
int ret = e->X;
//カーソル分ボタンをリサイズする
button1->Width::set(ret);
}
としています。やりたいのはマウスを押しながら横にマウスを動かすとリアルタイムに
ボタンのサイズが変更できるようにしたいのですがドラッグ中のイベントが取得できな
いためマウスアップに記述してしまっています。何か上手い方法はありますでしょう
か?
マウスムーブイベント内で上手く出来ました!
いろいろとありがとうございました。