123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- #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<CString> 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;
- }
- }
|