diff options
Diffstat (limited to 'alf/alftoplevel.cpp')
| -rw-r--r-- | alf/alftoplevel.cpp | 90 |
1 files changed, 28 insertions, 62 deletions
diff --git a/alf/alftoplevel.cpp b/alf/alftoplevel.cpp index 29e43cb..0a8ece7 100644 --- a/alf/alftoplevel.cpp +++ b/alf/alftoplevel.cpp @@ -193,6 +193,10 @@ ALF_Toplevel_DefWindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { ALFToplevelPriv *priv = (ALFToplevelPriv*)GetWindowLongPtr(hwnd, DLGWINDOWEXTRA); + LRESULT r; + if (ALF_ReflectMessage(hwnd, msg, wparam, lparam, &r)) + return r; + if (msg == WM_INITDIALOG) { struct ALFToplevel_CreateParams *params = (struct ALFToplevel_CreateParams *)lparam; @@ -278,84 +282,46 @@ ALF_Toplevel_DefWindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) return 0; } - if (msg == WM_COMMAND) { + if (msg == WM_COMMAND && priv->vtbl && priv->vtbl->command) { HWND source = (HWND)lparam; WORD code = HIWORD(wparam); WORD id = LOWORD(wparam); - LRESULT ret = 0; - if (source != 0) - ret = SendMessage(source, 0x2000 + WM_COMMAND, wparam, lparam); - - if (ret == 0 && priv->vtbl && priv->vtbl->command) - ret = priv->vtbl->command(priv->closure, hwnd, code, id, source); - - return ret; + return priv->vtbl->command(priv->closure, hwnd, code, id, source); } - if (msg == WM_NOTIFY) { + if (msg == WM_NOTIFY && priv->vtbl && priv->vtbl->notify) { NMHDR *nmhdr = (NMHDR *)lparam; - LRESULT ret = 0; - - if (nmhdr->hwndFrom) - ret = SendMessage(nmhdr->hwndFrom, 0x2000 + WM_NOTIFY, wparam, lparam); - - if (ret == 0 && priv->vtbl && priv->vtbl->notify) - ret = priv->vtbl->notify(priv->closure, hwnd, wparam, nmhdr); - - return ret; + return priv->vtbl->notify(priv->closure, hwnd, wparam, nmhdr); } - if (msg == WM_DRAWITEM) { - LPDRAWITEMSTRUCT dis = (DRAWITEMSTRUCT *)lparam; - LRESULT ret = 0; - if (wparam && dis->hwndItem) { - ret = SendMessage(dis->hwndItem, 0x2000 + WM_DRAWITEM, wparam, lparam); - } + if (msg == WM_CTLCOLORSTATIC) { + if (ALF_Compat_IsComCtlV6() && !ALF_Compat_IsVista()) { + // HACK! transparent checkbox background for comctl v6 on XP + // broken on every other version of windows, but not needed for Vista - if (ret) - return ret; - } + WCHAR c[32] = {0}; + GetClassNameW((HWND)lparam, c, sizeof(c)/sizeof(c[0])); - if (msg == WM_CTLCOLORSTATIC) { - LRESULT ret = SendMessage((HWND)lparam, 0x2000 + WM_CTLCOLORSTATIC, wparam, lparam); + if (!lstrcmpW(c, WC_BUTTONW)) { + RECT rcClient; + GetClientRect((HWND)lparam, &rcClient); - if (ret) { - return ret; - } else { - if (ALF_Compat_IsComCtlV6() && !ALF_Compat_IsVista()) { - // HACK! transparent checkbox background for comctl v6 on XP - // broken on every other version of windows, but not needed for Vista - - WCHAR c[32] = {0}; - GetClassNameW((HWND)lparam, c, sizeof(c)/sizeof(c[0])); - - if (!lstrcmpW(c, WC_BUTTONW)) { - RECT rcClient; - GetClientRect((HWND)lparam, &rcClient); - - ALF_Compat_DrawThemeParentBackground((HWND)lparam, (HDC)wparam, &rcClient); - SetBkColor((HDC)wparam, GetSysColor(COLOR_BTNFACE)); - SetTextColor((HDC)wparam, GetSysColor(COLOR_BTNTEXT)); - return (LRESULT)GetStockObject(HOLLOW_BRUSH); - } + ALF_Compat_DrawThemeParentBackground((HWND)lparam, (HDC)wparam, &rcClient); + SetBkColor((HDC)wparam, GetSysColor(COLOR_BTNFACE)); + SetTextColor((HDC)wparam, GetSysColor(COLOR_BTNTEXT)); + return (LRESULT)GetStockObject(HOLLOW_BRUSH); } - - SetBkColor((HDC)wparam, GetSysColor(COLOR_BTNFACE)); - SetTextColor((HDC)wparam, GetSysColor(COLOR_BTNTEXT)); - return (LRESULT)GetSysColorBrush(COLOR_BTNFACE); } + + SetBkColor((HDC)wparam, GetSysColor(COLOR_BTNFACE)); + SetTextColor((HDC)wparam, GetSysColor(COLOR_BTNTEXT)); + return (LRESULT)GetSysColorBrush(COLOR_BTNFACE); } if (msg == WM_CTLCOLORBTN) { - LRESULT ret = SendMessage((HWND)lparam, 0x2000 + WM_CTLCOLORBTN, wparam, lparam); - - if (ret) { - return ret; - } else { - SetBkColor((HDC)wparam, GetSysColor(COLOR_BTNFACE)); - SetTextColor((HDC)wparam, GetSysColor(COLOR_BTNTEXT)); - return (LRESULT)GetSysColorBrush(COLOR_BTNFACE); - } + SetBkColor((HDC)wparam, GetSysColor(COLOR_BTNFACE)); + SetTextColor((HDC)wparam, GetSysColor(COLOR_BTNTEXT)); + return (LRESULT)GetSysColorBrush(COLOR_BTNFACE); } if (msg == WM_SIZE) { |
