CPalette调色板使用

这篇博客详细介绍了在MFC中如何使用CPalette类创建和管理调色板,包括建立LOGPALETTE结构,创建逻辑调色板,以及如何在窗口重绘时实现调色板的生效。同时,讲解了从位图创建调色板的步骤,并阐述了DIB设备无关位图的概念和结构。
摘要由CSDN通过智能技术生成

//把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 保存的是调色板各颜色红,绿,蓝三个分量的数组

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值