• 締切済み

【VC++】コントロールの上に描画

【VC++】コントロールの上に描画 Visual C++ 2005環境です。 ニコニコ動画みたいな動画プレイヤを作ろうとしているのですが、 作成するにあたって、コントロールの上にテキストを描画する方法で悩んでいます。 ボタンでもチェックボックスでもなんでも良いのですが、 そういったフォーム上のコントロールの上にテキストなり図形なりを描画するのって どういう方法で実装したら良いのでしょうか? サンプルのコードがあれば嬉しいですが、 無くても「こういうものを調べれば出来る」という取っ掛かりだけでも 教えて頂けると助かります。 すみませんが、方法ご存知の方居ましたらお願いします。

みんなの回答

noname#166246
noname#166246
回答No.4

やりたいのはこういうことでしょうか? VBでできたので、VC++でも出来るはず、、、 ところで、動画はどこに表示するのでしょうか? 単にPictureBox上とかですか? で、描画は、その上だけなのでしょうか、それともコントロールを またいで行ないたいのでしょうか?

noname#166246
noname#166246
回答No.3

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)
回答No.2

基本無理です。 DC(デバイスコンテキスト)を奪えばそのときだけは書くことができますが、コントロール字体が再描画を行ってしまうと、それは消されてしまいます。 コントロールのオーナードローを使うか、コントロールをサブクラス化してWM_PAINTを処理する方法もありますが、複数のコントロールにまたがった描画を行うことはできません。 リージョンを使って、描画したいテキストなり図形なりの形のウィンドウを作成する方法もあります。描画するテキストが煩雑に変化する場合はパフォーマンスが心配です。 あとは、レイヤードウィンドウを使う方法でしょうか。パフォーマンスも悪くなかったと思いますが、確か子ウィンドウには使えなかったと思います。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

「オーナードロー」はどうでしょう 検索すればサンプルもあると思います

関連するQ&A