お世話になっております。
VC2005を使用しております。
SDIベースです。
ダイアログを作成し、その上にタブコントロール(2ページ)を作成しました。
タブコントロールの1ページ目にピクチャーコントロールを配置し、ピクチャーコントロール上に描画を行おうと思うのですが、正常に動作しません。
OnPaintの中で描画を行っているのですがだめのようです。
タブコントロール外に、ピクチャーコントロールを配置すると描画する事ができます。
どのような、タイミングで描画を行えばよいのでしょうか?
教えてください。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
ピクチャーボックスへの描画をどのようにしていますか?
CStatic* pWnd = (CStatic*)GetDlgItem( IDC_PICTURE )
pWnd->SetBitmap( m_bmpImage );
と言った具合にビットマップをピクチャーボックスに張るようにしてはいかがでしょう
ビットマップへの描画は メモリー上にデバイスコンテキスト(DC)を作成しておきこのdcに対して描画を行う
ビットマップをdcに選択
描画終了後に dcから選択を外して
SetBitmapでピクチャーボックスに貼り付け
と言った具合にして見ましょう
メンバー変数として
CStatic m_ctlImage; // ピクチャーボックスに関連付けした変数
CBitmap m_bmpImage; // ピクチャーボックスに貼り付けるイメージ
CDC m_dcImage; // Bitmap描画用のDC
HBITMAP m_holdBmp; // DCへの選択時にビットマップを外すためのハンドル
などを準備します
OnInitDialogなどで
CDC * pDC = m_ctlImage.GetDC();
m_dcImage.CreatecompatibleDC( pDC );
m_bmpImage.CreateCompatibleBitmap( pDC, width, height );
// もともと貼り付けてあったハンドルを保存
// 描画時にビットマップを外すため
// HBITMAP型のメンバー変数 m_holdBmpを準備
m_holdBmp = m_ctlImage.SetBitmap( m_bmpImage );
m_ctl_image.ReleaseDC( pDC );
と言った具合にしておきます
描画イベントで
// ピクチャーボックスのビットマップを外す
m_ctlImage.SetBitmap( m_hOldBmp );
// メモリーDCへビットマップを選択
CBitmap* pOld = m_dcImage.SelelctObject( &m_bmpImage );
// 描画コードを記述
m_dcImage.SetPixel( 100,100, RGB( 255, 0, 0 ) );
// ビットマップの選択を戻す
m_dcImage.SelectObject( pOld );
// ピクチャーボックスへビットマップを設定
m_ctlImage.SetBitmap( m_bmpImage );
と言った具合です
現在どのように描画していて どんな不具合が発生しているのかを明記してみましょう
お世話になっております。
ご回答ありがとうございます。
現在の方法は、OnPaintの中で、
ピクチャーコントロールのdcを取り、CBrushで作成した色をベタで塗っています。
この方法で、タブコントロール以外の所は正常に表示します。
タブコントロールの中では一度表示してから色が消えてしまいます。
よろしくお願いします。
No.4
- 回答日時:
ん~ よい書籍といっても知らないので orz …
私は いろいろな経験とMSDNなどのヘルプそれとネットなどのコミュニティからの情報です
まずはいろいろなコントロールを使ってみることでしょうね
VBやC#など他はどのように実現しているのかとか
MFCなどのクラスライブラリーやランタイムライブラリーのソース
サンプルプログラマムなどを改造してみるとか
がんばってください m(__)m
No.3
- 回答日時:
やはり 先に回答したようにビットマップを作成して
SetBitmapでピクチャーボックスに貼り付けたほうが良いように思います
Paintイベントでなくても描画できますし、Paintイベントのたびにアプリ側の負担も少ないと思います
Typeはビットマップにして Center ImageをTrueにしてデフォルトの大きさを決めてから Falseに設定します
Real Size ImageがFalseならここで決めた大きさが GetClientRectなどで取得可能です
フレームのままで ビットマップを貼り付けると表示しませんでした
お世話になっております。
ご回答ありがとうございます。
参考にさせていただきたいと思います。
本当に親切にご対応いただきありがとうございます。
質問ですが、このような情報はどこを参照すればよいでしょうか?
書籍等があればお教えいただけると幸いです。
自分の周りに、知識を持った人がいないためいきずまった時に非常に苦労します。
よろしくお願いします。
No.2
- 回答日時:
OnPaintで コントロールのDCをGetDCで取得して描画しているのでしょうか
初期表示の段階から表示されますか?
当方ですとベタ塗りは一瞬表示されるだけですが …
表示後ダイアログの一部を書き換えるような操作(別ウィンドウを少しだけかぶせる)を行うとベタ塗りがされます
ただし、ピクチャーボックスにかかるように操作してしまうとその部分は塗ってくれませんよ
これって 何処にあっても同じだと思います
ためしに そのダイアログにボタンを追加してそのクリックイベントで
Invalidate();
を実行してみてください
一瞬 ベタ塗りされて デザイン時の灰色になってしまいませんか
ピクチャーボックスのプロパティって何をいじりました
貼り付けて IDとTypeだけでしょうか
お世話になっております。
親切な対応本当にありがとうございます。
そのとおりです。一瞬表示するだけです。
ピクチャーボックスのプロパティは、標準のままです。
IDのみです。Typeはフレームです。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) EXCELでバーコードを作成すると白くなってコードが見えません 1 2022/04/04 14:24
- C言語・C++・C# ActiveXコントロールを.NETにインポートできない??? 2 2023/05/02 02:50
- Illustrator(イラストレーター) 液タブとタブレットの違いは何ですか? 液タブでもタブレットでアイビスペイントをダウンロードした時と同 7 2022/08/11 12:13
- その他(パソコン・周辺機器) 適切なペンタブ(液タブ)を購入する方法が分かりません。 3 2023/06/24 10:44
- タブレット ワコム 13.3インチ 液晶ペンタブレット 液タブ Wacom One 13 HUION 液タブ K 1 2023/06/16 13:30
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- 美術・アート イラスト用おすすめの『液タブ』を教えてください。 2 2023/06/09 14:05
- Word(ワード) ワードの描画ツールが再び使えなくなった件 4 2022/06/18 15:48
- タブレット 現在の液晶ペンタブレットと板ペンタブレットは、上手く描けるように性能は上がっているのですか? 1 2022/03/27 00:48
- 美術・アート 液タブかsurface proか、作画作業の面だけで比較をお願いします 2 2022/07/10 01:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MFCでOnPaintのタイミング
-
TextBoxに文字を書いても表示さ...
-
UpdateData( FALSE); による文...
-
Minecraft 統合版(PC)の描画距...
-
VB6,リストボックスの特定行の...
-
word
-
Form1 Load で実行されない。
-
ビットマップを表示させる(MFC)
-
panelのスクロール表示について
-
MFCタブコントロールのグラデー...
-
PCで「使用可能な場合はグラフ...
-
OneNote 2010 文字と描画がずれる
-
VC++6.0 MFCダイヤログベースで...
-
[VB.net] DataGridViewの列ヘッ...
-
C# ラバーバンドの描画を快適に...
-
Win32 API 途中から描画がおか...
-
WM_PAINT
-
InvalidateRectの使い方について
-
VC++プログラムをつかったBMP画...
-
FPS処理について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MFCでOnPaintのタイミング
-
[VB.net] DataGridViewの列ヘッ...
-
word
-
NVIDIAのシェーダーキャッシュ
-
TextBoxに文字を書いても表示さ...
-
UpdateData( FALSE); による文...
-
VB6,リストボックスの特定行の...
-
PCで「使用可能な場合はグラフ...
-
VC++プログラムをつかったBMP画...
-
VBAにGDI+を参照させる方法
-
FlexGridの一部のみ表示を更新...
-
pset関数について
-
エクセルでガンチャートを作成...
-
C言語(dxlib)のDrawboxについ...
-
Form1 Load で実行されない。
-
InvalidateRectの使い方について
-
MFCのタイマーのつかい方を教え...
-
CStaticコントロールの静的イメ...
-
Windowのちらつき防止
-
GDI+で高速な描画
おすすめ情報