フォームの背景色を変更するには?

解決


りゃい  2005-06-26 19:23:38  No: 58074  IP: 192.*.*.*

フォームの背景色を変更するにはどのようにしたらいいでしょうか?
具体的に言うと、ボタンを押されると、背景色を変更したいです。

フォームを生成してしまうと、背景色が変更できないとよくネット上で見かけるので、何かいい案はないでしょうか?

ご存知の方がおられましたら、ご教授の程、宜しくお願い致します。

編集 削除
シャノン  2005-06-26 20:33:39  No: 58075  IP: 192.*.*.*

フォームとは何でしょうか?

CreateWindow で作ったウィンドウでしょうか。
リソースから作ったダイアログでしょうか。
CFormView のことでしょうか。
それとも、.NET の Windows フォームのことでしょうか。

どれであるかによって、やり方は異なります。
ご使用の環境を、しっかりとお書きください。

一般的に、こんな↓情報を明示しておけばよいです。

・OS
・言語(この掲示板に書き込むということは、C++ だと思いますが)
・開発ツールのバージョン(VC++ 6.0 だとか .NET だとか)
・アーキテクチャ(MFC だとか .NET だとか。MDI だとかダイアログベースだとか)

編集 削除
dark  2005-06-26 21:11:34  No: 58076  IP: 192.*.*.*

内容と関係ないけど、
新しいスレをつくる前にまえのスレに対する返信をした方がよいのでは?
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200506/05060065.txt
# このスレも放置されるかもしれないが。

編集 削除
りゃい  2005-06-27 09:51:01  No: 58077  IP: 192.*.*.*

前のスレに対しての返信が遅れてすいませんでした。
ご指摘していただいてありがとうございました。

今回の背景色の件ですが、CFormView のことです。
言葉足らずですいませんでした。

VC++6.0でSDIで作成しております。

編集 削除
iijima  2005-06-28 21:13:24  No: 58078  IP: 192.*.*.*

ダイアログボックスと同様、WM_CTLCOLORメッセージハンドラのOnCtlColorを
オーバーライドすることにより背景色を変えられます。

// exam.
class CxxxView : public CFormView
{
    HBRUSH m_hBkBrush; // 背景色用ブラシオブジェクトのハンドル
    ...
};

int CxxxView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFormView::OnCreate(lpCreateStruct) == -1){
        return -1;
    }

    // 背景色用ブラシ作成
    m_hBkBrush = ::CreateSolidBrush( RGB( 0x00, 0x99, 0x00 ) );

    return 0;
}

HBRUSH CxxxView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);

    if( pWnd == this ){    // 自分自身を描画するときは
        return m_hBkBrush; // 背景色用ブラシを返す
    }

    return hbr;
}

void CxxxView::PostNcDestroy()
{
    ::DeleteObject( m_hBkBrush ); // 背景色用ブラシ削除

    CFormView::PostNcDestroy();
}

編集 削除
りゃい  2005-07-02 08:39:38  No: 58079  IP: 192.*.*.*

大変ありがとうございました。
助かりました。

もっと勉強します。
ありがとうございました。

編集 削除