- ベストアンサー
再描画について
ピクチャボックスにスクロールバーと連動させて色を出したいのですが OnHScroll関数でピクチャボックスに色を出すまではできましたが、 アプリケーションを画面外に出し、戻すと元の色に戻ります。 OnPaint内で再描画しても出ませんでした。 どうやればいいでしょうか? 低レベルな質問ですみません。 (スクロールバーは3つあり、それぞれRGBに分けています。)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
CBitmap型のメンバー変数を用意して OnHScrollなどのイベントでこれにメモリーDCなどで描画を行うようにする 描画が終わったらメモリーDCからBitmapの選択を外す 選択をはずしたBitmapをPicturBoxにSetBitmapで貼り付ける といった具合にしてやると わざわざOnPaintで描画処理をする必要がなくなります 『ダブルバッファ』など画面のチラつきを抑える手法について検索してみましょう
その他の回答 (2)
- titokani
- ベストアンサー率19% (341/1726)
ダイアログのOnPaintで描画しても、ピクチャボックスのOnPaintと競合してしまい、思うような動作とならないことがあります。 方法としては、#2さんのおっしゃるBitmapを貼り付ける方法の他に、オーナードローを用いる方法や、WM_CTLCOLORを処理する方法が考えられますね。
お礼
何とか解決しました。 ありがとうございました。 また何か勉強しながら分からないことがありましたら お願いします。
- redfox63
- ベストアンサー率71% (1325/1856)
どのようなコードをお書きなのでしょう? OnHScroll、OnPaintの内容を投稿してみませんか そのアプリに別のアプリをかぶせてから、そのアプリをアクティブにした場合はどうなのでしょう
お礼
すみません。解決しました。 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(); で呼び出しましたらちらつきが酷いために 回りくどいですがこうやりました。 お早い返答ありがとうございました。
お礼
解答ありがとうございます。 Invalidate();ですが inlidate(FALSE);でちらつきはおさえられました。 くだらない事で質問すみませんでした。 もう少し調べてCBitmap型の変数で簡潔なコードを書きたいと思います 勉強不足ですみません。