123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- // RadioExt.cpp: implementation of the CRadioExt class.
- //
- //////////////////////////////////////////////////////////////////////
- #include "stdafx.h"
- #include "RadioExt.h"
- #include "library.h"
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[]=__FILE__;
- #define new DEBUG_NEW
- #endif
- WNDPROC CRadioExt::m_cWndProc = NULL;
- int CRadioExt::pos = 0;
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- LRESULT CRadioExt::DefWindowProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
- {
- CPoint point;
- LRESULT lReturn;
- TRACKMOUSEEVENT Tme;
- pos=FindPos((DWORD)hWnd, g_wndstatelist);
- pos++;
- switch( message )
- {
- case WM_ERASEBKGND:
- return 1;
- case WM_NCPAINT:
- case WM_PAINT:
- CallWindowProc( m_cWndProc, hWnd, message, wParam, lParam );
- OnPaint( hWnd );
- return 1;
- case BM_SETSTYLE: // 按钮风格改变
- CXPM_SETSTATE(g_wndstatelist.ElementAt (pos), CXPS_DEFAULT, wParam & BS_DEFPUSHBUTTON);
- OnPaint( hWnd );
- break;
- case BM_SETSTATE: // 设置按钮状态
- lReturn = (LONG) CallWindowProc( m_cWndProc, hWnd, message, wParam, lParam );
- CXPM_SETSTATE(g_wndstatelist.ElementAt (pos), CXPS_PRESSED, wParam);
- OnPaint( hWnd );
- return lReturn;
- case BM_SETCHECK: // 设置选中状态
- lReturn = (LONG) CallWindowProc( m_cWndProc, hWnd, message, wParam, lParam );
- CXPM_SETSTATE(g_wndstatelist.ElementAt (pos), CXPS_CHECKED, (wParam == BST_CHECKED));
- CXPM_SETSTATE(g_wndstatelist.ElementAt (pos), CXPS_INDETERMINATE, (wParam == BST_INDETERMINATE));
- OnPaint( hWnd );
- return lReturn;
- case WM_SETTEXT: // 设置窗口文本
- lReturn = (LONG) CallWindowProc( m_cWndProc, hWnd, message, wParam, lParam );
- OnPaint( hWnd );
- return lReturn;
- case WM_MOUSELEAVE: // 鼠标移出
- if (g_wndstatelist.ElementAt (pos) & CXPS_HOTLIGHT)
- {
- g_wndstatelist.ElementAt (pos) &= ~CXPS_HOTLIGHT;
- }
- if (g_wndstatelist.ElementAt (pos) & CXPS_PRESSED)
- {
- g_wndstatelist.ElementAt (pos) &= ~CXPS_PRESSED;
- }
- OnPaint( hWnd );
- return 0;
- case WM_MOUSEMOVE: // 窗口移动
- if (((g_wndstatelist.ElementAt (pos) & CXPS_HOTLIGHT) == 0) && ((wParam & MK_LBUTTON) == 0))
- {
- g_wndstatelist.ElementAt (pos) |= CXPS_HOTLIGHT;
- OnPaint( hWnd );
- // 追踪鼠标移出消息一次
- Tme.cbSize = sizeof(TRACKMOUSEEVENT);
- Tme.dwFlags = TME_LEAVE;
- Tme.hwndTrack = hWnd;
- _TrackMouseEvent(&Tme);
- }
- break;
- case WM_ENABLE: // 窗口被设置为禁用或可用
- CXPM_SETSTATE(g_wndstatelist.ElementAt (pos), CXPS_DISABLED, !wParam);
- OnPaint( hWnd );
- break;
- case WM_DESTROY:
- {
- g_wndstatelist.RemoveAt(pos);
- g_wndstatelist.RemoveAt(pos-1);
- break;
- }
- default:
- break;
- }
- return CallWindowProc( m_cWndProc, hWnd, message, wParam, lParam );
- }
-
-
- void CRadioExt::OnPaint( HWND hWnd )
- {
- RECT Rect,rc, rcText;
- MEMDCXP Mdcxp;
- HANDLE hHandle, hPen;
- char szTemp[256];
- DWORD dwStyle;
- HDC hDC;
- // 获取内存兼容设备场景
- Mdcxp.hWnd = hWnd;
- Mdcxp.bTransfer = FALSE;
- Mdcxp.hBitmap = NULL;
- g_bDrawBk=1;
- GetMemDCXP(&Mdcxp);
- hDC = Mdcxp.hMemDC;
- // 获取窗口大小
- GetWindowRect(hWnd, &Rect);
- Rect.right -= Rect.left;
- Rect.bottom -= Rect.top;
- Rect.left = Rect.top = 0;
- // 填充背景
- // hHandle = CreateSolidBrush(g_crDialogbkColor);
- // FillRect(hDC,&Rect, (HBRUSH)hHandle);
- // DeleteObject(hHandle);
- //按显示模式调整位置
- dwStyle = GetWindowLong(hWnd, GWL_STYLE);
- if (Rect.bottom > 13)
- {
- Rect.top = (Rect.bottom - 13)/2;
- Rect.bottom = Rect.top + 13;
- }
- if (dwStyle & BS_LEFTTEXT)
- {
- rcText = Rect;
- rcText.right -= 17;
- Rect.left = Rect.right - 13;
- }
- else
- {
- rcText = Rect;
- rcText.left += 17;
- Rect.left = 0;
- Rect.right = 13;
- }
- rc=Rect;
- // 画热点框渐变背景(橘黄色)
- if (!(g_wndstatelist.ElementAt (pos) & CXPS_DISABLED))
- {
- if (g_wndstatelist.ElementAt (pos) & CXPS_PRESSED||g_wndstatelist.ElementAt (pos) & CXPS_HOTLIGHT)
- {
- CDC* pDC=CDC::FromHandle (hDC);
- rc.top -=2;
- pDC->SetPixel(CPoint(7+rc.left ,rc.top+4),RGB(244,212,140));
- pDC->SetPixel(CPoint(4+rc.left,rc.top+5),RGB(181,196,207));
- pDC->SetPixel(CPoint(5+rc.left,rc.top+5),RGB(181,196,207));
- pDC->SetPixel(CPoint(6+rc.left,rc.top+5),RGB(253,214,132));
- pDC->SetPixel(CPoint(7+rc.left,rc.top+5),RGB(253,214,132));
- pDC->SetPixel(CPoint(8+rc.left,rc.top+5),RGB(253,214,132));
- pDC->SetPixel(CPoint(9+rc.left,rc.top+5),RGB(253,214,132));
- pDC->SetPixel(CPoint(4+rc.left,rc.top+6),RGB(252,220,152));
- pDC->SetPixel(CPoint(5+rc.left,rc.top+6),RGB(252,220,152));
- pDC->SetPixel(CPoint(6+rc.left,rc.top+6),RGB(247,227,179));
- pDC->SetPixel(CPoint(7+rc.left,rc.top+6),RGB(242,237,215));
- pDC->SetPixel(CPoint(8+rc.left,rc.top+6),RGB(247,227,179));
- pDC->SetPixel(CPoint(9+rc.left,rc.top+6),RGB(251,200,99));
- pDC->SetPixel(CPoint(10+rc.left,rc.top+6),RGB(251,200,99));
- pDC->SetPixel(CPoint(3+rc.left,rc.top+7),RGB(254,223,156));
- pDC->SetPixel(CPoint(4+rc.left,rc.top+7),RGB(254,220,152));
- pDC->SetPixel(CPoint(5+rc.left,rc.top+7),RGB(233,236,210));
- pDC->SetPixel(CPoint(9+rc.left,rc.top+7),RGB(233,236,210));
- pDC->SetPixel(CPoint(10+rc.left,rc.top+7),RGB(251,200,99));
- pDC->SetPixel(CPoint(11+rc.left,rc.top+7),RGB(251,200,99));
-
-
- pDC->SetPixel(CPoint(3+rc.left,rc.top+8),RGB(253,217,140));
- pDC->SetPixel(CPoint(4+rc.left,rc.top+8),RGB(247,227,179));
- pDC->SetPixel(CPoint(10+rc.left,rc.top+8),RGB(247,227,179));
- pDC->SetPixel(CPoint(11+rc.left,rc.top+8),RGB(251,200,99));
-
- pDC->SetPixel(CPoint(2+rc.left,rc.top+9),RGB(254,223,156));
- pDC->SetPixel(CPoint(3+rc.left,rc.top+9),RGB(254,220,152));
- pDC->SetPixel(CPoint(4+rc.left,rc.top+9),RGB(233,236,210));
- pDC->SetPixel(CPoint(10+rc.left,rc.top+9),RGB(233,236,210));
- pDC->SetPixel(CPoint(11+rc.left,rc.top+9),RGB(251,200,99));
- pDC->SetPixel(CPoint(12+rc.left,rc.top+9),RGB(251,200,99));
- pDC->SetPixel(CPoint(3+rc.left,rc.top+10),RGB(252,211,124));
- pDC->SetPixel(CPoint(4+rc.left,rc.top+10),RGB(246,224,172));
- pDC->SetPixel(CPoint(10+rc.left,rc.top+10),RGB(251,200,99));
- pDC->SetPixel(CPoint(11+rc.left,rc.top+10),RGB(251,200,99));
-
- pDC->SetPixel(CPoint(3+rc.left,rc.top+11),RGB(254,223,156));
- pDC->SetPixel(CPoint(4+rc.left,rc.top+11),RGB(254,220,152));
- pDC->SetPixel(CPoint(5+rc.left,rc.top+11),RGB(233,236,210));
- pDC->SetPixel(CPoint(9+rc.left,rc.top+11),RGB(233,236,210));
- pDC->SetPixel(CPoint(10+rc.left,rc.top+11),RGB(251,200,99));
- pDC->SetPixel(CPoint(11+rc.left,rc.top+11),RGB(251,200,99));
- pDC->SetPixel(CPoint(4+rc.left,rc.top+12),RGB(253,217,140));
- pDC->SetPixel(CPoint(5+rc.left,rc.top+12),RGB(253,217,140));
- pDC->SetPixel(CPoint(6+rc.left,rc.top+12),RGB(247,227,179));
- pDC->SetPixel(CPoint(8+rc.left,rc.top+12),RGB(247,227,179));
- pDC->SetPixel(CPoint(9+rc.left,rc.top+12),RGB(251,200,99));
- pDC->SetPixel(CPoint(10+rc.left,rc.top+12),RGB(251,200,99));
-
- pDC->SetPixel(CPoint(5+rc.left,rc.top+13),RGB(251,200,99));
- pDC->SetPixel(CPoint(6+rc.left,rc.top+13),RGB(251,200,99));
- pDC->SetPixel(CPoint(7+rc.left,rc.top+13),RGB(251,200,99));
- pDC->SetPixel(CPoint(8+rc.left,rc.top+13),RGB(251,200,99));
- pDC->SetPixel(CPoint(9+rc.left,rc.top+13),RGB(251,200,99));
- pDC->SetPixel(CPoint(7+rc.left,rc.top+14),RGB(251,200,99));
- }
- }
- //空的背景色
- hHandle = SelectObject(hDC, GetStockObject(NULL_BRUSH));
- // 画框内选中标志(中间小圆点)
- if (g_wndstatelist.ElementAt (pos) & CXPS_CHECKED)
- {
- hPen= SelectObject(hDC, CreatePen(PS_SOLID, 1, RGB(29,147,29)));
- hHandle = SelectObject(hDC, CreateSolidBrush(RGB(29,147,29)));
- Ellipse(hDC, Rect.left+5, Rect.top+5,Rect.left+10,Rect.top+10);
- DeleteObject(SelectObject(hDC,hPen));
- DeleteObject(SelectObject(hDC,hHandle));
- }
- //画圆
- hPen = SelectObject(hDC, CreatePen(PS_SOLID, 1, (g_wndstatelist.ElementAt (pos) & CXPS_DISABLED) ? (GetSysColor(COLOR_BTNFACE) - 0x00202020) : 0x00845118));
- Ellipse(hDC, Rect.left+2, Rect.top+2,Rect.left+13,Rect.top+13);
- DeleteObject(SelectObject(hDC,hPen));
- //恢复背景色
- SelectObject(hDC, hHandle);
- // 画文字
- if (GetWindowText(hWnd, szTemp, sizeof(szTemp)))
- {
- // SetBkColor(hDC, g_crDialogbkColor);
- SetTextColor(hDC, GetSysColor((g_wndstatelist.ElementAt (pos) & CXPS_DISABLED) ? COLOR_GRAYTEXT: COLOR_BTNTEXT));
- hHandle = (HANDLE) SelectObject(hDC,
- (HGDIOBJ) SendMessage(hWnd, WM_GETFONT, 0, 0));
- DrawText(hDC, szTemp, -1, &rcText, DT_SINGLELINE | DT_VCENTER);
- SelectObject(hDC, (HGDIOBJ) hHandle);
- }
- //释放句柄
- Mdcxp.bTransfer = TRUE;
- ReleaseMemDCXP(&Mdcxp);
-
- }
|