• ベストアンサー

再描画について

ピクチャボックスにスクロールバーと連動させて色を出したいのですが OnHScroll関数でピクチャボックスに色を出すまではできましたが、 アプリケーションを画面外に出し、戻すと元の色に戻ります。 OnPaint内で再描画しても出ませんでした。 どうやればいいでしょうか? 低レベルな質問ですみません。 (スクロールバーは3つあり、それぞれRGBに分けています。)

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

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

CBitmap型のメンバー変数を用意して OnHScrollなどのイベントでこれにメモリーDCなどで描画を行うようにする 描画が終わったらメモリーDCからBitmapの選択を外す 選択をはずしたBitmapをPicturBoxにSetBitmapで貼り付ける といった具合にしてやると わざわざOnPaintで描画処理をする必要がなくなります 『ダブルバッファ』など画面のチラつきを抑える手法について検索してみましょう

ahoprog
質問者

お礼

解答ありがとうございます。 Invalidate();ですが inlidate(FALSE);でちらつきはおさえられました。 くだらない事で質問すみませんでした。 もう少し調べてCBitmap型の変数で簡潔なコードを書きたいと思います 勉強不足ですみません。

その他の回答 (2)

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

ダイアログのOnPaintで描画しても、ピクチャボックスのOnPaintと競合してしまい、思うような動作とならないことがあります。 方法としては、#2さんのおっしゃるBitmapを貼り付ける方法の他に、オーナードローを用いる方法や、WM_CTLCOLORを処理する方法が考えられますね。

ahoprog
質問者

お礼

何とか解決しました。 ありがとうございました。 また何か勉強しながら分からないことがありましたら お願いします。

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

どのようなコードをお書きなのでしょう? OnHScroll、OnPaintの内容を投稿してみませんか そのアプリに別のアプリをかぶせてから、そのアプリをアクティブにした場合はどうなのでしょう

ahoprog
質問者

お礼

すみません。解決しました。 OnPaint内で int red; int green; int blue; red = mySCR1->GetScrollPos(); green = mySCR2->GetScrollPos(); blue = mySCR3->GetScrollPos(); mySCR1->SetScrollPos(red,TRUE); mySCR2->SetScrollPos(green,TRUE); mySCR3->SetScrollPos(blue,TRUE); CWnd* myPICT1 = GetDlgItem(IDC_PICT); CClientDC myDC(myPICT1); CRect myRECT; CBitmap BMP; myPICT1->GetClientRect(myRECT); memDC1.DeleteDC(); memDC1.CreateCompatibleDC(&myDC); BMP.CreateCompatibleBitmap(&myDC,myRECT.Width(),myRECT.Height()); memDC1.SelectObject(BMP); myDC.FillSolidRect(myRECT,RGB(red,green,blue)); CBrush myBrush ,*oldBrush; myBrush.CreateSolidBrush(RGB(red,green,blue)); oldBrush = myDC.SelectObject(&myBrush); としまして、 HSCrollないでも 同じようにしました。 HScroll内でInvalidate(); で呼び出しましたらちらつきが酷いために 回りくどいですがこうやりました。 お早い返答ありがとうございました。

関連するQ&A