diff options
Diffstat (limited to 'alf/alf.cpp')
| -rw-r--r-- | alf/alf.cpp | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/alf/alf.cpp b/alf/alf.cpp index 605f663..9cc2a59 100644 --- a/alf/alf.cpp +++ b/alf/alf.cpp @@ -240,3 +240,82 @@ ALF_MessageBox(HWND hwnd, const TCHAR *text, const TCHAR *caption, UINT type) return retval; } + +BOOL +ALF_ReflectMessage(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, LRESULT *pRet) +{ + switch (msg) { + case WM_DRAWITEM: { + if (wparam) { + DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT *)lparam; + *pRet = SendMessage(dis->hwndItem, 0x2000 + WM_DRAWITEM, wparam, lparam); + return TRUE; + } else { + // sent by a menu + return FALSE; + } + } + case WM_MEASUREITEM: { + if (wparam) { + // no HWND in MEASUREITEMSTRUCT, need to find the control by its id + HWND hwndControl = ALF_ControlHwndById(hwnd, (WORD)wparam); + if (hwndControl) { + *pRet = SendMessage(hwndControl, 0x2000 + WM_MEASUREITEM, wparam, lparam); + return TRUE; + } else { + return FALSE; + } + } else { + // sent by a menu + return FALSE; + } + + return TRUE; + } + case WM_DELETEITEM: { + DELETEITEMSTRUCT *dis = (DELETEITEMSTRUCT *)lparam; + *pRet = SendMessage(dis->hwndItem, 0x2000 + WM_DELETEITEM, wparam, lparam); + return TRUE; + } + case WM_VKEYTOITEM: + case WM_CHARTOITEM: + *pRet = SendMessage((HWND)lparam, 0x2000 + msg, wparam, lparam); + return TRUE; + case WM_COMPAREITEM: { + COMPAREITEMSTRUCT *cis = (COMPAREITEMSTRUCT *)lparam; + *pRet = SendMessage(cis->hwndItem, 0x2000 + WM_COMPAREITEM, wparam, lparam); + return TRUE; + } + case WM_NOTIFY: { + NMHDR *nmhdr = (NMHDR *)lparam; + if (nmhdr->hwndFrom) { + *pRet = SendMessage(nmhdr->hwndFrom, 0x2000 + WM_NOTIFY, wparam, lparam); + return !!*pRet; + } else { + return FALSE; + } + } + case WM_COMMAND: + if (lparam) { + *pRet = SendMessage((HWND)lparam, 0x2000 + WM_COMMAND, wparam, lparam); + return !!*pRet; + } else { + return FALSE; + } + case WM_HSCROLL: + case WM_VSCROLL: + SendMessage((HWND)lparam, 0x2000 + msg, wparam, lparam); + return FALSE; // always continue processing in parent + case WM_CTLCOLOR: + case WM_CTLCOLORMSGBOX: + case WM_CTLCOLOREDIT: + case WM_CTLCOLORLISTBOX: + case WM_CTLCOLORBTN: + case WM_CTLCOLORSTATIC: + case WM_CTLCOLORSCROLLBAR: + *pRet = SendMessage((HWND)lparam, 0x2000 + msg, wparam, lparam); + return !!*pRet; // let owner handle color stuff if the control didn’t return a brush + default: + return FALSE; + } +} |
