summaryrefslogtreecommitdiff
path: root/alf/alftoplevel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'alf/alftoplevel.cpp')
-rw-r--r--alf/alftoplevel.cpp90
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) {