画面のちらつきを無くしたい – プログラミング – Home

画面のちらつきを無くしたい
 
通知
すべてクリア

[解決済] 画面のちらつきを無くしたい


高橋
 高橋
(@高橋)
ゲスト
結合: 22年前
投稿: 17
Topic starter  

void CSecandView::OnDraw(CDC* pDC)
{
CSecandDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

CDC dc;
CDC* pDrawDC = pDC;
CBitmap bitmap;
CBitmap* pOldBitmap;

CRect client;
pDC->GetClipBox(client);
CRect rect = client;
DocToClient(rect);

if (!pDC->IsPrinting())
{
if (dc.CreateCompatibleDC(pDC))
{
if (bitmap.CreateCompatibleBitmap(pDC, rect.Width
(), rect.Height()))
{
OnPrepareDC(&dc, NULL);
pDrawDC = &dc;

dc.OffsetViewportOrg(-rect.left, -
rect.top);
pOldBitmap = dc.SelectObject(&bitmap);
dc.SetBrushOrg(rect.left % 8, rect.top %
8);

dc.IntersectClipRect(client);
}
}
}

CBrush brush;
if (!brush.CreateSolidBrush(RGB(100,120,120)))
return;

brush.UnrealizeObject();
pDrawDC->FillRect(client, &brush);
pDrawDC->SetMapMode(MM_ISOTROPIC);

if (pDrawDC != pDC)
{
pDC->SetViewportOrg(0, 0);
pDC->SetWindowOrg(0,0);
pDC->SetMapMode(MM_TEXT);
dc.SetViewportOrg(0,0);
dc.SetWindowOrg(0,0);
dc.SetMapMode(MM_TEXT);

pDC->BitBlt(-rect.left, -rect.top, rect.Width(), rect.Height
(),
&dc, 0, 0, SRCCOPY);
dc.SelectObject(pOldBitmap);
}

}このように記述したのですが、ちらつきが、直りません宜しく御願いします。


引用未解決
トピックタグ
武田
 武田
(@武田)
ゲスト
結合: 22年前
投稿: 2
 

プログラミングの初心者です。たぶん高橋さんよりも技量が劣っていると思います。間違ってい
ると思ったら、読み飛ばしてください。

まず、CBitmap bitmap; をグローバル領域で、宣言してください。
そして、もう一つ宣言してください。(bitmapBGとか)
CBitmap* pOldBitmap; は、いりません。

コンストラクタに、
CClientDC dc(0);
bitmap.CreateCompatibleBitmap(&dc,/*描画する横幅(BG)*/,/*描画する縦幅(BG)*/);
と書いてください。

CDC dc; に、もう一つ宣言を追加してください。(dcBGとか)
dc.CreateCompatibleDC(pDC); の次に dcBG.CreateCompatibleDC(pDC);と書いてくださ
い。 

dc.SelectObject(&bitmap); の次に、
dcBG.SelectObject(&bitmapBG); と、書いてください。

そして、dcBG.BitBlt(/*描画する左端の座標(BG)*/,/*描画する上端の座標(BG)*/,/*描画す
る横幅(BG)*/,/*描画する縦幅(BG)*/,&dc,/*描画する物の横幅*/,/*描画する物の縦幅
*/,SRCCOPY)
と、書いてください。

その後、
pDC->BitBlt(/*描画する左端の座標*/,/*描画する上端の座標*/,/*描画する横幅*/,/*描画す
る縦幅*/,&dcBG,/*描画する物の横幅(BG)*/,/*描画する物の縦幅(BG)*/,SRCCOPY);

最後に、dc.DeleteDC(); dcBG.DeleteDCと、書いてください。

そうすれば、できるかもしれません。ちなみに、/*・・・*/と書かれているところは、CRectで
宣言したものを、書かないでください。
 


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

OnEraseBkgnd()で何もしないようにしていますか?


返信引用
武田
 武田
(@武田)
ゲスト
結合: 22年前
投稿: 2
 

dairygoodsさん、OnEraseBkgnd()は、このソースだと、どの部分に書けばよいことになるので
すか?


返信引用
ハリィ
 ハリィ
(@ハリィ)
ゲスト
結合: 22年前
投稿: 14
 

> OnEraseBkgnd()は、このソースだと、どの部分に書けばよいことになるのですか?
ClassWizard などで WM_ERASEBKGND のハンドラを作成するんじゃないかと。


返信引用
高橋
 高橋
(@高橋)
ゲスト
結合: 22年前
投稿: 17
Topic starter  

以下のホームページに詳細のコーディングが書いてありました。
情報を頂いた皆さん有り難うございました。
http://www.geocities.jp/chiakifujimon/makesoft2/proc3.html


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました