アプリ版:「スタンプのみでお礼する」機能のリリースについて

MFCで開発してます。
CFormViewのクライアント領域を4分割して、右上だけ背景色を他の領域とは違う色にしたいのですが、
InvalidateRect(NULL, TRUE)の後のOnEraseBkgnd()とOnDraw()で、FillSolidRect()で右上だけ塗りつぶしても色が変わりません。
何が原因と考えられるでしょうか?
よろしくお願いします。

A 回答 (2件)

 こんばんは。



 一つのCFormViewの中の右上と言う事でしょうか。
 恐らく、OnEraseBkgnd()辺りが悪さをしているのではないでしょうか。
 その他、座標計算が間違っている事も考えられます。
 取り敢えずは、OnEraseBkgnd()を削って見ては如何でしょう。
 以下はOnDraw()のみオーバーライドして確認しています。参考になれば。

void CMyFormView::OnDraw(CDC* pDC)
{
// TODO: ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。
RECT rc = {0};

//クライアント領域を取る
this->GetClientRect(&rc);

//座標を右上に設定
rc.left = rc.right / 2;
rc.bottom/= 2;

//緑色で塗ってみる
pDC->FillSolidRect(&rc, 0xff00);
}
    • good
    • 0
この回答へのお礼

ありがとうございます。

最初はOnDraw()の中で塗りつぶしてたんですけど、うまくいかないので、
OnEraseBkgnd()をオーバーライドしてみました。
4分割でうまくいかないので、2分割でやってみると、これはうまくいきました。
FillSolidRect()に渡すパラメータがおかしいのかなぁ。
何度も見直したんですけど。。。
ちなみに塗りつぶす順番は、左上→右上→左下→右下です。

もう少し調べてみます。

お礼日時:2009/08/10 22:55

>InvalidateRect(NULL, TRUE)の後のOnEraseBkgnd()とOnDraw()で、


>FillSolidRect()で右上だけ塗りつぶしても色が変わりません。

InvalidateRect()で無効化したウィンドウはOnPaint()で描画します。(言い換えれば、InvalidateRect()するとOnPaint()が発生し、OnPaint()の処理を書き換えずにデフォルトの処理のままにすると、デフォルトの背景しか描画されず、OnPaint()以外で行った描画はすべて「無かった事」になります)

また、OnEraseBkgnd()は、ウィンドウをリサイズした際にしか呼ばれません。

さらに
http://www.bnote.net/sdk_mfc/mfc1.shtml
には
「SDIやMDIアプリケーションの描画処理は OnDraw() で行い(印刷や印刷プレビューも)。
ダイアログベースでは OnPaint()で描画処理を行うようです。 」
と書いてあります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
参考にさせていただきます。

お礼日時:2009/08/10 22:57

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