ウィンドウの背景

[戻る]
kamenrider 2003/02/28(金) 13:28:23
CformViewのウィンドウで、今は背景が灰色で味気ないので色を変えたり絵を書いたりしたりし
て飾りたいのですがやり方が分かりません。教えて下さい。

Shimura 2003/02/28(金) 13:30:30
BOOL CMyFormView::OnEraseBkGnd( CDC* pDC)
{
    必要な処理;
    return TRUE;
}

MK 2003/03/02(日) 07:39:44
Shimuraさんの名前を見つけたので覗いてみました。
質問からして、上記だけでは分からないと思いますので以下載せときます。

/////////////////////////////////////////////////////////////////////////////
// CKView クラスのメッセージ ハンドラ

BOOL CKView::OnEraseBkgnd(CDC* pDC) 
{
  // ブラシを作成
    CBrush backBrush(RGB(255, 128, 128));

    // 新しいブラシを選択して 現在のブラシを保存
    CBrush* pOldBrush = pDC->SelectObject(&backBrush);

    // 現在のクリッピング領域の矩形を取得
    CRect rect;
    pDC->GetClipBox(&rect);

    // 矩形を塗りつぶす
    pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);

    // ブラシを元に戻す
    pDC->SelectObject(pOldBrush);

    return TRUE;
    
  return CView::OnEraseBkgnd(pDC);
}

Shimura 2003/03/02(日) 13:35:58
>Shimuraさんの名前を見つけたので覗いてみました。
ども。:-) > MKさん。

んじゃ、とりあえず、背景を白にするサンプルコード、書いときます。

BOOL CMyFormView::OnEraseBkGnd( CDC* pDC)
{
    CRect Rect;
    GetClientRect( &Rect);                   // クライアント領域の大きさを得る

    CBrush cBrush;
    cBrush.CreateStockObject( WHITE_BRUSH);  // システム定義の白のブラシ
      
    pDC->FillRect( &Rect, &cBrush);          // 領域を塗りつぶす
 
    return TRUE;
}

HBRUSH CMyFormView::OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hBrush = CFormView::OnCtlColor( pDC, pWnd, nCtlColor);
    
    if ( nCtlColor == CTLCOLOR_STATIC)
    {
         // スタティックコントロールの背景も白にする。
         pDC->SetBkMode( TRANSPARENT);
         return reinterpret_cast<HBRUSH>( ::GetStockObject( WHITE_BRUSH));
    }

    return hBrush;
}

Shimura 2003/03/02(日) 13:46:44
>return reinterpret_cast<HBRUSH>(::GetStockObject( WHITE_BRUSH));
ミスった。X-) 
背景を白のブラシで塗ってるのに、わざわざ白のブラシ返してどーする。>自分
キャストもミスってる。X-(

下が正解。

return static_cast< HBRUSH>( ::GetStockObject( HOLLOW_BRUSH));

古いスレッドには追加発言できません。