191 lines
4.6 KiB
C++
191 lines
4.6 KiB
C++
// ColorPickerDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "EtEffect2Tool.h"
|
|
#include "ColorPickerDlg.h"
|
|
|
|
|
|
// CColorPickerDlg dialog
|
|
|
|
IMPLEMENT_DYNAMIC(CColorPickerDlg, CDialog)
|
|
|
|
CColorPickerDlg::CColorPickerDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CColorPickerDlg::IDD, pParent)
|
|
, m_strRed(_T(""))
|
|
, m_strGreen(_T(""))
|
|
, m_strBlue(_T(""))
|
|
{
|
|
m_InitialColor = RGB(128,128,128);
|
|
m_strRed.Format("128");
|
|
m_strGreen.Format("128");
|
|
m_strBlue.Format("128");
|
|
}
|
|
|
|
CColorPickerDlg::~CColorPickerDlg()
|
|
{
|
|
}
|
|
|
|
void CColorPickerDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Text(pDX, IDC_EDIT1, m_strRed);
|
|
DDX_Text(pDX, IDC_EDIT2, m_strGreen);
|
|
DDX_Text(pDX, IDC_EDIT3, m_strBlue);
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CColorPickerDlg, CDialog)
|
|
ON_WM_PAINT()
|
|
ON_REGISTERED_MESSAGE(WM_XCOLORPICKER_SELCHANGE, OnSelChange)
|
|
ON_REGISTERED_MESSAGE(WM_XCOLORPICKER_SELENDOK, OnSelendOk)
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CColorPickerDlg::OnBnClickedButton1)
|
|
ON_BN_CLICKED(IDC_BUTTON2, &CColorPickerDlg::OnBnClickedButton2)
|
|
ON_EN_CHANGE(IDC_EDIT1, &CColorPickerDlg::OnEnChangeEdit1)
|
|
ON_EN_CHANGE(IDC_EDIT2, &CColorPickerDlg::OnEnChangeEdit2)
|
|
ON_EN_CHANGE(IDC_EDIT3, &CColorPickerDlg::OnEnChangeEdit3)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
// CColorPickerDlg message handlers
|
|
static const int startX = 170;
|
|
static const int startY = 160;
|
|
|
|
void CColorPickerDlg::OnPaint()
|
|
{
|
|
CPaintDC dc(this); // device context for painting
|
|
// TODO: Add your message handler code here
|
|
// Do not call CDialog::OnPaint() for painting messages
|
|
RECT rcPickRect;
|
|
rcPickRect.left = startX;
|
|
rcPickRect.top = startY;
|
|
rcPickRect.right = startX + 60;
|
|
rcPickRect.bottom = startY + 60;
|
|
|
|
dc.FillSolidRect( &rcPickRect, RGB(128,128,128) );
|
|
|
|
rcPickRect.left++;
|
|
rcPickRect.top++;
|
|
rcPickRect.right--;
|
|
rcPickRect.bottom--;
|
|
|
|
BYTE red = GetRValue(m_ColorSpectrum.GetRGB());
|
|
BYTE green = GetGValue(m_ColorSpectrum.GetRGB());
|
|
BYTE blue = GetBValue(m_ColorSpectrum.GetRGB());
|
|
|
|
dc.FillSolidRect( &rcPickRect, RGB(red,green,blue) );
|
|
}
|
|
|
|
BOOL CColorPickerDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
// TODO: Add extra initialization here
|
|
|
|
CRect rect;
|
|
GetDlgItem(IDC_FRAME)->GetWindowRect(&rect);
|
|
ScreenToClient(&rect);
|
|
GetDlgItem(IDC_FRAME)->ShowWindow(SW_HIDE);
|
|
VERIFY(m_ColorSpectrum.Create(AfxGetInstanceHandle(), WS_CHILD | WS_VISIBLE | WS_TABSTOP /*| WS_BORDER*/,
|
|
rect, m_hWnd, 9001, m_InitialColor));//, CXColorSpectrumCtrl::XCOLOR_TOOLTIP_HTML));
|
|
|
|
// call SetWindowPos to insert control in proper place in tab order
|
|
::SetWindowPos(m_ColorSpectrum.m_hWnd, ::GetDlgItem(m_hWnd, IDC_FRAME),
|
|
0,0,0,0, SWP_NOMOVE|SWP_NOSIZE);
|
|
|
|
::SetFocus(m_ColorSpectrum.m_hWnd);
|
|
|
|
|
|
return FALSE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CColorPickerDlg::UpdatePreviewBox()
|
|
{
|
|
RECT rcPickRect;
|
|
rcPickRect.left = startX;
|
|
rcPickRect.top = startY;
|
|
rcPickRect.right = startX + 60;
|
|
rcPickRect.bottom = startY + 60;
|
|
InvalidateRect(&rcPickRect, FALSE);
|
|
}
|
|
|
|
// handler for WM_XCOLORPICKER_SELCHANGE
|
|
LRESULT CColorPickerDlg::OnSelChange(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
m_strRed.Format("%d", GetRValue(wParam) );
|
|
m_strGreen.Format("%d", GetGValue(wParam) );
|
|
m_strBlue.Format("%d", GetBValue(wParam) );
|
|
|
|
UpdatePreviewBox();
|
|
UpdateData( FALSE );
|
|
|
|
return 0;
|
|
}
|
|
|
|
// handler for WM_XCOLORPICKER_SELENDOK
|
|
LRESULT CColorPickerDlg::OnSelendOk(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
TRACE(_T("CXColorSpectrumCtrlTestDlg::OnSelendOk: color=0x%06X id=%d\n"), wParam, lParam);
|
|
return 0;
|
|
}
|
|
|
|
|
|
void CColorPickerDlg::OnBnClickedButton1()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
OnOK();
|
|
}
|
|
|
|
void CColorPickerDlg::OnBnClickedButton2()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
OnCancel();
|
|
}
|
|
|
|
void CColorPickerDlg::UpdateColor()
|
|
{
|
|
UpdateData( TRUE );
|
|
int red = atoi( m_strRed.GetBuffer() );
|
|
int green = atoi( m_strGreen.GetBuffer() );
|
|
int blue = atoi( m_strBlue.GetBuffer() );
|
|
m_ColorSpectrum.SetRGB( RGB(red, green, blue) );
|
|
UpdatePreviewBox();
|
|
|
|
red = __max(0, __min(255, red));
|
|
green = __max(0, __min(255, green));
|
|
blue = __max(0, __min(255, blue));
|
|
m_strRed.Format("%d", red);
|
|
m_strGreen.Format("%d", green);
|
|
m_strBlue.Format("%d", blue);
|
|
UpdateData( FALSE );
|
|
}
|
|
|
|
void CColorPickerDlg::OnEnChangeEdit1()
|
|
{
|
|
UpdateColor();
|
|
}
|
|
|
|
void CColorPickerDlg::OnEnChangeEdit2()
|
|
{
|
|
UpdateColor();
|
|
}
|
|
|
|
void CColorPickerDlg::OnEnChangeEdit3()
|
|
{
|
|
UpdateColor();
|
|
}
|
|
|
|
COLORREF CColorPickerDlg::GetColor()
|
|
{
|
|
COLORREF color = m_ColorSpectrum.GetRGB();
|
|
return color;
|
|
}
|
|
|
|
void CColorPickerDlg::SetColor( COLORREF color )
|
|
{
|
|
m_InitialColor = color;
|
|
m_strRed.Format("%d", GetRValue(color));
|
|
m_strGreen.Format("%d", GetGValue(color));
|
|
m_strBlue.Format("%d", GetBValue(color));
|
|
}
|