質問

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

http://dl.dropbox.com/u/3432167/example.png
私の問題は、異なる背景を持つこれら2つの別々の「領域」を定義することです。
予想される外観に最も近いのは、空のリストボックスを備えた白い領域を表すことでしたが、結果は同じではありません(そして、それはひどいハックです)。

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

役に立ちましたか?

解決 2

いくつかの掘り出しの後、私はこれを行う良い方法がオンペイント関数を無効にしていることを発見しました。
以下は、上記の質問に描かれているダイアログに使用される例です。この特定のダイアログが再構成できないため、長方形の寸法はハードコーディングされます。

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();
    }
}

ソリューションは非常にシンプルになりましたが、とにかく共有すると便利だと思います。

他のヒント

ダイアログを再構成する必要がない場合、最も簡単な方法は、目的の背景を持つBMPを作成することです(cdialogの代わりにcdialogexを使用できれば非常に簡単です - setbackgroundimageに電話する必要があります)。

ビットマップを使用できない場合は、この背景を描くために独自のコントロールを作成する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top