C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 実行時におけるコントロールのサイズ変更と移動


(過去ログ 13 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■3931 / inTopicNo.1)  実行時におけるコントロールのサイズ変更と移動
  
□投稿者/ 胡蝶 (1回)-(2007/05/29(Tue) 10:42:34)

分類:[C++/CLI] 

お世話になります。
VC++2005.NET Managed で教えて頂きたいことがあります。

実行時に、あるコントロール(PictureBoxでも何でもかまいません)をクリックするとコントロールのサイズ変更と移動を行えるようにしたいと考えています。
サイズ変更と移動はクリックする位置により指定します。
SizeableなFormみたいなイメージで、端の方をクリックしてひっぱると拡大縮小ができ、真ん中あたりをクリックすると移動としたいと考えております。
以下のようなプログラムを考えたのですが、行き詰っております。

pBox_MouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)
{
if (e->Button != System::Windows::Forms::MouseButtons::Left)
{
//Xのクリック位置を調べる
//Yのクリック位置を調べる
//Xのクリック位置、Yのクリック位置からカーソルの形状を決定する
}
else //マウスの左が押された時
{
//ここで処理をしたいが不明
}
}

参考になるかと「実行時におけるコントロールのDragによるサイズ変更方法について」を調べましたが、VBに不慣れなこともあり理解できません。
ttp://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1066360&SiteID=7

ご教示よろしくお願いします。




引用返信 編集キー/
■3938 / inTopicNo.2)  Re[1]: 実行時におけるコントロールのサイズ変更と移動
□投稿者/ オノデラ (16回)-(2007/05/29(Tue) 13:07:42)
オノデラ さんの Web サイト
コントロールのドラッグであればこんな感じになるのかな?(すみません、10分程度で作ったものなので結構適当です(^^))

http://sorceryforce.com/other/ControlDrag.zip

サイズ変更だともう少し難しくなりそうだけど、そもそもコントロールを直接「置く」のではなくて、コントロールを「描画」して独自に矩形を保持するような形の方が理想かもしれません。(ただ、どういうアプリにするのかにもよりますが)
引用返信 編集キー/
■3942 / inTopicNo.3)  Re[2]: 実行時におけるコントロールのサイズ変更と移動
□投稿者/ 胡蝶 (2回)-(2007/05/29(Tue) 15:20:47)
オノデラ さん、ありがとうございます。

オノデラさんのソースを参考にして、
コントロールを配置する方法で試してみましたが、同様に移動は行うことができました。
現在、こんな感じです。インデントが無効になるようなので、読みにくくてすいません。

pBox_MouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)
{
if (this->bDraging == false)
{
if (e->Button != System::Windows::Forms::MouseButtons::Left)
{
//Xのクリック位置を調べる
//Yのクリック位置を調べる
//Xのクリック位置、Yのクリック位置からカーソルの形状を決定する
}
else //マウスの左が押された時
{
//マウスが押された点を記憶する
this->bDraging = true;
}
}
else
{
if (//コントロール移動か拡大縮小か判定する)
{
//移動の場合の処理
}
else
{
//拡大縮小の場合の処理
}
}
}

困っているのは拡大縮小の場合の処理です。
移動と同様のやり方を試した所、なぜかコントロールが非表示となってしまいます。
やり方が間違っているのでしょうか。

コントロールの拡大縮小についてご教示願えませんか?

引用返信 編集キー/
■3943 / inTopicNo.4)  Re[3]: 実行時におけるコントロールのサイズ変更と移動
□投稿者/ ぽぴ王子 (207回)-(2007/05/29(Tue) 15:24:47)
ぽぴ王子 さんの Web サイト
No3942 (胡蝶 さん) に返信

> 現在、こんな感じです。インデントが無効になるようなので、読みにくくてすいません。

投稿モードを「図表モード」にすればインデントは有効になります。
引用返信 編集キー/
■3948 / inTopicNo.5)  Re[4]: 実行時におけるコントロールのサイズ変更と移動
□投稿者/ 胡蝶 (3回)-(2007/05/29(Tue) 18:33:52)
ぽぴ王子 さん、図表モードですね。了解しました。

なんとか自力でゴールにたどり着けました。みなさまの協力ありがとうございます。
ソースコードは機密事項を取り除くのが大変になるくらい長くなってしまいましたので、
要点をまとめることで解決とさせて下さい。
コントロールはPictureBoxを使いました。(イメージなし、SizeMode Normalにしています)、

(1) カーソルの変更について
PictureBoxの端からどのポイントにあるのかをX方向は、右・左・中、Y方向は上、下、中ととります。
右上や左下の場合は、Cursors::SizeNWSEという風にカーソルを変更するようにしました。
(2) 位置変更について
ドラッグ中かドラッグ中でないかを判別するフラグを作り、ドラッグ開始時にドラッグ開始点を記憶します。
ドラッグ開始点をPointDragとします。pBoxはピクチャーボックス
pBox->Location.X += e->X - PointDrag.X
で、X位置を変更できました。Y位置についても同様です。
(3) サイズ変更について
上と下、左と右の端それぞれで処理が変わります。上左というのも考えなければならないと思います。
上と左を変更する場合は、サイズを変更すると共に、ロケーションを変更する必要があります。
上、左の場合、下記コードの後、位置変更をします。
pBox->Width += -e->X + PointDrag.X
下、右の場合、
pBox->Width += e->X - PointDrag.Xを行った後で、
PointDrag.X = e->Xで、ドラッグ開始点の更新をする必要があるようです。(この処理がなかった為に、ピクチャボックスが消えていた)

要点だけをまとめたつもりです。ご協力ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -