diff --git a/redo/common_windows.c b/redo/common_windows.c index d89cb21..13997c7 100644 --- a/redo/common_windows.c +++ b/redo/common_windows.c @@ -79,8 +79,6 @@ static LRESULT forwardNotify(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) BOOL sharedWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *lResult) { - DWORD exstyle; - switch (uMsg) { case WM_COMMAND: *lResult = forwardCommand(hwnd, uMsg, wParam, lParam); @@ -90,16 +88,11 @@ BOOL sharedWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT * return TRUE; case WM_CTLCOLORSTATIC: case WM_CTLCOLORBTN: - exstyle = (DWORD) GetWindowLongPtrW((HWND) lParam, GWL_EXSTYLE); - // TODO clean this up -{// if ((exstyle & WS_EX_TRANSPARENT) != 0) { - if (SetBkMode((HDC) wParam, TRANSPARENT) == 0) - xpanic("error setting transparent background mode to Labels", GetLastError()); - paintControlBackground((HWND) lParam, (HDC) wParam); - *lResult = (LRESULT) hollowBrush; - return TRUE; - } - return FALSE; + if (SetBkMode((HDC) wParam, TRANSPARENT) == 0) + xpanic("error setting transparent background mode to Labels", GetLastError()); + paintControlBackground((HWND) lParam, (HDC) wParam); + *lResult = (LRESULT) hollowBrush; + return TRUE; } return FALSE; } @@ -112,7 +105,6 @@ void paintControlBackground(HWND hwnd, HDC dc) int saved; WCHAR classname[128] = L""; // more than enough to avoid collisions - // TODO implement WM_PRINTCLIENT in window_windows.c parent = hwnd; do { parent = GetParent(parent); diff --git a/redo/window_windows.c b/redo/window_windows.c index 7790bfe..2d047b0 100644 --- a/redo/window_windows.c +++ b/redo/window_windows.c @@ -5,6 +5,8 @@ #define windowclass L"gouiwindow" +#define windowBackground ((HBRUSH) (COLOR_BTNFACE + 1)) + static LRESULT CALLBACK windowWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { void *data; @@ -17,6 +19,15 @@ static LRESULT CALLBACK windowWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARA if (sharedWndProc(hwnd, uMsg, wParam, lParam, &lResult)) return lResult; switch (uMsg) { + case WM_PRINTCLIENT: + // the return value of this message is not documented + // just to be safe, do this first, returning its value later + lResult = DefWindowProcW(hwnd, uMsg, wParam, lParam); + if (GetClientRect(hwnd, &r) == 0) + xpanic("error getting client rect for Window in WM_PRINTCLIENT", GetLastError()); + if (FillRect((HDC) wParam, &r, windowBackground) == 0) + xpanic("error filling WM_PRINTCLIENT DC with window background color", GetLastError()); + return lResult; case WM_SIZE: if (GetClientRect(hwnd, &r) == 0) xpanic("error getting client rect for Window in WM_SIZE", GetLastError()); @@ -41,7 +52,7 @@ DWORD makeWindowWindowClass(char **errmsg) wc.hInstance = hInstance; wc.hIcon = hDefaultIcon; wc.hCursor = hArrowCursor; - wc.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1); + wc.hbrBackground = windowBackground; wc.lpszClassName = windowclass; if (RegisterClassW(&wc) == 0) { *errmsg = "error registering Window window class";