• ベストアンサー

ピクチャーコントロールのデバイスコンテキストを取得するためには?

VC2005についてです ピクチャーコントロールのデバイスコンテキストを取得するためには どうすればよいでしょうか? MDIGetActive()->GetDC()->TextOutA(20,50,"文字列です"); この様にすれば、アクティブになった 子ウィンドウデバイスコンテキストを取得することができますが、 アクティブになった、この子ウィンドウの上にある ピクチャーコントロールに 描画するためには どうすればよいでしょうか? MDIで、複数のウィンドウのうちで アクティブになった ものだけを 操作したいのです。 よろしくお願いします。

  • wxy
  • お礼率35% (25/71)

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

GetDlgItemを使ってピクチャーコントロールのCWndのポインターを取得しましょう ピクチャーコントロールのリソースIDが分かっているなら CWnd* pWndChild = MDIGetActive(); // リソースIDが IDC_PICTURE1なら CWnd* pWndPict = pWndChild->GetDlgItem( IDC_PICTURE1 ); といった具合で pWndPictを取得して CDC* pDC = pWndPict->GetDC(); pDC->TextOutA( 20, 50, "文字列です"); pWndPict->ReleaseDC( pDC ); とった具合にします

関連するQ&A

  • ピクチャーコントロールのデバイスコンテキストを取得するためには?

    VC2005についてです ピクチャーコントロールのデバイスコンテキストを操作するためには どうすればよいでしょうか? void CMainFrame::OnButton() { // ここに処理を書く CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; CButton *pButton =  (CButton*)pFrame->m_wndDialogBar.GetDlgItem(IDC_BUTTON1); pButton->SetWindowText("button"); MDIGetActive()->GetDC()->TextOutA(0,0,"文字列です"); } この様にすれば、アクティブになった 子ウィンドウデバイスコンテキストを取得することができますが、 アクティブになった、この子ウィンドウの上にある ピクチャーコントロールに 描画するためには どうすればよいでしょうか? MDIで、複数のウィンドウのうちで アクティブになった ものだけを 操作したいのです。 MDIGetActive()->GetDlgItem(IDC_PICTURE1)->GetDC()->TextOutA(0,0,"文字列です"); この方法では、エラーがでます。 よろしくお願いします。

  • ピクチャーコントロールのデバイスコンテキストを取得するためには?

    すみません、解決しませんでした・・・ C2005についてです ピクチャーコントロールのデバイスコンテキストを操作するためには どうすればよいでしょうか? void CMainFrame::OnButton() { CMDIChildWnd *mc; mc=MDIGetActive(); CStatic* pStatic=(CStatic*)mc->GetDlgItem(IDC_PICTURE1); CClientDC myPictDC(pStatic); myPictDC.TextOutA(0,0,"aiueo"); } この様にすれば、文字が出力されますが、 モニターの画面上の左上 (0,0)の位置に 出力されてしまいます。 アクティブになった、この子ウィンドウの上にある ピクチャーコントロールに 描画するためには どうすればよいでしょうか? MDIで、複数のウィンドウのうちで アクティブになった ものだけを 操作したいのです。 ピクチャーコントロールの上に描画するためには どうすればよいでしょう? よろしくお願いします。

  • MFC デバイスコンテキストについて

    MFCのデバイスコンテキストを取得して、DirectXなどで描画を行っています。 環境は、 VS2008 DirextX 9.0 MDIなんですがOnInitDialogでDirectXのデバイスを取得しています。 次にOnDrawで描画を行っています。 GetDcでコンテキストを取得し、円の描画を行っています。 MDIですので、5以上のファイルを作成すると、描画が行われなくなります。 共通デバイスコンテキストは、5以上持てないということは検索して分かったのですが、5以上のファイルに描画を成功させるためには、どうすればいいのでしょうか? ・単純に新規ファイルを作ったときに、以前に作ったファイルのデバイスコンテキストを開放また、Directxのデバイスを開放すればいい? ・DirectXのデバイスをファイルごとに作成するのではなく、共通してもてば解決できる?? ・そもそも解放したりしても無理?? と考えているのですが、どうでしょうか? 助言をお願いします。

  • デバイスコンテキストについて

    いつもお世話になります。 MFCアプリケーションWIZでデスクトップアプリを作成しているのですが、 HDC型のデバイスコンテキストの取得方法がわかりません。 CWndのメンバ変数m_hWndにウィンドウハンドルが格納されるというのは わかったのですが、 hDC = GetDC(m_hWnd)だと間違っているのですよねー。 ご教示よろしくお願い致します。

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

    お世話になります、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 です。 ご意見、ご回答をお待ちしております。よろしくお願い致します。

  • ダイアログボックス・・・・・ bySDK

    現在SDKにて画像処理ソフトを作成しています。もちろん個人にて。 そこで確実にほしい機能”ヒストグラム”の表示を行おうと思ったのですが、問題が起こりました。 目的は”2値化"という処理に伴い、ダイアログボックスに入力した画像のヒストグラムを表示させたいということです。 もちろんヒストグラムは単に白黒だけで表示させたいと思っています。 問題というのはダイアログボックスに任意の図形をどのように描画するかです。ビットマップの描画は以前行ったことがあるのですが、任意の図形は行ったことがありませんでした。 試しに、ダイアログボックスにPicture Controlを貼り付け、そのPicture ControlのデバイスコンテキストをGetDCにより無理やり取得し、そのデバイスコンテキストに直線などの描画を行ってみましたが、表示はされませんでした。(あたりまえかも・・・・) そこでまず、ダイアログボックスに使用するコントロール類は何を設定したらよいか? そして、そのコントロールから取得したデバイスコンテキストに直接描画は可能か? これらの質問に答えられる方はアドバイスをお願いしたいと思います。 よろしくお願いします。

  • デバイスコンテキストについて詳しく教えてください

    C言語でwin32APIを勉強しているのですが、デバイスコンテキストとは具体的にどのようなものでしょうか?Windowsが管理しているGDIで描画をするための構造体らしいですが・・・。 それともう1つ質問です。解説サイトに「デバイスコンテキストは使ったらすぐ解放しなければならない」と書かれているのですが、なぜすぐに解放しなければならないのですか?サンプルプログラムを見ていると、まだ使えそうなデバイスコンテキストもすぐ解放し、次に必要になれば新たにデバイスコンテキストを確保していますが、そのまま取って置くのは駄目なのでしょうか。そのようなプログラム(汎用的なデバイスコンテキストをWinMainの最初に確保し、完全に使わなくなった時点で解放する)を作って動作させてみても、ぱっと見では問題が見つかりません。ですがこれではやはり問題があるのでしょうか? 質問は以上の2点です。回答よろしくお願いします。

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

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

  • MFC DirectXのデバイスの再設定

    MFCのMDIで、DirectXおよびWinAPIを仕様して領域に描画を行うものを作っています。 環境ですが、 VS2008 DirectX9.0 です。 子ウィンドウは4分割しており、(0,0)と(1,0)が描画領域で、(0,1)(1,1)はフォームです。 そこで、以前は各子ウィンドウごとに、デバイスを取得し、描画をおこなっていたのですが、ファイルを5個以上作成すると、WinAPIで描画されるものが表示されなくなりました。 それは、デバイスコンテキストは、5個以上もてないことが発覚したためとわかったので、デバイスは親で持つことにし、共通化することになりました。 しかし、それでは、親ウィンドウで取得しているため、描画のウィンドウサイズなどが異なるため、意図した領域にかけておりません。 そこで、各領域に再設定を行いたいのですが、どうすればよいのでしょうか? 対策として、下記のように考えたのですが、検討違いでしょうか? ・デバイスの画面の設定をResetなどをつかって、リセットし、描画領域の再設定を行う。(Resetだと、再度デバイスの取得を行うと思っているのですが、これだとファイルごとにもっているのと変わらないような気がします。) ・CreateOffscreenPlainSurface等でオフスクリーン サーフェイスを作成し、描画する。(描画の座標情報等の微調整がいるような気がします。) ・単純に再設定できるから再設定を行う。 アドバイスを御願い致します。

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

    ビットマップに描画をしてピクチャーコントロールに貼り付けるためには どうすればよいでしょうか? ネットで検索しましたそして、 下のようなコードを書きましたがうまくゆきません。 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で、ボタンをクリックした イベントで描画する場合です、 直線とかは、問題なく描画できました。 ビットマップに描画して貼り付けたいのです、 よろしくお願いします

専門家に質問してみよう