1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-07 03:13:49 +00:00
GLideN64/src/GLideNUI-wtl/wtl-ColorButton.cpp
2020-04-22 21:14:16 +07:00

68 lines
1.7 KiB
C++

#include "wtl-ColorButton.h"
CColorButton::CColorButton() :
m_Red(0),
m_Green(0),
m_Blue(0)
{
memset(m_CustClr, 0, sizeof(m_CustClr));
}
LRESULT CColorButton::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL &/*bHandled*/)
{
CPaintDC dc(m_hWnd);
CRect rect;
GetClientRect(&rect);
CPen pen;
pen.CreatePen(PS_SOLID, 0, ::GetSysColor(COLOR_GRAYTEXT));
HPEN hpenOld = dc.SelectPen(pen);
CBrush PaintBrush;
PaintBrush.CreateSolidBrush(RGB(m_Red, m_Green, m_Blue));
dc.SelectBrush(PaintBrush);
dc.Rectangle(rect.left, rect.top, rect.Width(), rect.Height());
dc.SelectPen(hpenOld);
return 0;
}
void CColorButton::SetColor(uint8_t Red, uint8_t Green, uint8_t Blue)
{
m_Red = Red;
m_Green = Green;
m_Blue = Blue;
SendNotification(CPN_SELCHANGE);
Invalidate();
}
LRESULT CColorButton::OnClicked(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
CHOOSECOLOR cc = { 0 };
static DWORD rgbCurrent; // initial color selection
ZeroMemory(&cc, sizeof(cc));
cc.lStructSize = sizeof(cc);
cc.hwndOwner = GetParent();
cc.lpCustColors = (LPDWORD)m_CustClr;
cc.rgbResult = RGB(m_Red, m_Green, m_Blue);
cc.Flags = CC_FULLOPEN | CC_RGBINIT | CC_PREVENTFULLOPEN;
if (ChooseColor(&cc) == TRUE)
{
m_Red = GetRValue(cc.rgbResult);
m_Green = GetGValue(cc.rgbResult);
m_Blue = GetBValue(cc.rgbResult);
SendNotification(CPN_SELCHANGE);
}
return TRUE;
}
void CColorButton::SendNotification(UINT nCode)
{
NMCOLORBUTTON nmclr;
nmclr.hdr.code = nCode;
nmclr.hdr.hwndFrom = m_hWnd;
nmclr.hdr.idFrom = GetDlgCtrlID();
nmclr.clr = RGB(m_Red, m_Green, m_Blue);
::SendMessage(GetParent(), WM_NOTIFY, (WPARAM)GetDlgCtrlID(), (LPARAM)&nmclr);
}