class CTest
        : public CWindowImpl<CTest>,
        public CBufferImpl<CTest>
{
public:
    BEGIN_MSG_MAP(CTest)
        CHAIN_MSG_MAP(CDoubleBufferImpl<CTest>)
    END_MSG_MAP()

    void DoPaint(CDCHandle dc)
    {
        CRect		rect;
        GetClientRect(rect);

        CBrush		cBrushBK;
        cBrushBK.CreateSolidBrush(RGB(255,255,255));
        dc.FillRect(rect, cBrushBK);

        rect.top += 5;
        rect.left += 5;
        rect.right = rect.left + 30;
        rect.bottom = rect.top + 30;

        CBrush		cBrush;
        cBrush.CreateSolidBrush(RGB(0,0,0));

        dc.FillRect(rect, cBrush);
        dc.SetTextColor(RGB(255,0,0));
        dc.SetBkMode(TRANSPARENT);

        CFont		cFont;
        LOGFONTW	FontInfo = {0};
        FontInfo.lfWidth = 30 / 2 - 1;
        FontInfo.lfHeight = 30;
        FontInfo.lfWeight = FW_MEDIUM;
        //FontInfo.lfCharSet = DEFAULT_CHARSET;
        //FontInfo.lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS;
        swprintf_s(FontInfo.lfFaceName, 32, _T("Consolas"));

        cFont.CreateFontIndirect(&FontInfo);
        dc.SelectFont(cFont);

        dc.ExtTextOutW(rect.left, rect.top, ETO_CLIPPED, rect, _T("渋"));
        rect.right = rect.left + 20;
        dc.SetTextColor(RGB(0,255,0));
        dc.ExtTextOutW(rect.left, rect.top, ETO_CLIPPED, rect,_T("渋"));
        rect.right = rect.left + 10;
        dc.SetTextColor(RGB(0,0,255));
        dc.ExtTextOutW(rect.left, rect.top, ETO_CLIPPED, rect, _T("渋"));
    }
};