ボタン上のある位置でカーソルを変えるには? – プログラミング – Home

ボタン上のある位置でカーソルを変えるに...
 
通知
すべてクリア

[解決済] ボタン上のある位置でカーソルを変えるには?

固定ページ 1 / 2

SE
 SE
(@SE)
ゲスト
結合: 18年前
投稿: 12
Topic starter  

はじめまして。行き詰ってしまったのでアドバイスお願いします。

.NET 2005 VC++/CLIで作成しています。

ボタンの右端にカーソルが来たときにカーソルをチェンジしたいのですがボタン左の座
標は取得できたのですが右端の座標が取得できません。
もしよろしければアドバイスお願い致します。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>ボタンの右端
とは具体的にどこでしょうか?

>ボタン左の座標は取得できたのですが
はどのようにして取得しているのでしょうか?


返信引用
SE
 SE
(@SE)
ゲスト
結合: 18年前
投稿: 12
Topic starter  

ボタンの右端とはボタンの横の長さの終端値です。座標はプロパティのLocationの値を
取得しています。イメージとしてはボタンの右端に来たときにカーソルを他のカーソル
に変えてボタンを引き伸ばせるようなアプリを作成しています。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

よくわからないけど、ボタンのSizeプロパティから持ってこれないのでしょうか?


返信引用
SE
 SE
(@SE)
ゲスト
結合: 18年前
投稿: 12
Topic starter  

System::Drawing::Point a;
a = button1->Location::get();

上記にてボタンのX、Yの座標は取得できたのですがこのうちのX座標の値だけを
取得したいのですが方法はありますか?Point::XでX座標の値が取得出きるようなのです
が今一使い方が分かりません。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>今一使い方が分かりません。
ヘルプを読みましょう。
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;


返信引用
SE
 SE
(@SE)
ゲスト
結合: 18年前
投稿: 12
Topic starter  

System::Drawing::Point a;
a = button1->Location::get();
int temp= a.X;

すみません。上記で取得出来ました。


返信引用
SE
 SE
(@SE)
ゲスト
結合: 18年前
投稿: 12
Topic starter  

Blueさん

System::Drawing::Point a = button1->Location;

上記でも取得出来ました(^^)


返信引用
SE
 SE
(@SE)
ゲスト
結合: 18年前
投稿: 12
Topic starter  

Locationプロパティだと左上の座標がデフォルトで取得できるのですが右下の座標を取
得したい場合はどのようにしたら良いでしょうか?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>右下の座標を取得したい場合
ボタンのSizeプロパティから計算するということは、既に(ソースコードも)書きました
が?


返信引用
SE
 SE
(@SE)
ゲスト
結合: 18年前
投稿: 12
Topic starter  

Blueさん

すみません、サンプルソースありがとうございました。おかげさまで取得出来ました!
あと一息ですので頑張ってみます。


返信引用
SE
 SE
(@SE)
ゲスト
結合: 18年前
投稿: 12
Topic starter  

たびたびすみません・・・。

現在はフォーム上にあるボタンの両端にマウスが来た際にマウスカーソルをチェンジす
る所までは出来ていますがその後にボタンをリサイズする所が上手くいきません。

やりたいのはボタンの端にマウスが来たときにカーソルを「横に伸ばせます」のお知ら
せカーソルに変えてボタンを横に引き伸ばしたいのです。

現在のステータスは

ボタンのマウスムーブイベントで両端の座標を取得し両端の座標がマウスカーソルの座
標と一致した時にカーソルチェンジをしています。ここまでは出来ているのですがその
後のボタンを伸ばす(button->width)をどこのイベントに書いて良いのか分かりませ
ん。マウスアップイベントに記述してしまうとマウス移動中は描画されないため見た目
がおかしくなってしまいます。

似たような描画プログラムを作成したかたよろしければ力を貸してください。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

マウスダウン/ムーブ/アップを組み合わせてみてはどうでしょうか?


返信引用
SE
 SE
(@SE)
ゲスト
結合: 18年前
投稿: 12
Topic starter  

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);

}

としています。やりたいのはマウスを押しながら横にマウスを動かすとリアルタイムに
ボタンのサイズが変更できるようにしたいのですがドラッグ中のイベントが取得できな
いためマウスアップに記述してしまっています。何か上手い方法はありますでしょう
か?


返信引用
SE
 SE
(@SE)
ゲスト
結合: 18年前
投稿: 12
Topic starter  

マウスムーブイベント内で上手く出来ました!

いろいろとありがとうございました。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

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