//把Picture控件的背景画为白色
CLine m_Line;//自定义的类CLine
CClientDC dc(this); // device context for painting
CRect rc = GetRect(IDC_STATIC_RECT);
m_Line.DrawBackGround(&dc,rc);
void CLine::DrawBackGround(CDC *pDC, CRect rect)
{
CBrush brushCtl;
brushCtl.CreateSolidBrush(GetBkColor());
pDC->Rectangle(rect);
pDC->FillRect(rect,&brushCtl) ;
brushCtl.DeleteObject();
}
上面是题外话
创建调色板的一般步骤:
1 建立一个LOGPALETTE结构和PALETTEENTRY数组
2 对PALETTEENTRY数组进行赋值,即创建调色板颜色表
3 建立CPalette对象并使用CreatePalette函数初始化调色板对象
4 使用SelectPalette函数将设备描述表和调色板联系起来
5 使用CDC中的RealizePalette函数使调色板生效
如果某一个窗口要显示特殊的颜色,那么一般应该在处理WM_PAINT消息时实现自己的逻辑调色板,也就是说,在OnPaint或OnDraw函数中重绘以前,要调用SelectPalette和RealizePalette,如果窗口显示的颜色比较重要,则要在调用SelectPalette时指定bForceBackground参数为FALSE.
为了协调各个窗口对系统调色板的使用,Windows在必要的时候会向顶层窗口和重绘窗口发送消息WM_QUERYNEWPALETTE和WM_PALETTECHANGED.
当某一顶层或重叠窗口被激活时,会收到WM_QUERYNEWPALETTE消息,在窗口的创建之处也会收到该消息,该消息先于WM_PAINT消息到达窗口,如果活动窗口要使用特殊的颜色,则在收到该消息时应该实现自己的逻辑调色板并重绘窗口.
void CTestStoreObjectDlg::OnButton3()
{
// TODO: Add your control notification handler code here
//LOGPALETTE结构,并利用该逻辑调色板结构初始化调色板对象。
const int nColors=24; BYTE R[nColors],G[nColors],B[nColors];
UINT nSize=sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY)*(nColors-1)); //计算逻辑调色板所需空间
LOGPALETTE *pLP=(LOGPALETTE*) new BYTE[nSize];
//初始化逻辑调色板,假设R,G,B 保存的是调色板各颜色红,绿,蓝三个分量的数组