• 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);

    颜色按钮的界面

  • 相关阅读:
    day02:Activity
    day01:Android快速入门
    解读经典《C#高级编程》第七版 Page79-93.对象和类型.Chapter3
    解读经典《C#高级编程》第七版 Page68-79.对象和类型.Chapter3
    基于.Net进行前端开发的技术栈发展路线(一)
    解读经典《C#高级编程》第七版 Page50-68.核心C#.Chapter2
    解读经典《C#高级编程》第七版 Page45-50.核心C#.Chapter2
    解读经典《C#高级编程》第七版 Page38-45.核心C#.Chapter2
    解读经典《C#高级编程》第七版 Page32-38.核心C#.Chapter2
    解读经典《C#高级编程》第七版 Page20-32.核心C#.Chapter2
  • 原文地址:https://www.cnblogs.com/DreamRecorder/p/9272640.html
Copyright © 2020-2023  润新知