- 締切済み
【VC++】コントロールの上に描画
【VC++】コントロールの上に描画 Visual C++ 2005環境です。 ニコニコ動画みたいな動画プレイヤを作ろうとしているのですが、 作成するにあたって、コントロールの上にテキストを描画する方法で悩んでいます。 ボタンでもチェックボックスでもなんでも良いのですが、 そういったフォーム上のコントロールの上にテキストなり図形なりを描画するのって どういう方法で実装したら良いのでしょうか? サンプルのコードがあれば嬉しいですが、 無くても「こういうものを調べれば出来る」という取っ掛かりだけでも 教えて頂けると助かります。 すみませんが、方法ご存知の方居ましたらお願いします。
- みんなの回答 (4)
- 専門家の回答
VC++は素人だけれども、、、 こういう方法ではどうなのでしょうか? つまり、「BackgroundImageに描画する」という方法です。 button1とbutton2を置き、button2でbutton1に線を引いてます。 <参考> http://imagingsolution.blog107.fc2.com/blog-entry-42.html この中を、PictureBoxのImageからbuttonのBackgroundImageに変更して、 やった範囲ではうまく行っているようにみえていますが。 文字描画はDrawStringの使い方が分からなくてやってない。 ※ Disposeしなくていいのだろうか。。。 //---------------------- private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { Graphics^ g = Graphics::FromImage(button1->BackgroundImage); g->Clear(Color::Red); Pen^ p = gcnew Pen(Color::Black, 2); g->DrawLine(p, 0, 0,button1->Width, button1->Height); this->button1->Invalidate(); } private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { //button1と同じ大きさのBitmapクラスを作成する。 Bitmap^ bmp = gcnew Bitmap(button1->Width, button1->Height); //空のBitmapをbutton1のBackGroundImageに指定する。 button1->BackgroundImage = bmp; } //----------------------
- titokani
- ベストアンサー率19% (341/1726)
基本無理です。 DC(デバイスコンテキスト)を奪えばそのときだけは書くことができますが、コントロール字体が再描画を行ってしまうと、それは消されてしまいます。 コントロールのオーナードローを使うか、コントロールをサブクラス化してWM_PAINTを処理する方法もありますが、複数のコントロールにまたがった描画を行うことはできません。 リージョンを使って、描画したいテキストなり図形なりの形のウィンドウを作成する方法もあります。描画するテキストが煩雑に変化する場合はパフォーマンスが心配です。 あとは、レイヤードウィンドウを使う方法でしょうか。パフォーマンスも悪くなかったと思いますが、確か子ウィンドウには使えなかったと思います。
- php504
- ベストアンサー率42% (926/2160)
「オーナードロー」はどうでしょう 検索すればサンプルもあると思います