VS2010中新控件的编程------颜色按钮类和颜色对话框

(1)      颜色按钮类和颜色对话框

1) 颜色对话框

MFC提供了颜色对话框类CMFCColorDialog进行颜色的选择,系统可以利用DoModal()调用,然后选择相应的颜色。

CMFCColorDialog dlg(m_Color,0, this);

         if(dlg.DoModal()==IDOK)

         {

                   m_Color = dlg.GetColor();

                  m_ColorDlgMsg.Format(_T("%d,%d,%d"),GetRValue(m_Color),GetGValue(m_Color),GetBValue(m_Color));

                   UpdateData(FALSE);

         }

2) 颜色按钮

可以利用颜色按钮选择相应的颜色,具有直观,在资源中增加按钮控件,并定义为CMFCColorButton,利用该类的函数初始化。

初始化:

         m_PickerBut.EnableAutomaticButton(_T("颜?色¦?选?择?"),RGB(255, 0, 255));

         m_PickerBut.EnableOtherButton(_T("其?它¨¹"));

         m_PickerBut.SetColor((COLORREF)-1);

         m_PickerBut.SetColumnsNumber(10);

颜色选择,当按下按钮时,可以获得颜色值:

COLORREFcolor = m_ColorPicker.GetColor();

         if (color == -1)

         {

                   color= m_ColorPicker.GetAutomaticColor();

         }

         m_strRGB.Format(_T("%d,%d,%d"), GetRValue(color), GetGValue(color),GetBValue(color));

3) 颜色条控件

在资源中加入Picture控件,建立颜色条控件的边界,然后利用此范围建立CMFCColorBar,利用CMFCColorBar的操作函数建立并设置属性。

         m_ColorBarFrame.GetClientRect(&rectColorBar);    //获取区域

         m_ColorBarFrame.MapWindowPoints(this,&rectColorBar);   //将区域映射到窗体坐标

         m_wndColorBar.SetHorzMargin(0);

         m_wndColorBar.SetVertMargin(0);

         m_wndColorBar.EnableOtherButton(_T("其?它¨¹"));

         m_wndColorBar.CreateControl(this,&rectColorBar,IDC_COLOR_BAR,5);

         m_wndColorBar.SetColor(RGB(0,0,0));

 建立鼠标单击消息并获取颜色信息

COLORREFcolor = m_wndColorBar.GetColor();

         m_ColorBarMsg.Format(_T("%d,%d,%d"), GetRValue(color),GetGValue(color), GetBValue(color));

         UpdateData(FALSE);

为了建立以调色板为基础的颜色条,首先需要建立调色板,在颜色条创建时利用调色板

//调色板的建立

#define NUM_COLOURS 64

         struct

         {

                   LOGPALETTE    LogPalette;

                   PALETTEENTRY  PalEntry[NUM_COLOURS];

         }pal;

 

         LOGPALETTE*pLogPalette = (LOGPALETTE*) &pal;

         pLogPalette->palVersion    = 0x300;

         pLogPalette->palNumEntries= (WORD) NUM_COLOURS;

 

         COLORREFcolorStart = RGB(0, 255, 255);

         COLORREFcolorFinish = RGB(255, 255, 255);

         int nShift = 6;

         for (int i = 0; i< NUM_COLOURS; i++)

         {

                   BYTEbR = (BYTE)((GetRValue(colorStart) *(NUM_COLOURS - i) + GetRValue(colorFinish)* i) >> nShift);

                   BYTEbG = (BYTE)((GetGValue(colorStart) *(NUM_COLOURS - i) + GetGValue(colorFinish)* i) >> nShift);

                   BYTEbB = (BYTE)((GetBValue(colorStart) *(NUM_COLOURS - i) + GetBValue(colorFinish)* i) >> nShift);

 

                   pLogPalette->palPalEntry[i].peRed   = bR;

                   pLogPalette->palPalEntry[i].peGreen= bG;

                   pLogPalette->palPalEntry[i].peBlue  = bB;

                   pLogPalette->palPalEntry[i].peFlags= 0;

         }

    //颜色条的创建

         m_palColorPicker.CreatePalette(pLogPalette);

         m_wndColorBar2.SetHorzMargin(0);

         m_wndColorBar2.SetVertMargin(0);

         m_ColorBarFramw2.GetClientRect(&rectColorBar);

         m_ColorBarFramw2.MapWindowPoints(this, &rectColorBar);

         m_wndColorBar2.CreateControl(this, rectColorBar, IDC_COLOR_BAR2, 8 /* columns */, &m_palColorPicker);

         m_wndColorBar2.SetColor(colorStart);

颜色按钮的界面

原文地址:https://www.cnblogs.com/DreamRecorder/p/9272640.html