diff options
| author | Jonas Kümmerlin <jonas@kuemmerlin.eu> | 2020-06-11 14:38:31 +0200 |
|---|---|---|
| committer | Jonas Kümmerlin <jonas@kuemmerlin.eu> | 2020-06-11 14:38:31 +0200 |
| commit | b7e4e6fb0bbfdd91f969be5011c0b76ef0ab2e2d (patch) | |
| tree | e7cfd07a5403585e36f75d0431ba06e8cf3f558d /alf/alflabel.cpp | |
| parent | f722fb1155cb3d198c450a68d7db82a0bf6318bf (diff) | |
double buffering implementation for pre-Vista systems
label is now drawn double-buffered to reduce flicker
Diffstat (limited to 'alf/alflabel.cpp')
| -rw-r--r-- | alf/alflabel.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/alf/alflabel.cpp b/alf/alflabel.cpp index b3a87c4..0a47d58 100644 --- a/alf/alflabel.cpp +++ b/alf/alflabel.cpp @@ -222,16 +222,28 @@ ALF_Label_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps); - ALF_Label_Paint(hwnd, priv, hdc, &ps.rcPaint); + RECT rcClient; + GetClientRect(hwnd, &rcClient); + RECT rcPaint = { 0, 0, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top }; + + HDC hdcBuffer = NULL; + ALF_Compat_HPAINTBUFFER hpb = ALF_Compat_BeginBufferedPaint(hdc, &rcPaint, 0, NULL, &hdcBuffer); + if (hpb) { + ALF_Label_Paint(hwnd, priv, hdcBuffer, &ps.rcPaint); + ALF_Compat_EndBufferedPaint(hpb, TRUE); + } else { + ALF_Label_Paint(hwnd, priv, hdc, &ps.rcPaint); + } EndPaint(hwnd, &ps); return TRUE; } else if (uMsg == WM_PRINTCLIENT) { - RECT rc; - GetClientRect(hwnd, &rc); + RECT rcClient; + GetClientRect(hwnd, &rcClient); + RECT rcPaint = { 0, 0, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top }; - ALF_Label_Paint(hwnd, priv, (HDC)wParam, &rc); + ALF_Label_Paint(hwnd, priv, (HDC)wParam, &rcPaint); } else if (uMsg == WM_NCHITTEST) { return HTTRANSPARENT; } else if (uMsg == ALF_WM_QUERYSIZE) { |
