You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
524 lines
14 KiB
C++
524 lines
14 KiB
C++
2 years ago
|
// XTPControlPopupColor.cpp : implementation of the CXTPControlPopupColor class.
|
||
|
//
|
||
|
// This file is a part of the XTREME COMMANDBARS MFC class library.
|
||
|
// (c)1998-2012 Codejock Software, All Rights Reserved.
|
||
|
//
|
||
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
||
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
||
|
// CONSENT OF CODEJOCK SOFTWARE.
|
||
|
//
|
||
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
||
|
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
||
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
||
|
// SINGLE COMPUTER.
|
||
|
//
|
||
|
// CONTACT INFORMATION:
|
||
|
// support@codejock.com
|
||
|
// http://www.codejock.com
|
||
|
//
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "Common/Resource.h"
|
||
|
|
||
|
#include "Common/XTPResourceManager.h"
|
||
|
#include "Common/XTPDrawHelpers.h"
|
||
|
#include "Common/XTPColorManager.h"
|
||
|
#include "Common/XTPImageManager.h"
|
||
|
#include "Common/XTPPropExchange.h"
|
||
|
#include "Common/XTPToolTipContext.h"
|
||
|
#include "Common/XTPSystemHelpers.h"
|
||
|
#include "Common/XTPHookManager.h"
|
||
|
|
||
|
#include "XTPCommandBarsDefines.h"
|
||
|
#include "XTPControl.h"
|
||
|
#include "XTPControlButton.h"
|
||
|
#include "XTPControlPopup.h"
|
||
|
#include "XTPControlPopupColor.h"
|
||
|
#include "XTPCommandBar.h"
|
||
|
#include "XTPPaintManager.h"
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#define new DEBUG_NEW
|
||
|
#undef THIS_FILE
|
||
|
static char THIS_FILE[] = __FILE__;
|
||
|
#endif
|
||
|
|
||
|
#define CLR_TO_RGBQUAD(clr) (RGB(GetBValue(clr), GetGValue(clr), GetRValue(clr)))
|
||
|
|
||
|
#define XTP_SELECTOR_SIZE 18
|
||
|
#define XTP_SELECTOR_MARGIN 2
|
||
|
|
||
|
#define XTP_SELECTOR_WIDTH (XTP_SELECTOR_SIZE * 8 + XTP_SELECTOR_MARGIN * 2)
|
||
|
#define XTP_SELECTOR_HEIGHT (XTP_SELECTOR_SIZE * 5 + XTP_SELECTOR_MARGIN * 2)
|
||
|
|
||
|
IMPLEMENT_XTP_CONTROL(CXTPControlPopupColor, CXTPControlPopup)
|
||
|
|
||
|
CXTPControlPopupColor::CXTPControlPopupColor()
|
||
|
{
|
||
|
m_controlType = xtpControlSplitButtonPopup;
|
||
|
m_clr = (COLORREF)-1;
|
||
|
EnableAutomation();
|
||
|
}
|
||
|
|
||
|
CXTPControlPopupColor::~CXTPControlPopupColor()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CXTPControlPopupColor::Copy(CXTPControl* pControl, BOOL bRecursive)
|
||
|
{
|
||
|
CXTPControlPopup::Copy(pControl, bRecursive);
|
||
|
m_clr = ((CXTPControlPopupColor*)pControl)->m_clr;
|
||
|
}
|
||
|
|
||
|
void CXTPControlPopupColor::RedrawIcon(CXTPImageManagerIcon* pImage, CXTPImageManagerIconHandle& hHandle)
|
||
|
{
|
||
|
CXTPImageManagerIconHandle& hIcon = pImage->GetIcon();
|
||
|
|
||
|
if (hIcon.IsEmpty())
|
||
|
return;
|
||
|
|
||
|
hHandle.CopyHandle(hIcon);
|
||
|
|
||
|
if (!hHandle.IsAlpha())
|
||
|
{
|
||
|
ICONINFO info;
|
||
|
|
||
|
if (GetIconInfo(hHandle.GetIcon(), &info))
|
||
|
{
|
||
|
{
|
||
|
CXTPCompatibleDC dc(NULL, CBitmap::FromHandle(info.hbmColor));
|
||
|
CXTPCompatibleDC dcMask(NULL, CBitmap::FromHandle(info.hbmMask));
|
||
|
|
||
|
BITMAP bmp;
|
||
|
ZeroMemory(&bmp, sizeof(BITMAP));
|
||
|
::GetObject(info.hbmColor, sizeof(BITMAP), &bmp);
|
||
|
int nHeight = int((double)bmp.bmHeight / 5);
|
||
|
|
||
|
CRect rc(0, bmp.bmHeight - nHeight, bmp.bmWidth, bmp.bmHeight);
|
||
|
dc.FillSolidRect(rc, m_clr);
|
||
|
dcMask.FillSolidRect(rc, 1);
|
||
|
}
|
||
|
|
||
|
hHandle = CreateIconIndirect(&info);
|
||
|
|
||
|
::DeleteObject(info.hbmMask);
|
||
|
::DeleteObject(info.hbmColor);
|
||
|
}
|
||
|
}
|
||
|
else if (hHandle.PreMultiply())
|
||
|
{
|
||
|
LPDWORD pBits = (LPDWORD)hHandle.PreMultiply();
|
||
|
CSize szIcon = hHandle.GetExtent();
|
||
|
|
||
|
DWORD dwColor = 0xFF000000 | CLR_TO_RGBQUAD(m_clr);
|
||
|
int nCount = (szIcon.cy / 5) * szIcon.cx;
|
||
|
|
||
|
for (int i = 0; i < nCount; i++)
|
||
|
{
|
||
|
*pBits++ = dwColor;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CXTPControlPopupColor::SetColor(COLORREF clr)
|
||
|
{
|
||
|
if (clr != m_clr)
|
||
|
{
|
||
|
m_clr = clr;
|
||
|
|
||
|
CXTPImageManagerIconSet* pIconSet = GetImageManager()->GetIconSet(GetIconId());
|
||
|
if (pIconSet)
|
||
|
{
|
||
|
pIconSet->RefreshAll();
|
||
|
|
||
|
CXTPImageManagerIconSet::CIconSetMap* pMap = pIconSet->GetIcons();
|
||
|
|
||
|
POSITION pos = pMap->GetStartPosition();
|
||
|
UINT nWidth;
|
||
|
CXTPImageManagerIcon* pImage;
|
||
|
while (pos != NULL)
|
||
|
{
|
||
|
pMap->GetNextAssoc(pos, nWidth, pImage);
|
||
|
|
||
|
CXTPImageManagerIconHandle hIcon;
|
||
|
RedrawIcon(pImage, hIcon);
|
||
|
|
||
|
if (!hIcon.IsEmpty())
|
||
|
{
|
||
|
pImage->SetIcon(hIcon);
|
||
|
}
|
||
|
}
|
||
|
RedrawParent(FALSE);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
COLORREF CXTPControlPopupColor::GetColor() const
|
||
|
{
|
||
|
return m_clr;
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
IMPLEMENT_XTP_CONTROL(CXTPControlButtonColor, CXTPControlButton)
|
||
|
|
||
|
|
||
|
CXTPControlButtonColor::CXTPControlButtonColor()
|
||
|
{
|
||
|
SetStyle(xtpButtonCaption);
|
||
|
m_clr = COLORREF_NULL;
|
||
|
}
|
||
|
|
||
|
void CXTPControlButtonColor::Copy(CXTPControl* pControl, BOOL bRecursive)
|
||
|
{
|
||
|
CXTPControlButton::Copy(pControl, bRecursive);
|
||
|
m_clr = ((CXTPControlButtonColor*)pControl)->m_clr;
|
||
|
}
|
||
|
|
||
|
void CXTPControlButtonColor::DoPropExchange(CXTPPropExchange* pPX)
|
||
|
{
|
||
|
CXTPControlButton::DoPropExchange(pPX);
|
||
|
|
||
|
if (pPX->GetSchema() > _XTP_SCHEMA_1041)
|
||
|
{
|
||
|
PX_DWord(pPX, _T("Color"), m_clr, COLORREF_NULL);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
CSize CXTPControlButtonColor::GetSize(CDC* /*pDC*/)
|
||
|
{
|
||
|
return CSize(XTP_SELECTOR_WIDTH, max(23, GetPaintManager()->GetControlHeight()));
|
||
|
}
|
||
|
|
||
|
void CXTPControlButtonColor::Draw(CDC* pDC)
|
||
|
{
|
||
|
CXTPPaintManager* pPaintManager = GetPaintManager();
|
||
|
CXTPFontDC font (pDC, pPaintManager->GetRegularFont());
|
||
|
|
||
|
pPaintManager->DrawControlEntry(pDC, this);
|
||
|
pDC->SetTextColor(pPaintManager->GetControlTextColor(this));
|
||
|
|
||
|
CRect rcText = GetRect();
|
||
|
pPaintManager->DrawControlText(pDC, this, &rcText, TRUE, FALSE, TRUE, FALSE);
|
||
|
|
||
|
if (m_clr != COLORREF_NULL)
|
||
|
{
|
||
|
CRect rcButton(CPoint(m_rcControl.left + 2, m_rcControl.CenterPoint().y - XTP_SELECTOR_SIZE / 2), CSize(XTP_SELECTOR_SIZE, XTP_SELECTOR_SIZE));
|
||
|
rcButton.DeflateRect(3, 3);
|
||
|
|
||
|
if (GetEnabled())
|
||
|
pDC->FillSolidRect(rcButton, m_clr);
|
||
|
|
||
|
pDC->Draw3dRect(rcButton, GetXtremeColor(COLOR_3DSHADOW), GetXtremeColor(COLOR_3DSHADOW));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CXTPControlButtonColor::SetColor(COLORREF clr)
|
||
|
{
|
||
|
if (clr != m_clr)
|
||
|
{
|
||
|
m_clr = clr;
|
||
|
RedrawParent(FALSE);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
COLORREF CXTPControlButtonColor::GetColor() const
|
||
|
{
|
||
|
return m_clr;
|
||
|
}
|
||
|
|
||
|
|
||
|
struct CXTPControlColorSelector::CColorInfo
|
||
|
{
|
||
|
CColorInfo(COLORREF _clrButton, UINT _toolTipID)
|
||
|
{
|
||
|
clrButton = _clrButton;
|
||
|
toolTipID = _toolTipID;
|
||
|
}
|
||
|
|
||
|
COLORREF clrButton;
|
||
|
UINT toolTipID;
|
||
|
CString strTip;
|
||
|
};
|
||
|
|
||
|
static CXTPControlColorSelector::CColorInfo extendedColors[] =
|
||
|
{
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x00, 0x00, 0x00), XTP_IDS_CLR_BLACK),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x99, 0x33, 0x00), XTP_IDS_CLR_BROWN),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x33, 0x33, 0x00), XTP_IDS_CLR_OLIVE_GREEN),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x00, 0x33, 0x00), XTP_IDS_CLR_DARK_GREEN),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x00, 0x33, 0x66), XTP_IDS_CLR_DARK_TEAL),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x00, 0x00, 0x80), XTP_IDS_CLR_DARK_BLUE),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x33, 0x33, 0x99), XTP_IDS_CLR_INDIGO),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x33, 0x33, 0x33), XTP_IDS_CLR_GRAY80),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x80, 0x00, 0x00), XTP_IDS_CLR_DARK_RED),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0xFF, 0x66, 0x00), XTP_IDS_CLR_ORANGE),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x80, 0x80, 0x00), XTP_IDS_CLR_DARK_YELLOW),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x00, 0x80, 0x00), XTP_IDS_CLR_GREEN),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x00, 0x80, 0x80), XTP_IDS_CLR_TEAL),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x00, 0x00, 0xFF), XTP_IDS_CLR_BLUE),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x66, 0x66, 0x99), XTP_IDS_CLR_BLUEGRAY),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x80, 0x80, 0x80), XTP_IDS_CLR_GRAY50),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0xFF, 0x00, 0x00), XTP_IDS_CLR_RED),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0xFF, 0x99, 0x00), XTP_IDS_CLR_LIGHTORANGE),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x99, 0xCC, 0x00), XTP_IDS_CLR_LIME),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x33, 0x99, 0x66), XTP_IDS_CLR_SEA_GREEN),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x33, 0xCC, 0xCC), XTP_IDS_CLR_AQUA),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x33, 0x66, 0xFF), XTP_IDS_CLR_LIGHT_BLUE),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x80, 0x00, 0x80), XTP_IDS_CLR_VIOLET),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x99, 0x99, 0x99), XTP_IDS_CLR_GRAY40),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0xFF, 0x00, 0xFF), XTP_IDS_CLR_PINK),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0xFF, 0xCC, 0x00), XTP_IDS_CLR_GOLD),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0xFF, 0xFF, 0x00), XTP_IDS_CLR_YELLOW),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x00, 0xFF, 0x00), XTP_IDS_CLR_BRIGHT_GREEN),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x00, 0xFF, 0xFF), XTP_IDS_CLR_TURQUOISE),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x00, 0xCC, 0xFF), XTP_IDS_CLR_SKY_BLUE),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x99, 0x33, 0x66), XTP_IDS_CLR_PLUM),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0xC0, 0xC0, 0xC0), XTP_IDS_CLR_GRAY25),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0xFF, 0x99, 0xCC), XTP_IDS_CLR_ROSE),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0xFF, 0xCC, 0x99), XTP_IDS_CLR_TAN),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0xFF, 0xFF, 0x99), XTP_IDS_CLR_LIGHT_YELLOW),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0xCC, 0xFF, 0xCC), XTP_IDS_CLR_LIGHT_GREEN),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0xCC, 0xFF, 0xFF), XTP_IDS_CLR_LIGHT_TURQUOISE),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0x99, 0xCC, 0xFF), XTP_IDS_CLR_PALE_BLUE),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0xCC, 0x99, 0xFF), XTP_IDS_CLR_LAVENDER),
|
||
|
CXTPControlColorSelector::CColorInfo(RGB(0xFF, 0xFF, 0xFF), XTP_IDS_CLR_WHITE),
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_XTP_CONTROL(CXTPControlColorSelector, CXTPControl)
|
||
|
|
||
|
|
||
|
CXTPControlColorSelector::CXTPControlColorSelector()
|
||
|
{
|
||
|
EnableAutomation();
|
||
|
|
||
|
m_nSelected = -1;
|
||
|
m_clr = (COLORREF)-1;
|
||
|
SetFlags(xtpFlagNoMovable);
|
||
|
|
||
|
int nCount = GetItemCount();
|
||
|
for (int i = 0; i < nCount; i++)
|
||
|
{
|
||
|
XTPResourceManager()->LoadString(&extendedColors[i].strTip, extendedColors[i].toolTipID);
|
||
|
}
|
||
|
m_nPressed = -1;
|
||
|
}
|
||
|
|
||
|
CSize CXTPControlColorSelector::GetSize(CDC* /*pDC*/)
|
||
|
{
|
||
|
|
||
|
return CSize (XTP_SELECTOR_WIDTH, XTP_SELECTOR_HEIGHT);
|
||
|
}
|
||
|
|
||
|
INT_PTR CXTPControlColorSelector::OnToolHitTest(CPoint point, TOOLINFO* pTI) const
|
||
|
{
|
||
|
int nIndex = HitTest(point);
|
||
|
if (nIndex == -1)
|
||
|
return 0;
|
||
|
|
||
|
INT_PTR nHit = extendedColors[nIndex].toolTipID;
|
||
|
|
||
|
CXTPToolTipContext::FillInToolInfo(pTI, GetParent()->GetSafeHwnd(), GetRect(nIndex), nHit, extendedColors[nIndex].strTip);
|
||
|
|
||
|
return nHit;
|
||
|
}
|
||
|
|
||
|
CRect CXTPControlColorSelector::GetRect(int nIndex) const
|
||
|
{
|
||
|
int x = nIndex % 8, y = nIndex / 8;
|
||
|
|
||
|
return CRect(
|
||
|
CPoint(
|
||
|
XTP_SELECTOR_MARGIN + m_rcControl.left + x * XTP_SELECTOR_SIZE,
|
||
|
XTP_SELECTOR_MARGIN + m_rcControl.top + y * XTP_SELECTOR_SIZE),
|
||
|
CSize(XTP_SELECTOR_SIZE, XTP_SELECTOR_SIZE));
|
||
|
}
|
||
|
|
||
|
int CXTPControlColorSelector::HitTest(CPoint point) const
|
||
|
{
|
||
|
int nCount = GetItemCount();
|
||
|
|
||
|
if (!m_rcControl.PtInRect(point))
|
||
|
return -1;
|
||
|
|
||
|
for (int i = 0; i < nCount; i++)
|
||
|
{
|
||
|
if (GetRect(i).PtInRect(point))
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
void CXTPControlColorSelector::Draw(CDC* pDC)
|
||
|
{
|
||
|
int nCount = GetItemCount();
|
||
|
|
||
|
for (int i = 0; i < nCount; i++)
|
||
|
{
|
||
|
CRect rcButton = GetRect(i);
|
||
|
|
||
|
if (i == m_nSelected || extendedColors[i].clrButton == m_clr)
|
||
|
{
|
||
|
BOOL bPressed = GetPressed() && i == m_nSelected;
|
||
|
GetPaintManager()->DrawRectangle(pDC, rcButton, i == m_nSelected, bPressed, GetEnabled(), extendedColors[i].clrButton == m_clr, FALSE, xtpBarTypeNormal, xtpBarPopup);
|
||
|
}
|
||
|
|
||
|
|
||
|
rcButton.DeflateRect(3, 3);
|
||
|
if (GetEnabled())
|
||
|
pDC->FillSolidRect(rcButton, extendedColors[i].clrButton);
|
||
|
|
||
|
pDC->Draw3dRect(rcButton, GetXtremeColor(COLOR_3DSHADOW), GetXtremeColor(COLOR_3DSHADOW));
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CXTPControlColorSelector::SetSelectedItem(int nItem)
|
||
|
{
|
||
|
if (m_nSelected != nItem)
|
||
|
{
|
||
|
m_nSelected = nItem;
|
||
|
RedrawParent();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CXTPControlColorSelector::OnMouseMove(CPoint point)
|
||
|
{
|
||
|
int nHit = HitTest(point);
|
||
|
if (nHit != -1)
|
||
|
{
|
||
|
SetSelectedItem(nHit);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BOOL CXTPControlColorSelector::OnSetSelected(int bSelected)
|
||
|
{
|
||
|
if (!bSelected) m_nSelected = -1;
|
||
|
|
||
|
if (IsKeyboardSelected(bSelected) && !m_bSelected)
|
||
|
{
|
||
|
SetSelectedItem(bSelected == TRUE_KEYBOARD_PREV ? GetItemCount() - 1 : 0);
|
||
|
}
|
||
|
|
||
|
return CXTPControl::OnSetSelected(bSelected);
|
||
|
}
|
||
|
|
||
|
BOOL CXTPControlColorSelector::IsFocused() const
|
||
|
{
|
||
|
return GetSelected();
|
||
|
}
|
||
|
|
||
|
int CXTPControlColorSelector::GetItemCount() const
|
||
|
{
|
||
|
return sizeof(extendedColors) / sizeof(extendedColors[0]);
|
||
|
}
|
||
|
|
||
|
BOOL CXTPControlColorSelector::OnHookKeyDown(UINT nChar, LPARAM /*lParam*/)
|
||
|
{
|
||
|
ASSERT(IsFocused());
|
||
|
|
||
|
if (!IsFocused())
|
||
|
return FALSE;
|
||
|
|
||
|
CXTPDrawHelpers::KeyToLayout(GetParent(), nChar);
|
||
|
|
||
|
switch (nChar)
|
||
|
{
|
||
|
case VK_HOME:
|
||
|
SetSelectedItem(0);
|
||
|
return TRUE;
|
||
|
|
||
|
case VK_END:
|
||
|
SetSelectedItem(GetItemCount() - 1);
|
||
|
return TRUE;
|
||
|
|
||
|
case VK_LEFT:
|
||
|
if (m_nSelected <= 0)
|
||
|
return FALSE;
|
||
|
|
||
|
SetSelectedItem(m_nSelected - 1);
|
||
|
return TRUE;
|
||
|
|
||
|
case VK_RIGHT:
|
||
|
if (m_nSelected >= GetItemCount() - 1)
|
||
|
return FALSE;
|
||
|
|
||
|
SetSelectedItem(m_nSelected + 1);
|
||
|
return TRUE;
|
||
|
|
||
|
case VK_UP:
|
||
|
if (m_nSelected < 8)
|
||
|
return FALSE;
|
||
|
|
||
|
SetSelectedItem(m_nSelected - 8);
|
||
|
return TRUE;
|
||
|
|
||
|
case VK_DOWN:
|
||
|
if (m_nSelected >= GetItemCount() - 8)
|
||
|
return FALSE;
|
||
|
|
||
|
SetSelectedItem(m_nSelected + 8);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
void CXTPControlColorSelector::OnExecute()
|
||
|
{
|
||
|
if (m_nPressed != -1)
|
||
|
{
|
||
|
m_clr = extendedColors[m_nPressed].clrButton;
|
||
|
}
|
||
|
CXTPControl::OnExecute();
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
COLORREF CXTPControlColorSelector::GetColor() const
|
||
|
{
|
||
|
return m_clr;
|
||
|
}
|
||
|
|
||
|
void CXTPControlColorSelector::SetColor(COLORREF clr)
|
||
|
{
|
||
|
if (clr != m_clr)
|
||
|
{
|
||
|
m_clr = clr;
|
||
|
RedrawParent();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void CXTPControlColorSelector::OnClick(BOOL bKeyboard, CPoint pt)
|
||
|
{
|
||
|
if (!GetEnabled()) return;
|
||
|
|
||
|
int nHit = bKeyboard ? m_nSelected : HitTest(pt);
|
||
|
if (nHit == -1) return;
|
||
|
|
||
|
m_nPressed = nHit;
|
||
|
|
||
|
if (!bKeyboard)
|
||
|
{
|
||
|
ClickToolBarButton();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
OnExecute();
|
||
|
}
|
||
|
m_nPressed = -1;
|
||
|
}
|
||
|
|
||
|
void CXTPControlColorSelector::OnLButtonUp(CPoint point)
|
||
|
{
|
||
|
if (GetEnabled() && m_pParent->GetPosition() == xtpBarPopup)
|
||
|
{
|
||
|
OnClick(TRUE, point);
|
||
|
}
|
||
|
}
|
||
|
|