123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #include "./skinneddivider.h"
- #include "../winamp/wa_dlg.h"
- #include "./skinning.h"
- SkinnedDivider::SkinnedDivider(void) : SkinnedWnd(FALSE)
- {
- callback = NULL;
- userParam = 0L;
- clickoffs = 0;
- }
- SkinnedDivider::~SkinnedDivider(void)
- {
- }
- BOOL SkinnedDivider::Attach(HWND hwndDivider)
- {
- if(!SkinnedWnd::Attach(hwndDivider)) return FALSE;
- SetType(SKINNEDWND_TYPE_DIVIDER);
- SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);
- return TRUE;
- }
- BOOL SkinnedDivider::OnMediaLibraryIPC(INT msg, INT_PTR param, LRESULT *pResult)
- {
- switch(msg)
- {
- case ML_IPC_SKINNEDDIVIDER_SETCALLBACK:
- if ( 0 != param)
- {
- callback = ((MLDIVIDERCALLBACK*)param)->fnCallback;
- userParam = ((MLDIVIDERCALLBACK*)param)->userParam;
- }
- else { callback = NULL; userParam= 0L;}
- return TRUE;
- }
- return __super::OnMediaLibraryIPC(msg, param, pResult);
- }
- void SkinnedDivider::OnPaint(void)
- {
- PAINTSTRUCT ps;
- RECT rc, rh;
- HDC hdc = BeginPaint(hwnd, &ps);
- GetClientRect(hwnd, &rc);
- SetBkColor(hdc, WADlg_getColor(WADLG_WNDBG));
- if (SWDIV_NOHILITE & style)
- {
- ExtTextOutW(hdc, 0, 0, ETO_OPAQUE, &rc, L"", 0, NULL);
- }
- else
- {
- int l;
- HPEN pen = (HPEN)MlStockObjects_Get(HILITE_PEN),
- penOld = (HPEN)SelectObject(hdc, pen);
- if (SWDIV_VERT & style)
- {
- l = (rc.right - rc.left)/2 - 1;
- SetRect(&rh, ps.rcPaint.left, ps.rcPaint.top, l, ps.rcPaint.bottom);
- if (rh.left < rh.right) ExtTextOutW(hdc, 0, 0, ETO_OPAQUE, &rh, L"", 0, 0);
- SetRect(&rh, l + 1, ps.rcPaint.top, ps.rcPaint.right, ps.rcPaint.bottom);
- if (rh.left < rh.right) ExtTextOutW(hdc, 0, 0, ETO_OPAQUE, &rh, L"", 0, 0);
-
- MoveToEx(hdc, l, rc.top, NULL);
- LineTo(hdc, l, rc.bottom);
- }
- else
- {
- l = (rc.bottom - rc.top)/2 - 1;
- SetRect(&rh, ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right, l);
- if (rh.top < rh.bottom) ExtTextOutW(hdc, 0, 0, ETO_OPAQUE, &rh, L"", 0, 0);
- SetRect(&rh, ps.rcPaint.left, l + 1, ps.rcPaint.right, ps.rcPaint.bottom);
- if (rh.left < rh.right) ExtTextOutW(hdc, 0, 0, ETO_OPAQUE, &rh, L"", 0, 0);
- MoveToEx(hdc, rc.left, l, NULL);
- LineTo(hdc, rc.right, l);
- }
- SelectObject(hdc, penOld);
- }
- EndPaint(hwnd, &ps);
- }
- LRESULT SkinnedDivider::WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch(uMsg)
- {
- case WM_NCHITTEST: return HTCLIENT;
- case WM_ERASEBKGND: return 0;
- case WM_PAINT: OnPaint(); return 0;
- case WM_LBUTTONDOWN:
- clickoffs = (SWDIV_VERT & style) ? LOWORD(lParam) : HIWORD(lParam);
- SetCapture(hwnd);
- break;
- case WM_LBUTTONUP:
- ReleaseCapture();
- clickoffs = 0;
- break;
- case WM_SETCURSOR:
- SetCursor(LoadCursor(NULL, (SWDIV_VERT & style) ? IDC_SIZEWE : IDC_SIZENS));
- return TRUE;
- case WM_MOUSEMOVE:
- if (GetCapture() == hwnd)
- {
- RECT rw;
- BOOL vert = (SWDIV_VERT & style);
- GetWindowRect(hwnd, &rw);
- GetCursorPos(((LPPOINT)&rw) + 1);
- (SWDIV_VERT & style) ? rw.right -= clickoffs : rw.bottom -= clickoffs;
- if ((vert && rw.left != rw.right) || (!vert && rw.top != rw.bottom))
- {
- MapWindowPoints(HWND_DESKTOP, GetParent(hwnd), ((LPPOINT)&rw) + 1, 1);
- if (callback) callback(hwnd, (vert) ? rw.right : rw.bottom, userParam);
- }
- }
- break;
- }
- return __super::WindowProc(uMsg, wParam, lParam);
- }
|