|
■No7624 (魔界の仮面弁士) に返信
>>サンプルソースコードなどいただけないでしょうか?
> すみません。簡単な動作検証を行った後、すぐに消しちゃったんですよね…。(^_^;)
> # ドラッグ位置に合わせて拡張することはできたけど、縮小処理まで書くのが面倒になったので。
すみませんが、今は再度書き直す余力が無いので、コードの概要だけ書きます。
# 概要だけに、細かい意味が伝わらないかも知れませんが、そこは御容赦を。
その時の実験コードは、フォームを縦6個、横6個ぐらいの領域(セル)に見立てて、
using (Graphics g = Graphics.FromImage( 背景指定用Bitmap ))
using (Brush b = new SolidBrush( 標準の背景色 ))
{
// 一度、全部の領域を表示状態にする
g.Clear(this.TransparencyKey);
// CellArea は、各セルの表示状態を管理するための自作クラス
// sheets は、それを管理するためのコレクションクラス
foreach (CellArea cell in sheets)
{
if (cell.Visible)
{
// 可視領域だった場合は、その領域を背景色で塗りつぶす
g.FillRectangle(b, cell.ClientRectangle);
}
}
}
のようにして、BackgroundImage 用の Bitmap を再描画していました。
あとは、マウスのドラッグ処理に合わせて、MouseMove イベントあたりで、
sheets[行, 列].Visible を反転させる処理を書いた程度。
上記以外では、再描画目的でフォームの Invalidate も呼んでいたかも。
|