我需要构建一个看起来完全像这样的窗口(它在白色区域内有控件,但现在不相关):
http://dl.dropbox.com/u/3432167/example.png
我的问题是定义这两个不同背景的独立“区域”。
我最接近预期的外观是用一个空的 ListBox 表示白色区域,但结果不一样(而且这是一个糟糕的 hack)。
关于如何实现这一目标的任何想法?
我需要构建一个看起来完全像这样的窗口(它在白色区域内有控件,但现在不相关):
http://dl.dropbox.com/u/3432167/example.png
我的问题是定义这两个不同背景的独立“区域”。
我最接近预期的外观是用一个空的 ListBox 表示白色区域,但结果不一样(而且这是一个糟糕的 hack)。
关于如何实现这一目标的任何想法?
如果对话框不需要调整大小,最简单的方法是创建具有所需背景的 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();
}
}
解决方案最终变得非常简单,但我想无论如何分享都是有用的。