29#define CSBN_SELCHANGE 10
68 m_face.SetSelectColor(RGB(255, 255, 255));
69 m_default.
Resize(DEFAULTMAX);
70 loop ( i, DEFAULTMAX )
72 BYTE r = down_cast<BYTE>((i &
_BIT(0)) == 0 ? 255 : 0);
73 BYTE g = down_cast<BYTE>((i &
_BIT(1)) == 0 ? 255 : 0);
74 BYTE b = down_cast<BYTE>((i &
_BIT(2)) == 0 ? 255 : 0);
75 m_default[i] = RGB(r, g, b);
86 m_pAccessor = pAccessor;
87 m_accessorSectionName = lpszAccessorSectionName;
89 loop ( i, DEFAULTMAX )
92 m_default[i] = sec.
QueryDword(key, m_default[i]);
103 COLORREF r = m_face.GetSelectColor();
104 m_face.SetSelectColor(c);
105 m_InsertDefaultColor(c);
108 _super::SetNormalDrawer(m_face);
109 _super::RedrawWindow();
120 return m_face.GetSelectColor();
131 if ( index >= 0 && index < DEFAULTMAX )
133 COLORREF r = m_default[index];
134 m_default[index] = c;
137 return INVALID_INDEX;
147 if ( index >= 0 && index < DEFAULTMAX )
149 return m_default[index];
151 return INVALID_INDEX;
161 void OnDrawItem(
int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
163 if ( lpDrawItemStruct->CtlType == ODT_MENU )
165 HDC dc = lpDrawItemStruct->hDC;
166 CRect rc = lpDrawItemStruct->rcItem;
167 COLORREF color = lpDrawItemStruct->itemData;
170 bool isSel = ((lpDrawItemStruct->itemState & CDIS_SELECTED) != 0);
171 ::FillRect(dc, &rc, ::GetSysColorBrush(isSel ? COLOR_HIGHLIGHT : COLOR_MENU));
174 CPen pen(PS_SOLID, 1, RGB(0, 0, 0));
176 rc.DeflateRect(3, 3);
177 ::Rectangle(dc, rc.left, rc.top, rc.right, rc.bottom);
180 _super::OnDrawItem(nIDCtl, lpDrawItemStruct);
191 _super::PreSubclassWindow();
193 _super::GetClientRect(rc);
195 f.
Set(80, _T(
"MS Gothic"));
196 COLORREF c = m_face.GetSelectColor();
198 m_face.Resize(rc.Size());
199 m_face.SetTextColor(CLR_INVALID);
200 m_face.SetSelectColor(CLR_INVALID);
201 _super::SetDisableDrawer(m_face);
202 m_face.SetTextColor(RGB(0, 0, 0));
203 m_face.SetSelectColor(c);
204 _super::SetNormalDrawer(m_face);
213 _super::OnClickButton();
216 _super::GetWindowRect(&rc);
217 menu.CreatePopupMenu();
218 UINT pos =
static_cast<UINT
>(-1);
219 loop ( i, DEFAULTMAX )
221 menu.InsertMenu(pos, MF_OWNERDRAW, ITEM_DEFAULTTOP + i,
reinterpret_cast<LPCTSTR
>(m_default[i]));
223 menu.InsertMenu(pos, MF_SEPARATOR);
224 menu.InsertMenu(pos, 0, ITEM_OTHER, _T(
"その他..."));
225 menu.TrackPopupMenu(0, rc.left, rc.bottom,
this, NULL);
238 virtual LRESULT
WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
240 if ( message == WM_DRAWITEM )
242 OnDrawItem(wParam,
reinterpret_cast<LPDRAWITEMSTRUCT
>(lParam));
244 else if ( message == WM_COMMAND )
246 if ( wParam == ITEM_OTHER )
248 CColorDialog dlg(m_face.GetSelectColor());
249 if ( dlg.DoModal() == IDOK )
251 COLORREF c = dlg.GetColor();
252 m_face.SetSelectColor(c);
253 m_InsertDefaultColor(c);
254 _super::SetNormalDrawer(m_face);
255 _super::Invalidate();
259 else if ( wParam >= ITEM_DEFAULTTOP && ITEM_DEFAULTTOP + DEFAULTMAX > wParam )
261 COLORREF c = m_default[wParam - 2000];
262 m_face.SetSelectColor(c);
263 m_InsertDefaultColor(c);
264 _super::SetNormalDrawer(m_face);
265 _super::Invalidate();
269 return _super::WindowProc(message, wParam, lParam);
275 void m_InsertDefaultColor(COLORREF c)
277 if ( m_default[0] == c )
283 if ( c == m_default[i] )
288 m_default[j + 1] = m_default[j];
297 m_default[i + 1] = m_default[i];
304 void m_WriteDefault(
void)
306 if ( m_pAccessor == NULL )
311 loop ( i, DEFAULTMAX )
314 sec.WriteDword(key, m_default[i]);
323 CFaceDrawer(
CFontHandle font = NULL, COLORREF textColor = CLR_INVALID, COLORREF selectColor = CLR_INVALID)
324 : m_font(font), m_selectColor(selectColor), m_textColor(textColor)
330 return m_selectColor;
338 void SetTextColor(COLORREF c)
354 CFaceDrawer* P =
new CFaceDrawer;
366 virtual void Draw(HDC dc,
int x = 0,
int y = 0)
const
369 CRect rc(CPoint(x, y), m_size);
370 dca.SelectFont(m_font);
371 rc.DeflateRect(5, 5);
372 if ( m_font != NULL )
377 r.right = r.left + 2;
378 ::DrawEdge(dc, &r, EDGE_ETCHED, BF_LEFT | BF_RIGHT);
379 rc.right = r.left - 4;
381 if ( IS_RGBVALUE(m_selectColor) )
383 CBrush brush(m_selectColor);
384 CPen pen(PS_SOLID, 1, RGB(0, 0, 0));
385 dca.SelectBrush(brush);
387 ::Rectangle(dc, rc.left, rc.top, rc.right, rc.bottom);
391 COLORREF m_selectColor;
392 COLORREF m_textColor;
400 ITEM_DEFAULTTOP = 2000,
405 CStr m_accessorSectionName;
#define loop_dn(VAR, CNT)
loop構文.
#define loop(VAR, CNT)
loop構文.
HWND GetSafeHwnd(void) const
[取得] ウィンドウハンドル取得.
void SelectBrush(HBRUSH brush)
[選択] ブラシ選択.
void SelectPen(HPEN pen)
[選択] ペン選択.
bool Set(const LOGFONT &attr)
[設定] フォント設定.
static CStrT Fmt(const TCHAR *lpszFormat,...)
[作成] 書式付き文字列作成
static bool DrawTextRect(RECT &_rect, HDC dc, DWORD drawStyle, const POINT &offset, COLORREF color1, COLORREF color2, LPCTSTR str)
[表示] 範囲文字表示.
size_t GetSize(void) const
[取得] サイズ取得
void Resize(size_t l)
[設定] サイズ再設定
DWORD QueryDword(LPCTSTR lpszKey, DWORD dwDefault=0) const
[取得] 数値情報取得
LRESULT SendCommandMessage(CWnd *pCtrl, UINT cmd)
[処理] WM_COMMAND送信.