DragonNest/Client/EtEffect2Tool/ColorPickerDlg.cpp

192 lines
4.6 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
// 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));
}