0

このように見えるように設計されたウィンドウを作成する必要があります (白い領域内にコントロールがありますが、今のところ関係ありません)。

http://dl.dropbox.com/u/3432167/example.png
私の問題は、背景が異なる 2 つの別個の「領域」を定義することです。
私が期待した外観に最も近いのは、白い領域を空の ListBox で表したものでしたが、結果は同じではありません (これはお粗末なハックです)。

これを達成する方法についてのアイデアはありますか?

4

2 に答える 2

0

掘り下げた後、これを行う良い方法は OnPaint 関数をオーバーライドすることであることがわかりました。
以下は、上記の質問に描かれているダイアログに使用される例です。この特定のダイアログはサイズ変更できないため、四角形の寸法はハードコーディングされています。

メッセージ マップに ON_WM_PAINT() を追加することを忘れないでください。

void CTestDlg::OnPaint()
{
    if (IsIconic())
    {
        (...)
    }
    else
    {
        CPaintDC dc(this); // device context for painting
        dc.FillSolidRect(0,0,612,376, RGB(255,255,255));
        dc.FillSolidRect(0,376,612,60, ::GetSysColor(COLOR_3DFACE));
        CDialog::OnPaint();
    }
}

解決策は非常にシンプルになりましたが、とにかく共有するのに役立つと思います.

于 2012-01-17T21:11:28.243 に答える