0

我需要构建一个看起来完全像这样的窗口(它在白色区域内有控件,但现在不相关):

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

关于如何实现这一目标的任何想法?

4

2 回答 2

1

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

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

于 2012-01-16T21:36:18.040 回答
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 回答