プロが教えるわが家の防犯対策術!

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

A 回答 (3件)

CBitmap型のメンバー変数を用意して


OnHScrollなどのイベントでこれにメモリーDCなどで描画を行うようにする
描画が終わったらメモリーDCからBitmapの選択を外す
選択をはずしたBitmapをPicturBoxにSetBitmapで貼り付ける

といった具合にしてやると わざわざOnPaintで描画処理をする必要がなくなります

『ダブルバッファ』など画面のチラつきを抑える手法について検索してみましょう
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/09 14:58

ダイアログのOnPaintで描画しても、ピクチャボックスのOnPaintと競合してしまい、思うような動作とならないことがあります。


方法としては、#2さんのおっしゃるBitmapを貼り付ける方法の他に、オーナードローを用いる方法や、WM_CTLCOLORを処理する方法が考えられますね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/09 14:59

どのようなコードをお書きなのでしょう?



OnHScroll、OnPaintの内容を投稿してみませんか

そのアプリに別のアプリをかぶせてから、そのアプリをアクティブにした場合はどうなのでしょう
    • good
    • 0
この回答へのお礼

すみません。解決しました。
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();
で呼び出しましたらちらつきが酷いために
回りくどいですがこうやりました。
お早い返答ありがとうございました。

お礼日時:2008/07/09 13:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!