5#include "Stroika/Foundation/StroikaPreComp.h"
11#include "LedItResources.h"
15#if qStroika_Foundation_Common_Platform_Windows
22ColorMenu::ColorMenu ()
24 VERIFY (CreatePopupMenu ());
25 ASSERT (GetMenuItemCount () == 0);
26 for (UINT i = 0; i <= 15; ++i) {
27 DISABLE_COMPILER_MSC_WARNING_START (4312)
28 VERIFY (AppendMenu (MF_OWNERDRAW, kBaseFontColorCmd + i, reinterpret_cast<LPCTSTR> (kBaseFontColorCmd + i)));
29 DISABLE_COMPILER_MSC_WARNING_END (4312)
36COLORREF ColorMenu::GetColor (UINT
id)
38 return FontCmdToColor (
id).GetOSRep ();
41Color ColorMenu::FontCmdToColor (UINT cmd)
43 ASSERT (cmd >= kBaseFontColorCmd);
44 ASSERT (cmd <= kLastFontNamedColorCmd);
49 return Color::kMaroon;
51 return Color::kDarkGreen;
55 return Color::kNavyBlue;
57 return Color::kPurple;
63 return Color::kSilver;
69 return Color::kYellow;
72 case kFuchsiaColorCmd:
73 return Color::kMagenta;
84UINT ColorMenu::FontColorToCmd (Color color)
86 for (UINT i = kBaseFontColorCmd; i <= kLastFontNamedColorCmd; ++i) {
87 if (FontCmdToColor (i) == color) {
91 return kFontColorOtherCmd;
94void ColorMenu::DrawItem (LPDRAWITEMSTRUCT lpDIS)
96 ASSERT (lpDIS->CtlType == ODT_MENU);
97 UINT
id = (UINT)(WORD)lpDIS->itemID;
98 ASSERT (
id == lpDIS->itemData);
99 ASSERT (
id >= kBaseFontColorCmd);
100 ASSERT (
id <= kLastFontNamedColorCmd);
102 dc.Attach (lpDIS->hDC);
104 CRect rc (lpDIS->rcItem);
105 ASSERT (rc.Width () < 500);
106 if (lpDIS->itemState & ODS_FOCUS)
107 dc.DrawFocusRect (&rc);
109 COLORREF cr = (lpDIS->itemState & ODS_SELECTED) ? ::GetSysColor (COLOR_HIGHLIGHT) : dc.GetBkColor ();
111 CBrush brushFill (cr);
112 cr = dc.GetTextColor ();
114 if (lpDIS->itemState & ODS_SELECTED)
115 dc.SetTextColor (::GetSysColor (COLOR_HIGHLIGHTTEXT));
117 int nBkMode = dc.SetBkMode (TRANSPARENT);
118 dc.FillRect (&rc, &brushFill);
122 strColor.LoadString (
id);
123 dc.TextOut (rc.left, rc.top, strColor, strColor.GetLength ());
127 rc.right = rc.left + 40;
128 CBrush brush (GetColor (
id));
129 CBrush* pOldBrush = dc.SelectObject (&brush);
132 dc.SelectObject (pOldBrush);
133 dc.SetTextColor (cr);
134 dc.SetBkMode (nBkMode);
139void ColorMenu::MeasureItem (LPMEASUREITEMSTRUCT lpMIS)
141 ASSERT (lpMIS->CtlType == ODT_MENU);
142 UINT
id = (UINT)(WORD)lpMIS->itemID;
143 ASSERT (
id == lpMIS->itemData);
144 ASSERT (
id >= kBaseFontColorCmd);
145 ASSERT (
id <= kLastFontNamedColorCmd);
146 class CDisplayIC :
public CDC {
150 CreateIC (_T(
"DISPLAY"), NULL, NULL, NULL);
155 strColor.LoadString (
id);
156 CSize sizeText = dc.GetTextExtent (strColor, strColor.GetLength ());
157 ASSERT (sizeText.cx < 500);
158 lpMIS->itemWidth = sizeText.cx + 50;
159 lpMIS->itemHeight = sizeText.cy;