• ベストアンサー

windowプログラム ピクチャーコントロールに円描画

タイトルどおりにしたいのですが、どうすればいいのでしょうか? フォームとピクチャーコントロールがあり、 ピクチャーコントロールにもクラスを作成してあります。 円はArcを使ってかければいいなと思っております よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

 こんにちは。OnPaint()を追加して描写すればOKです。  以下参考程度に。 // CPictureBox メッセージ ハンドラ void CPictureBox::OnPaint() { CPaintDC dc(this); // 描画用のデバイス コンテキスト // TODO: この位置にメッセージ ハンドラ用のコードを追加してください CPen pen(PS_SOLID, 1, RGB(0, 255, 0)); dc.SelectObject(&pen); RECT rc; this->GetClientRect(&rc); const POINT ptStart = {rc.right / 2, 0}; const POINT ptEnd = {rc.right / 2, 0}; dc.Arc(&rc, ptStart, ptEnd); // 描画用メッセージとして CStatic::OnPaint() を呼び出してはいけません }

takeaduma
質問者

お礼

ご回答ありがとうございます。 無事通りましたが、 もしピクチャコントロールが3つあって1つにのみ表示したい場合はどうすればよいのですか? ※ピクチャコントロールすべてにクラス有

その他の回答 (1)

回答No.2

 御礼頂き有難うございます。 >>もしピクチャコントロールが3つあって1つにのみ表示したい場合はどうすればよいのですか? >>※ピクチャコントロールすべてにクラス有 (1)全てに同じクラスを使用しているのでしょうか?  手っ取り早いのはbool形のフラグを用意して、それぞれに描くか描かないかを決めさせる事です。 (2)ピクチャコントロールが3つ有る(以下AとBとC)と言う事ですが、ABCのうちAだけArc()で円を描いて、BCは何もしないのであるならば、  クラスを二つ用意するやり方もあります。  【クラスA】OnPaint()の有るクラスを準備して設定  【クラスBとC】OnPaint()の無いクラスを準備して設定  ただし、BCもそれぞれに、別の絵を描かせたいとなると(1)(2)共、使い物にならなくなります。  やり方は色々ありますが、手っ取り早い話、ABCそれぞれのクラスを準備してそれぞれのOnPaint()で、描写の仕方を変えるのが手っ取り早いでしょう。  如何してもABC共同じクラスを使用して、描写の仕方だけ変えたいのであるならば、関数ポインタ又はpimplイディオムを使用する事に成るかもしれません。

takeaduma
質問者

お礼

お礼遅れ申し訳ございません アドバイスの結果、無事動きました。 教えていただいたプログラムをもう1度見直し、次は梃子摺らず書ける様にしていきたいです。 ありがとうございました。 すごく助かりました

