2016-06-13 12 views
0

私はこのC++ MFCアプリケーションをC#WinFormに移植しようとしています。進行中の作業です。基本的に、私はいくつかのグループボックス領域に描画やりたい:グループボックス内でWinFormペイントイベントを使用する

Dialog design

私は自分の仕事をするためにフォームにペイントハンドラを追加しました:

private void FullColourPaletteForm_Paint(object sender, PaintEventArgs e) 
{ 
    // Do painting with e.Graphics 
} 

私はそれがなかったことを見て驚きました私のレンダリングを表示しない。しかし、Winformではgroupboxと呼ばれるのではなく、containerと呼ばれています。だから、私は目に見えないようにコンテナを設定し、当然のことながら(ない全く正しいが)私のレンダリングが今visbleた:

Dialog resultsどのように私は、コンテナの領域内で私の絵を行うことになっていますか?

これはなぜですか?私がしたのは、次のとおりです。

private void groupBox1_Paint(object sender, PaintEventArgs e) 
{ 
    base.OnPaint(e); 
} 

私のフォームのペイントが表示されます。

+0

代わりにGroupBoxのペイントイベントを使用してください。 –

+0

ありがとうございます。更新された質問をご覧ください。 –

+0

各コントロールには、独自のペイントイベントがあります。フォームが描画されると(可視性が変更されたとき)、各コントロールの 'OnPaint'メソッドが呼び出されます(ペイントの最後に' Paint'イベントを呼び出します)。あなたがしようとしているのは、パレットを描画するためのカスタムコントロールを作成することです。 'GroupBox'にする必要はありません。代わりに' Control'を使うことができます。その 'GroupBox'ボーダーを保持したい場合は、' Paint'メソッドをオーバーライドし、 'base.OnPaint'を最初に呼び出して、その上に描画することができます。これが当てはまるかどうかは確かではありませんが、すべてを自分で描くことが必要な場合もあります( 'ControlPaint.DrawBorder'を使って枠線を描くことができます)。 – Sinatr

答えて

1

各ウィンドウ(コントロール、フォームなど)にはそれぞれ独自のペイントがあり、通常はそのペイントからクリッピングされます(除外されます)。

GroupBox(または任意のコントロール)の内部に描画する場合は、フォーム1ではなく、対応するコントロール(GroupBoxの場合)Paintイベントで処理する必要があります。

private void groupBox_Paint(object sender, PaintEventArgs e) 
{ 
    var area = groupBox.DisplayRectangle; 
    // Draw inside the area 
    e.Graphics.FillRectangle(Brushes.Green, area); 
} 
+0

私は 'PictureBox'ボックスを内部に置いてしまい、ネイティブで' DoubleBuffering'をサポートしているので、 'Paint'イベントを使用しました。 –

関連する問題