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

質問させていただきます。

WindowsSDKを用いて、画面を作成しています。
MFCは使用していません。

タブを使っていますが、タブは作成時にTCS_OWNERDRAWFIXEDを指定しています。

WM_DRAWITEMメッセージが来たら、タブを描画していますが
どうしてもちらつきが目立ってしまいます。

WM_DRAWITEMでの処理は、初めにタブの裏画面に描画し
最後にタブに通知された、DRAWITEMSTRUCTのhDCに裏画面の内容をBitBltで転送しています。

メイン画面もダブルバッファリングを行っておりますが、メイン画面はちらついていません。

タブ側で、WM_ERASEBKGNDで何もせずreturnすると、ちらつきはなくなりますが
背景色で塗りつぶされなくなるため、タブが表示される箇所にウィンドウを上に置いたりすると
そこが残ってしまいます。


WM_DRAWITEMが頻繁によばれているため、これはちらついているのでしょうか?
解消方法に頭を悩ませております。
どうぞご教授の程お願いいたします。

A 回答 (2件)

>DRAWITEMSTRUCTのrcItemですが、きちんと、渡されたleft,top,right,bottomに収めて描画はしております。



そうすると…チラ付きはやはりWM_ERASEBKGNDが関係していることになる…でしょうね。
WM_DRAWITEMの前に毎回WM_ERASEBKGNDが来る…ということはないかと思われますが、その辺りはどうなんでしょう?
Spy++などで確認できるかと思われますが…。

再描画に1回だけ…であれば、WM_ERASEBKGNDの時にタブ以外の場所を裏画面から描画することで回避できませんかね。
タブ部分はWM_DRAWITEMで描画しますし。
    • good
    • 0

オーナードローはやったことありませんが…


DRAWITEMSTRUCT構造体のrcItemメンバの範囲を超えて描き換えしていたりはしないですか?

この回答への補足

ご回答有難うございます。

DRAWITEMSTRUCTのrcItemですが、きちんと、渡されたleft,top,right,bottomに収めて描画はしております。

補足日時:2011/08/07 11:26
    • good
    • 0

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