VC利用调色板选择颜色

下午把颜色选择做好了,趁没忘写下过程,供大家参考  carfieldlee 070709

以下方法步骤可以实现调色选择颜色
1. 添加ColorButton.cpp、ColorButton.h、ColourPopup.cpp、ColourPopup.h到工程


2. 在某个对话框上做一个普通的Button,ID为IDC_VOLUME_COLOR,该对话框头文件包含  ColorButton.h

3.Ctrl+W 为IDC_VOLUME_COLOR添加变量为m_volColor, 然后在头文件public中将
            CButton                m_volColor;
   改为 CColorButton m_volColor;


4. 在头文件protected中添加以下5行
 //}}AFX_MSG
                     afx_msg LONG OnSelEndOK(UINT lParam, LONG wParam);
                     afx_msg LONG OnSelEndCancel(UINT lParam, LONG wParam);
                     afx_msg LONG OnSelChange(UINT lParam, LONG wParam);
                     afx_msg LONG OnCloseUp(UINT lParam, LONG wParam);
                     afx_msg LONG OnDropDown(UINT lParam, LONG wParam);
 
 DECLARE_MESSAGE_MAP()


5. 在对话框的源文件中的DoDataExchange函数最后添加
 //}}AFX_DATA_MAP
 //选择的物体颜色
 COLORREF VolumeColor; 
 DDX_ColorButton(pDX, IDC_VOLUME_COLOR, ThrowAwayColor);


6. 在源文件BEGIN_MESSAGE_MAP 中添加
   BEGIN_MESSAGE_MAP(CXXDlg, CDialog)
 //{{AFX_MSG_MAP(CXXDlg)
                      ……
 ON_MESSAGE(CPN_SELENDOK,     OnSelEndOK)
 ON_MESSAGE(CPN_SELENDCANCEL, OnSelEndCancel)
 ON_MESSAGE(CPN_SELCHANGE,    OnSelChange)
 ON_MESSAGE(CPN_CLOSEUP,      OnCloseUp)
 ON_MESSAGE(CPN_DROPDOWN,     OnDropDown)
 //}}AFX_MSG_MAP
     END_MESSAGE_MAP()


7.  在源文件BOOL CXXDlg::OnInitDialog() 中添加
 //物体伪彩色设置初始化
 m_volColor.Color = ::GetSysColor(COLOR_BACKGROUND);
 m_volColor.DefaultColor =  ::GetSysColor(COLOR_APPWORKSPACE);
 m_volColor.TrackSelection= TRUE;
 m_volColor.CustomText= _T("更多颜色...");
 m_volColor.DefaultText = _T("自动");


8.在源文件中添加函数
LONG CXXDlg::OnSelEndOK(UINT /*lParam*/, LONG /*wParam*/)
{
    TRACE0("Selection ended OK/n");
    return TRUE;
}

LONG CXXDlg::OnSelEndCancel(UINT /*lParam*/, LONG /*wParam*/)
{
    TRACE0("Selection cancelled/n");
    return TRUE;
}

LONG CXXDlg::OnSelChange(UINT /*lParam*/, LONG /*wParam*/)
{
    TRACE0("Selection changed/n");
    return TRUE;
}

LONG CXXDlg::OnCloseUp(UINT /*lParam*/, LONG /*wParam*/)
{
    TRACE0("Colour picker close up/n");
    return TRUE;
}

LONG CXXDlg::OnDropDown(UINT /*lParam*/, LONG /*wParam*/)
{
    TRACE0("Colour picker drop down/n");
    return TRUE;

9. 这样基本就完成了工作,在需要用到所选颜色的地方使用代码
           COLORREF m_Color = m_volColor.GetColor();  
           double red      = (double)GetRValue(m_Color);
           double green = (double)GetGValue(m_Color);
           double blue    = (double)GetBValue(m_Color);
即可得到所选的颜色RGB值

界面效果如下:

注:本文所用ColorButton类参考 http://www.codeproject.com/miscctrl/colorbutton.asp 

 附上ColorButton_Sourcehttp://dl2.csdn.net/down4/20070709/09200812480.zip

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值