下午把颜色选择做好了,趁没忘写下过程,供大家参考 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