将CDialog分为两个不同背景的区域(内部目标的图片)

Dividing a CDialog in two areas with different backgrounds (picture of the objective inside)

本文关键字:背景 区域 内部 目标 两个 CDialog      更新时间:2023-10-16

我需要构建一个设计成这样的窗口(它在白色区域内有控件,但目前与此无关):

http://dl.dropbox.com/u/3432167/example.png
我的问题是用不同的背景来定义这两个独立的"领域"
我得到的最接近预期的外观是用一个空的ListBox表示白色区域,但结果不一样(这是一个糟糕的破解)。

关于如何实现这一点,有什么想法吗?

如果对话框不需要调整大小,最简单的方法是创建一个具有所需背景的bmp(如果可以使用CDialogEx而不是CDialog,则非常容易-只需要调用SetBackgroundImage)。

如果不能使用位图,则必须创建自己的控件来绘制此背景。

经过一番挖掘,我发现实现这一点的一个好方法是重写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();
    }
}

解决方案最终非常简单,但我想无论如何分享都很有用。