関連するQ&A

  • ピクチャーコントロールへの描画方法について

    お世話になります、fujitomoです。 現在、Visual Studio2005にてC++のダイアログベースのアプリケーションを作成しており、行き詰った箇所があったため質問させて頂きました。 アプリケーションの内容としては 現在、アプリケーションで、ダイアログベース上にピクチャーコントロールを2つ設置し、それぞれに波形を描画させています。 ピクチャーコントロールへの波形の描画にはメモリデバイスコンテキストを使い、それぞれ波形描画用のCStatic派生クラスを作成し、そのクラスを SubclassDlgItem でメインダイアダイアログのサブクラスとし、描画間隔として、それぞれの描画クラス内で SetTimer(1,10,NULL) でタイマーイベントを起こし、メモリデバイスコンテキストの描画更新をしています。 ここで質問させていただきたい事なのですが、 2つのピクチャーコントロールのうち、1つのピクチャーコントロールへのみ波形描画を実行させているときはピクチャーコントロールの端から端まで描画が約7秒かかるのに対し、 2つのピクチャーコントロールの描画を同時に実行させた場合には端から端までで約11秒もかかってしまいます。 これを何とか、1つのピクチャーコントロールへの描画時間と同じ時間まで早く出来ればなと思っているのですが、どの様に工夫すれば時間短縮をさせることが出来ますでしょうか? 2つのクラスでそれぞれ10msのタイマーを動かしているのが問題なのかと思い、メインダイアログで10msのタイマーイベントを発生させ、それぞれの描画クラスに描画更新のメッセージを送信させるようにコードを変更してみたのですが、やはり同じ結果となりました。 開発環境は Widows CE 6.0 Visual Studio 2005 です。 ご意見、ご回答をお待ちしております。よろしくお願い致します。

  • タブコントロール上のピクチャーコントロールへの描画

    お世話になっております。 VC2005を使用しております。 SDIベースです。 ダイアログを作成し、その上にタブコントロール(2ページ)を作成しました。 タブコントロールの1ページ目にピクチャーコントロールを配置し、ピクチャーコントロール上に描画を行おうと思うのですが、正常に動作しません。 OnPaintの中で描画を行っているのですがだめのようです。 タブコントロール外に、ピクチャーコントロールを配置すると描画する事ができます。 どのような、タイミングで描画を行えばよいのでしょうか? 教えてください。 よろしくお願いします。

  • ビットマップに描画をしてピクチャーコントロールに貼り付けるためには?

    ビットマップに描画をしてピクチャーコントロールに貼り付けるためには どうすればよいでしょうか? ネットで検索しましたそして、 下のようなコードを書きましたがうまくゆきません。 void CXXXView::OnButton() { CStatic m_ctlImage; // ピクチャーボックスに関連付けした変数 CBitmap m_bmpImage; // ピクチャーボックスに貼り付けるイメージ CDC m_dcImage; // Bitmap描画用のDC CDC* pDC = m_ctlImage.GetDC(); m_dcImage.CreateCompatibleDC(pDC); CRect Cltsz; picture1.GetClientRect(&Cltsz); m_bmpImage.CreateCompatibleBitmap(pDC,Cltsz.Width(),Cltsz.Height()); CBitmap* pOld=m_dcImage.SelectObject(&m_bmpImage); CPen myPEN(PS_SOLID,5,RGB(0,0,255)); CPen* oldPEN=m_dcImage.SelectObject(&myPEN); m_dcImage.MoveTo(10,10); m_dcImage.LineTo(100,100); m_dcImage.SelectObject(oldPEN); m_dcImage.SelectObject(pOld); m_ctlImage.SetBitmap(m_bmpImage); } この様にしましたが、ピクチャーコントロールには 何も描画されません、 何故でしょうか? VS2005で、ボタンをクリックした イベントで描画する場合です、 直線とかは、問題なく描画できました。 ビットマップに描画して貼り付けたいのです、 よろしくお願いします

  • Image or Pictureコントロールについて

    VB6でImageコントロールとPictureコントロールを使って簡単なアニメーションを作っている最中に以下の事を気づきました。 Pictureコントロールの場合、背景色がBackgroundColorなのに対し、作成した画像が透過GIFの為かImageコントロールは画像の部分だけ表示されて、後ろの画像に溶け込んだように表示されます。 機能面ではPictureコントロールの方が上(Imageコントロールに無い機能は何かは知りませんが)のような気がしたのですが、この場合の見た目はImageコントロールの方が良いのですが、本来こういうものでしょうか? ちなみにVB.NETはどうなっているのでしょうか?

  • Picture1に二つの円

    今、あせってます pictureboxに動く円と円を書き込みたい のですが動く円はできました。 ですが1度に二つの円を記入できずに 困ってます。 picture1.cls picture1.cirecre(12000,200),200

  • Picture の描画について 質問です

    「[Picture1]に描画された図形」の上に 「[Picture2]に描画された図形」を重ねて表示したいのですが、 この場合、[Picture2]の背景のみを透明にして、描画された図形のみを表示するという事をしたいです。 例 a「[Picture1]に半径6cmの色が赤の円」 b「[Picture2]に半径3cmで色が黒の円」 aの上にbを重ねると、外側が赤、内側が黒の二重丸が描画される という具合です。  この描画が可能なら[Picture1]に限らず他のものでも構いませんので、どうか御教授お願いします。

  • shapeを描画

    教えてください! フォーム上のpictureboxにshapeで四角を描画したいのですが、あらかじめpicture上にshapeコントロールを貼り付けないで動的に任意の数だけ四角を描画したいです。 教えてください。

  • Pictureコントロールの画像の書き出し

    VB6において、PictureClipコントロールから切り出した画像を、Pictureコントロールにクリップし、更にその上にLineコマンドで線を描画しました。 その画像をSavePictureコマンドで、ファイルへ書き出したのですが、クリップした画像のみ書き出され、描画した内容が保存されません。 PictureコントロールのAutoRedrawプロパティはTrueにしてあります。 他に何か設定等が必要でしょうか? よろしくお願いします。

  • C#ピクチャーボックス再描画について

    C#ピクチャーボックス再描画について 動的生成したピクチャーボックスに文字を描画します そのあと、そのピクチャーボックスをD&DでForm内を移動できるようにしています その際、あるピクチャーボックスが別のピクチャーボックスの上を通過したり 他のコントロールが上になったりすると、描画した文字が消えてしまいます。 再描画について調べるとRefleshやUpdateとかができました。 しかし、Refleshを使うと文字を描画する前の状態を再描画してしまいます。 再描画の方法はTimerで10ミリ秒毎ぐらいにしようと思ってます。 Refleshをピクチャーボックスに文字を描画させた後に再描画できるように設定できればいいんですが…。 他に方法があったりしたら教えてください!!

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

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

専門家に質問してみよう