void SetPaddingXY(LabelWithCloseWnd *w, int x, int y) { w->padL = x; w->padR = x; w->padT = y; w->padB = y; ScheduleRepaint(w->hwnd); }
void ShowFrameRate(FrameRateWnd *w, int frameRate) { if (w->frameRate == frameRate) { return; } w->frameRate = frameRate; SIZE s = GetIdealSize(w); PositionWindow(w, s); ScheduleRepaint(w->hwnd); }
void SetTextCol(LabelWithCloseWnd *w, COLORREF c) { w->txtCol = c; ScheduleRepaint(w->hwnd); }
void SetLabel(LabelWithCloseWnd *w, const WCHAR *label) { win::SetText(w->hwnd, label); ScheduleRepaint(w->hwnd); }
static LRESULT CALLBACK WndProcLabelWithClose(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) { if (WM_ERASEBKGND == msg) { return TRUE; // tells Windows we handle background erasing so it doesn't do it } LabelWithCloseWnd *w = nullptr; if (WM_NCCREATE == msg) { LPCREATESTRUCT lpcs = reinterpret_cast<LPCREATESTRUCT>(lp); w = reinterpret_cast<LabelWithCloseWnd *>(lpcs->lpCreateParams); w->hwnd = hwnd; SetWindowLongPtr(hwnd, GWLP_USERDATA, reinterpret_cast<LPARAM>(w)); goto DoDefault; } else { w = reinterpret_cast<LabelWithCloseWnd *>(GetWindowLongPtr(hwnd, GWLP_USERDATA)); } if (!w) { goto DoDefault; } // to match other controls, preferred way is explict SetFont() call if (WM_SETFONT == msg) { SetFont(w, (HFONT)wp); return 0; } if (WM_GETFONT == msg) { return (LRESULT)w->font; } if (WM_SIZE == msg) { int dx = LOWORD(lp); int dy = HIWORD(lp); CalcCloseButtonPos(w, dx, dy); ScheduleRepaint(hwnd); return 0; } if (WM_MOUSEMOVE == msg) { ScheduleRepaint(w->hwnd); if (IsMouseOverClose(w)) { // ask for WM_MOUSELEAVE notifications TRACKMOUSEEVENT tme = { 0 }; tme.cbSize = sizeof(tme); tme.dwFlags = TME_LEAVE; tme.hwndTrack = hwnd; TrackMouseEvent(&tme); } goto DoDefault; } if (WM_MOUSELEAVE == msg) { ScheduleRepaint(w->hwnd); return 0; } if (WM_LBUTTONUP == msg) { if (IsMouseOverClose(w)) { HWND parent = GetParent(w->hwnd); SendMessage(parent, WM_COMMAND, w->cmd, 0); } return 0; } if (WM_PAINT == msg) { OnPaint(w); return 0; } DoDefault: return DefWindowProc(hwnd, msg, wp, lp); }
static LRESULT CALLBACK WndProcSplitter(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) { if (WM_ERASEBKGND == msg) { return TRUE; // tells Windows we handle background erasing so it doesn't do it } SplitterWnd *w = nullptr; if (WM_NCCREATE == msg) { LPCREATESTRUCT lpcs = reinterpret_cast<LPCREATESTRUCT>(lp); w = reinterpret_cast<SplitterWnd *>(lpcs->lpCreateParams); w->hwnd = hwnd; SetWindowLongPtr(hwnd, GWLP_USERDATA, reinterpret_cast<LPARAM>(w)); goto Exit; } else { w = reinterpret_cast<SplitterWnd *>(GetWindowLongPtr(hwnd, GWLP_USERDATA)); } if (!w) { goto Exit; } if (WM_LBUTTONDOWN == msg) { SetCapture(hwnd); if (!w->isLive) { if (w->parentClipsChildren) { ToggleWindowStyle(GetParent(hwnd), WS_CLIPCHILDREN, false); } DrawResizeLine(w, false, true); } return 0; } if (WM_LBUTTONUP == msg) { if (!w->isLive) { DrawResizeLine(w, true, false); if (w->parentClipsChildren) { ToggleWindowStyle(GetParent(hwnd), WS_CLIPCHILDREN, true); } } ReleaseCapture(); w->cb(w->ctx, true); ScheduleRepaint(w->hwnd); return 0; } if (WM_MOUSEMOVE == msg) { LPWSTR curId = IDC_SIZENS; if (SplitterVert == w->type) { curId = IDC_SIZEWE; } if (hwnd == GetCapture()) { bool resizingAllowed = w->cb(w->ctx, false); if (!resizingAllowed) { curId = IDC_NO; } else if (!w->isLive) { DrawResizeLine(w, true, true); } } SetCursor(curId); return 0; } if (WM_PAINT == msg) { OnPaint(w); return 0; } Exit: return DefWindowProc(hwnd, msg, wp, lp); }
void SetBgCol(SplitterWnd *w, COLORREF c) { w->bgCol = c; ScheduleRepaint(w->hwnd); }