#include "stdafx.h" #include "StateButton.h" IMPLEMENT_DYNAMIC(CStateButton, CButton) CStateButton::CStateButton() : btnState(0) , colorState(0) , lastColorState(0) , chooseState(0) , strInfo("") { } CStateButton::~CStateButton() { } BEGIN_MESSAGE_MAP(CStateButton, CButton) END_MESSAGE_MAP() void CStateButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { drawButton(); } void CStateButton::drawButton() { CClientDC dc(this); dc.SetBkMode(TRANSPARENT); CRect rc; GetClientRect(rc); CFont BigFont, NozFont, ItemFont; CFont *pFont = NULL; int nBigFontH = 30; int nNozFontH = 24; int nItemFoldH = 17; if (0 != NozFont.CreateFont(nNozFontH, 0, 0, 0, FW_SEMIBOLD, 0, 0, 0, DEFAULT_CHARSET, OUT_STROKE_PRECIS, CLIP_STROKE_PRECIS, DRAFT_QUALITY, VARIABLE_PITCH | FF_SWISS, _T("΢ÈíÑźÚ"))) { pFont = dc.SelectObject(&NozFont); } ItemFont.CreateFont(-MulDiv(int(nItemFoldH), 72, 72), 0, 0, 0, FW_MEDIUM, 0, 0, 0, GB2312_CHARSET, OUT_STROKE_PRECIS, CLIP_STROKE_PRECIS, PROOF_QUALITY, FIXED_PITCH | FF_SWISS, "΢ÈíÑźÚ"); CFont font; font.CreateFont(-MulDiv(int(16), 72, 72), 0, 0, 0, FW_SEMIBOLD, 0, 0, 0, GB2312_CHARSET, OUT_STROKE_PRECIS, CLIP_STROKE_PRECIS, PROOF_QUALITY, FIXED_PITCH | FF_SWISS, "΢ÈíÑźÚ"); CPen bgPen; bgPen.CreatePen(PS_SOLID, 1, RGB(255, 255, 255)); CPen* pOldPen = dc.SelectObject(&bgPen); CBrush brh1; if (colorState == 0) { brh1.CreateSolidBrush(RGB(255, 255, 255)); } else if (colorState == 1) { brh1.CreateSolidBrush(RGB(117, 197, 240)); } CBrush *pOldBrush = dc.SelectObject(&brh1); CBrush brh2; COLORREF color; color = RGB(38, 45, 49); TRIVERTEX vert[2]; GRADIENT_RECT gRect; vert[0].x = rc.left; vert[0].y = rc.top; vert[1].x = rc.right; vert[1].y = rc.bottom; if (state == 0) { vert[0].Red = 0xe500; vert[0].Green = 0xe500; vert[0].Blue = 0xe500; vert[0].Alpha = 0xff00; vert[1].Red = 0xa900; vert[1].Green = 0xa900; vert[1].Blue = 0xa900; vert[1].Alpha = 0xff00; brh2.CreateSolidBrush(RGB(252, 152, 0)); } else if (state == 1) { vert[0].Red = 0xc600; vert[0].Green = 0xe700; vert[0].Blue = 0xf900; vert[0].Alpha = 0xff00; vert[1].Red = 0x2600; vert[1].Green = 0xb200; vert[1].Blue = 0xff00; vert[1].Alpha = 0xff00; brh2.CreateSolidBrush(RGB(231, 159, 67)); } else if (state == 2) { vert[0].Red = 0xf300; vert[0].Green = 0xc400; vert[0].Blue = 0x6b00; vert[0].Alpha = 0xff00; vert[1].Red = 0xfc00; vert[1].Green = 0x9800; vert[1].Blue = 0x0000; vert[1].Alpha = 0xff00; brh2.CreateSolidBrush(RGB(137, 160, 175)); } /* else if (index >= 10 && index <= 12) { vert[0].Red = 0xf300; vert[0].Green = 0xc400; vert[0].Blue = 0x6b00; vert[0].Alpha = 0xff00; vert[1].Red = 0xfc00; vert[1].Green = 0x9800; vert[1].Blue = 0x0000; vert[1].Alpha = 0xff00; brh2.CreateSolidBrush(RGB(137, 160, 175)); } else { //»Ò 229 169 vert[0].Red = 0xe500; vert[0].Green = 0xe500; vert[0].Blue = 0xe500; vert[0].Alpha = 0xff00; vert[1].Red = 0xa900; vert[1].Green = 0xa900; vert[1].Blue = 0xa900; vert[1].Alpha = 0xff00; brh2.CreateSolidBrush(RGB(169, 169, 169)); } */ gRect.UpperLeft = 0; gRect.LowerRight = 1; GradientFill(dc.m_hDC, vert, 2, &gRect, 1, GRADIENT_FILL_RECT_V); CBrush brh3(0xffffff);//RGB(51, 55, 68) pOldBrush = dc.SelectObject(&brh3); CRgn rgn; rgn.CreateRoundRectRgn(rc.left, rc.top, rc.right, rc.bottom, 15, 15); dc.FrameRgn(&rgn, &brh3, 1, 1); CRgn rgn3; int al = 5; rgn3.CreateRoundRectRgn(rc.left - al, rc.top - al, rc.right + al, rc.bottom + al, 15, 15); dc.FrameRgn(&rgn3, &brh3, al, al); CRect rcBlank(13, 75, 162, 102); //CBrush brh4(RGB(255, 255, 255)); CBrush brh4(0xdddddd); //0xf3d191//0xdfddd90xc7ddc0 CBrush brh5(0xf1f9ec); //0xf3d191//0xdfddd90xc7ddc0 if (state == 0) { pOldBrush = dc.SelectObject(&brh4); } else { pOldBrush = dc.SelectObject(&brh5); } if (type == 0) { //dc.RoundRect(rcBlank, CPoint(8, 8)); } //CBrush brh(RGB(57, 171, 229)); //pOldBrush = dc.SelectObject(&brh); dc.SetTextColor(color); CRect rcname(rc); rcname.left = 40; rcname.right -= 4; rcname.bottom = 25; CRect rcamout(rcname); CRect rcvol(rcname); CRect rcprice(rcname); rcamout.OffsetRect(0, 30); rcvol.OffsetRect(0, 30*2); rcprice.OffsetRect(0, 30*3); CRect rca(rcamout); rca.left = rc.left + 3; rca.right = 38; CRect rcv(rca); CRect rcp(rca); rcv.OffsetRect(0, 30); rcp.OffsetRect(0, 30 * 2); //if (type == 0) { /* if (strInfo != "") { CRect rcText(rcBlank); rcText.OffsetRect(0, 2); dc.DrawText(strInfo, rcText, DT_CENTER | DT_VCENTER); }*/ } dc.RoundRect(rcamout, CPoint(8, 8)); dc.RoundRect(rcvol, CPoint(8, 8)); dc.RoundRect(rcprice, CPoint(8, 8)); rcname.left = rc.left+3; dc.SelectObject(&NozFont); dc.DrawText(name, rcname, DT_CENTER | DT_VCENTER); dc.SelectObject(&font); dc.DrawText(amount, rcamout, DT_CENTER | DT_VCENTER); dc.DrawText(vol, rcvol, DT_CENTER | DT_VCENTER); dc.DrawText(price, rcprice, DT_CENTER | DT_VCENTER); dc.SelectObject(&ItemFont); dc.DrawText("½ð¶î", rca, DT_CENTER | DT_VCENTER); dc.DrawText("ÊýÁ¿" , rcv,DT_CENTER | DT_VCENTER); dc.DrawText("µ¥¼Û", rcp, DT_CENTER | DT_VCENTER); //drawlines(&dc, name, rcStr, 14, 3, 22); dc.SelectObject(pOldBrush); dc.SelectObject(pOldPen); bgPen.DeleteObject(); brh1.DeleteObject(); brh2.DeleteObject(); //brh.DeleteObject(); NozFont.DeleteObject(); font.DeleteObject(); ItemFont.DeleteObject(); } void CStateButton::drawlines(CDC* pDC, CString str, CRect rc, UINT charNumOfLine, UINT linenum, UINT rowHeight) { vector vStrs; CString tmpStr = str; while (tmpStr != "" && vStrs.size() < linenum) { int pos = 10;// getDividePos(tmpStr, charNumOfLine); CString tmpStr1 = tmpStr.Left(pos); vStrs.push_back(tmpStr1); if (tmpStr1 == tmpStr) { tmpStr = ""; } else { tmpStr = tmpStr.Mid(pos); } } UINT headAlign = (rc.bottom - rc.top - vStrs.size() * rowHeight) / 2; CRect rc1(rc); rc1.top += headAlign; rc1.left += 5; rc1.right -= 5; for (size_t i = 0; i < vStrs.size(); i++) { rc1.bottom = rc1.top + rowHeight; pDC->DrawText(vStrs[i], rc1, DT_CENTER | DT_VCENTER); rc1.top += rowHeight; } } void CStateButton::changeColor(bool change) { if (change) { chooseState = 1; colorState = 1; } else { chooseState = 0; colorState = 0; } if (lastColorState != colorState) { Invalidate(false); lastColorState = colorState; } }