Ignore:
Timestamp:
Aug 28, 1999, 9:36:39 AM (26 years ago)
Author:
sandervl
Message:

Yuri Dario added macro's to windowsx.h

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/win/windowsx.h

    r4 r718  
    1 /* $Id: windowsx.h,v 1.1 1999-05-24 20:19:21 ktk Exp $ */
     1/* $Id: windowsx.h,v 1.2 1999-08-28 07:36:39 sandervl Exp $ */
    22
    33/* Copyright (C) 1999 Corel Corporation (Paul Quinn) */
     
    3636#define GET_WM_VKEYTOITEM_MPS(code, item, hwnd) (WPARAM)MAKELONG(item, code), (LONG)(hwnd)
    3737
     38/****** KERNEL Macro APIs ****************************************************/
     39
     40#define     GetInstanceModule(hInstance) (HMODULE)(hInstance)
     41
     42#define     GlobalPtrHandle(lp)         \
     43                ((HGLOBAL)GlobalHandle(lp))
     44
     45#define     GlobalLockPtr(lp)                \
     46                ((BOOL)GlobalLock(GlobalPtrHandle(lp)))
     47#define     GlobalUnlockPtr(lp)      \
     48                GlobalUnlock(GlobalPtrHandle(lp))
     49
     50#define     GlobalAllocPtr(flags, cb)        \
     51                (GlobalLock(GlobalAlloc((flags), (cb))))
     52#define     GlobalReAllocPtr(lp, cbNew, flags)       \
     53                (GlobalUnlockPtr(lp), GlobalLock(GlobalReAlloc(GlobalPtrHandle(lp) , (cbNew), (flags))))
     54#define     GlobalFreePtr(lp)                \
     55                (GlobalUnlockPtr(lp), (BOOL)GlobalFree(GlobalPtrHandle(lp)))
     56
    3857/****** USER Macro APIs ******************************************************/
    3958
     
    93112#define     InsetRect(lprc, dx, dy) InflateRect((lprc), -(dx), -(dy))
    94113
    95 /* COMBOBOX Message APIs */
     114
     115#define     SetDlgMsgResult(hwnd, msg, result) (( \
     116        (msg) == WM_CTLCOLORMSGBOX      || \
     117        (msg) == WM_CTLCOLOREDIT        || \
     118        (msg) == WM_CTLCOLORLISTBOX     || \
     119        (msg) == WM_CTLCOLORBTN         || \
     120        (msg) == WM_CTLCOLORDLG         || \
     121        (msg) == WM_CTLCOLORSCROLLBAR   || \
     122        (msg) == WM_CTLCOLORSTATIC      || \
     123        (msg) == WM_COMPAREITEM         || \
     124        (msg) == WM_VKEYTOITEM          || \
     125        (msg) == WM_CHARTOITEM          || \
     126        (msg) == WM_QUERYDRAGICON       || \
     127        (msg) == WM_INITDIALOG             \
     128    ) ? (BOOL)(result) : (SetWindowLong((hwnd), DWL_MSGRESULT, (LPARAM)(LRESULT)(result)), TRUE))
     129
     130#define     DefDlgProcEx(hwnd, msg, wParam, lParam, pfRecursion) \
     131    (*(pfRecursion) = TRUE, DefDlgProc(hwnd, msg, wParam, lParam))
     132
     133#define     CheckDefDlgRecursion(pfRecursion) \
     134    if (*(pfRecursion)) { *(pfRecursion) = FALSE; return FALSE; }
     135
     136/****** Message crackers ****************************************************/
     137
     138#define HANDLE_MSG(hwnd, message, fn)    \
     139    case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))
     140
     141/* void Cls_OnCompacting(HWND hwnd, UINT compactRatio) */
     142#define HANDLE_WM_COMPACTING(hwnd, wParam, lParam, fn) \
     143    ((fn)((hwnd), (UINT)(wParam)), 0L)
     144#define FORWARD_WM_COMPACTING(hwnd, compactRatio, fn) \
     145    (void)(fn)((hwnd), WM_COMPACTING, (WPARAM)(UINT)(compactRatio), 0L)
     146
     147/* void Cls_OnWinIniChange(HWND hwnd, LPCTSTR lpszSectionName) */
     148#define HANDLE_WM_WININICHANGE(hwnd, wParam, lParam, fn) \
     149    ((fn)((hwnd), (LPCTSTR)(lParam)), 0L)
     150#define FORWARD_WM_WININICHANGE(hwnd, lpszSectionName, fn) \
     151    (void)(fn)((hwnd), WM_WININICHANGE, 0L, (LPARAM)(LPCTSTR)(lpszSectionName))
     152
     153/* void Cls_OnSysColorChange(HWND hwnd) */
     154#define HANDLE_WM_SYSCOLORCHANGE(hwnd, wParam, lParam, fn) \
     155    ((fn)(hwnd), 0L)
     156#define FORWARD_WM_SYSCOLORCHANGE(hwnd, fn) \
     157    (void)(fn)((hwnd), WM_SYSCOLORCHANGE, 0L, 0L)
     158
     159/* BOOL Cls_OnQueryNewPalette(HWND hwnd) */
     160#define HANDLE_WM_QUERYNEWPALETTE(hwnd, wParam, lParam, fn) \
     161    MAKELRESULT((BOOL)(fn)(hwnd), 0L)
     162#define FORWARD_WM_QUERYNEWPALETTE(hwnd, fn) \
     163    (BOOL)(DWORD)(fn)((hwnd), WM_QUERYNEWPALETTE, 0L, 0L)
     164
     165/* void Cls_OnPaletteIsChanging(HWND hwnd, HWND hwndPaletteChange) */
     166#define HANDLE_WM_PALETTEISCHANGING(hwnd, wParam, lParam, fn) \
     167    ((fn)((hwnd), (HWND)(wParam)), 0L)
     168#define FORWARD_WM_PALETTEISCHANGING(hwnd, hwndPaletteChange, fn) \
     169    (void)(fn)((hwnd), WM_PALETTEISCHANGING, (WPARAM)(HWND)(hwndPaletteChange), 0L)
     170
     171/* void Cls_OnPaletteChanged(HWND hwnd, HWND hwndPaletteChange) */
     172#define HANDLE_WM_PALETTECHANGED(hwnd, wParam, lParam, fn) \
     173    ((fn)((hwnd), (HWND)(wParam)), 0L)
     174#define FORWARD_WM_PALETTECHANGED(hwnd, hwndPaletteChange, fn) \
     175    (void)(fn)((hwnd), WM_PALETTECHANGED, (WPARAM)(HWND)(hwndPaletteChange), 0L)
     176
     177/* void Cls_OnFontChange(HWND hwnd) */
     178#define HANDLE_WM_FONTCHANGE(hwnd, wParam, lParam, fn) \
     179    ((fn)(hwnd), 0L)
     180#define FORWARD_WM_FONTCHANGE(hwnd, fn) \
     181    (void)(fn)((hwnd), WM_FONTCHANGE, 0L, 0L)
     182
     183/* void Cls_OnSpoolerStatus(HWND hwnd, UINT status, int cJobInQueue) */
     184#define HANDLE_WM_SPOOLERSTATUS(hwnd, wParam, lParam, fn) \
     185    ((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam)), 0L)
     186#define FORWARD_WM_SPOOLERSTATUS(hwnd, status, cJobInQueue, fn) \
     187    (void)(fn)((hwnd), WM_SPOOLERSTATUS, (WPARAM)(status), MAKELPARAM((cJobInQueue), 0))
     188
     189/* void Cls_OnDevModeChange(HWND hwnd, LPCTSTR lpszDeviceName) */
     190#define HANDLE_WM_DEVMODECHANGE(hwnd, wParam, lParam, fn) \
     191    ((fn)((hwnd), (LPCTSTR)(lParam)), 0L)
     192#define FORWARD_WM_DEVMODECHANGE(hwnd, lpszDeviceName, fn) \
     193    (void)(fn)((hwnd), WM_DEVMODECHANGE, 0L, (LPARAM)(LPCTSTR)(lpszDeviceName))
     194
     195/* void Cls_OnTimeChange(HWND hwnd) */
     196#define HANDLE_WM_TIMECHANGE(hwnd, wParam, lParam, fn) \
     197    ((fn)(hwnd), 0L)
     198#define FORWARD_WM_TIMECHANGE(hwnd, fn) \
     199    (void)(fn)((hwnd), WM_TIMECHANGE, 0L, 0L)
     200
     201/* void Cls_OnPower(HWND hwnd, int code) */
     202#define HANDLE_WM_POWER(hwnd, wParam, lParam, fn) \
     203    ((fn)((hwnd), (int)(wParam)), 0L)
     204#define FORWARD_WM_POWER(hwnd, code, fn) \
     205    (void)(fn)((hwnd), WM_POWER, (WPARAM)(int)(code), 0L)
     206
     207/* BOOL Cls_OnQueryEndSession(HWND hwnd) */
     208#define HANDLE_WM_QUERYENDSESSION(hwnd, wParam, lParam, fn) \
     209    MAKELRESULT((BOOL)(fn)(hwnd), 0L)
     210#define FORWARD_WM_QUERYENDSESSION(hwnd, fn) \
     211    (BOOL)(DWORD)(fn)((hwnd), WM_QUERYENDSESSION, 0L, 0L)
     212
     213/* void Cls_OnEndSession(HWND hwnd, BOOL fEnding) */
     214#define HANDLE_WM_ENDSESSION(hwnd, wParam, lParam, fn) \
     215    ((fn)((hwnd), (BOOL)(wParam)), 0L)
     216#define FORWARD_WM_ENDSESSION(hwnd, fEnding, fn) \
     217    (void)(fn)((hwnd), WM_ENDSESSION, (WPARAM)(BOOL)(fEnding), 0L)
     218
     219/* void Cls_OnQuit(HWND hwnd, int exitCode) */
     220#define HANDLE_WM_QUIT(hwnd, wParam, lParam, fn) \
     221    ((fn)((hwnd), (int)(wParam)), 0L)
     222#define FORWARD_WM_QUIT(hwnd, exitCode, fn) \
     223    (void)(fn)((hwnd), WM_QUIT, (WPARAM)(exitCode), 0L)
     224
     225/* This message is in Windows 3.1 only */
     226/* void Cls_OnSystemError(HWND hwnd, int errCode) */
     227#define HANDLE_WM_SYSTEMERROR(hwnd, wParam, lParam, fn) 0L
     228#define FORWARD_WM_SYSTEMERROR(hwnd, errCode, fn) 0L
     229
     230/* BOOL Cls_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) */
     231#define HANDLE_WM_CREATE(hwnd, wParam, lParam, fn) \
     232    ((fn)((hwnd), (LPCREATESTRUCT)(lParam)) ? 0L : (LRESULT)-1L)
     233#define FORWARD_WM_CREATE(hwnd, lpCreateStruct, fn) \
     234    (BOOL)(DWORD)(fn)((hwnd), WM_CREATE, 0L, (LPARAM)(LPCREATESTRUCT)(lpCreateStruct))
     235
     236/* BOOL Cls_OnNCCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) */
     237#define HANDLE_WM_NCCREATE(hwnd, wParam, lParam, fn) \
     238    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (LPCREATESTRUCT)(lParam))
     239#define FORWARD_WM_NCCREATE(hwnd, lpCreateStruct, fn) \
     240    (BOOL)(DWORD)(fn)((hwnd), WM_NCCREATE, 0L, (LPARAM)(LPCREATESTRUCT)(lpCreateStruct))
     241
     242/* void Cls_OnDestroy(HWND hwnd) */
     243#define HANDLE_WM_DESTROY(hwnd, wParam, lParam, fn) \
     244    ((fn)(hwnd), 0L)
     245#define FORWARD_WM_DESTROY(hwnd, fn) \
     246    (void)(fn)((hwnd), WM_DESTROY, 0L, 0L)
     247
     248/* void Cls_OnNCDestroy(HWND hwnd) */
     249#define HANDLE_WM_NCDESTROY(hwnd, wParam, lParam, fn) \
     250    ((fn)(hwnd), 0L)
     251#define FORWARD_WM_NCDESTROY(hwnd, fn) \
     252    (void)(fn)((hwnd), WM_NCDESTROY, 0L, 0L)
     253
     254/* void Cls_OnShowWindow(HWND hwnd, BOOL fShow, UINT status) */
     255#define HANDLE_WM_SHOWWINDOW(hwnd, wParam, lParam, fn) \
     256    ((fn)((hwnd), (BOOL)(wParam), (UINT)(lParam)), 0L)
     257#define FORWARD_WM_SHOWWINDOW(hwnd, fShow, status, fn) \
     258    (void)(fn)((hwnd), WM_SHOWWINDOW, (WPARAM)(BOOL)(fShow), (LPARAM)(UINT)(status))
     259
     260/* void Cls_OnSetRedraw(HWND hwnd, BOOL fRedraw) */
     261#define HANDLE_WM_SETREDRAW(hwnd, wParam, lParam, fn) \
     262    ((fn)((hwnd), (BOOL)(wParam)), 0L)
     263#define FORWARD_WM_SETREDRAW(hwnd, fRedraw, fn) \
     264    (void)(fn)((hwnd), WM_SETREDRAW, (WPARAM)(BOOL)(fRedraw), 0L)
     265
     266/* void Cls_OnEnable(HWND hwnd, BOOL fEnable) */
     267#define HANDLE_WM_ENABLE(hwnd, wParam, lParam, fn) \
     268    ((fn)((hwnd), (BOOL)(wParam)), 0L)
     269#define FORWARD_WM_ENABLE(hwnd, fEnable, fn) \
     270    (void)(fn)((hwnd), WM_ENABLE, (WPARAM)(BOOL)(fEnable), 0L)
     271
     272/* void Cls_OnSetText(HWND hwnd, LPCTSTR lpszText) */
     273#define HANDLE_WM_SETTEXT(hwnd, wParam, lParam, fn) \
     274    ((fn)((hwnd), (LPCTSTR)(lParam)), 0L)
     275#define FORWARD_WM_SETTEXT(hwnd, lpszText, fn) \
     276    (void)(fn)((hwnd), WM_SETTEXT, 0L, (LPARAM)(LPCTSTR)(lpszText))
     277
     278/* INT Cls_OnGetText(HWND hwnd, int cchTextMax, LPTSTR lpszText) */
     279#define HANDLE_WM_GETTEXT(hwnd, wParam, lParam, fn) \
     280    (LRESULT)(DWORD)(int)(fn)((hwnd), (int)(wParam), (LPTSTR)(lParam))
     281#define FORWARD_WM_GETTEXT(hwnd, cchTextMax, lpszText, fn) \
     282    (int)(DWORD)(fn)((hwnd), WM_GETTEXT, (WPARAM)(int)(cchTextMax), (LPARAM)(LPTSTR)(lpszText))
     283
     284/* INT Cls_OnGetTextLength(HWND hwnd) */
     285#define HANDLE_WM_GETTEXTLENGTH(hwnd, wParam, lParam, fn) \
     286    (LRESULT)(DWORD)(int)(fn)(hwnd)
     287#define FORWARD_WM_GETTEXTLENGTH(hwnd, fn) \
     288    (int)(DWORD)(fn)((hwnd), WM_GETTEXTLENGTH, 0L, 0L)
     289
     290/* BOOL Cls_OnWindowPosChanging(HWND hwnd, LPWINDOWPOS lpwpos) */
     291#define HANDLE_WM_WINDOWPOSCHANGING(hwnd, wParam, lParam, fn) \
     292    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (LPWINDOWPOS)(lParam))
     293#define FORWARD_WM_WINDOWPOSCHANGING(hwnd, lpwpos, fn) \
     294    (BOOL)(DWORD)(fn)((hwnd), WM_WINDOWPOSCHANGING, 0L, (LPARAM)(LPWINDOWPOS)(lpwpos))
     295
     296/* void Cls_OnWindowPosChanged(HWND hwnd, const LPWINDOWPOS lpwpos) */
     297#define HANDLE_WM_WINDOWPOSCHANGED(hwnd, wParam, lParam, fn) \
     298    ((fn)((hwnd), (const LPWINDOWPOS)(lParam)), 0L)
     299#define FORWARD_WM_WINDOWPOSCHANGED(hwnd, lpwpos, fn) \
     300    (void)(fn)((hwnd), WM_WINDOWPOSCHANGED, 0L, (LPARAM)(const LPWINDOWPOS)(lpwpos))
     301
     302/* void Cls_OnMove(HWND hwnd, int x, int y) */
     303#define HANDLE_WM_MOVE(hwnd, wParam, lParam, fn) \
     304    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
     305#define FORWARD_WM_MOVE(hwnd, x, y, fn) \
     306    (void)(fn)((hwnd), WM_MOVE, 0L, MAKELPARAM((x), (y)))
     307
     308/* void Cls_OnSize(HWND hwnd, UINT state, int cx, int cy) */
     309#define HANDLE_WM_SIZE(hwnd, wParam, lParam, fn) \
     310    ((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
     311#define FORWARD_WM_SIZE(hwnd, state, cx, cy, fn) \
     312    (void)(fn)((hwnd), WM_SIZE, (WPARAM)(UINT)(state), MAKELPARAM((cx), (cy)))
     313
     314/* void Cls_OnClose(HWND hwnd) */
     315#define HANDLE_WM_CLOSE(hwnd, wParam, lParam, fn) \
     316    ((fn)(hwnd), 0L)
     317#define FORWARD_WM_CLOSE(hwnd, fn) \
     318    (void)(fn)((hwnd), WM_CLOSE, 0L, 0L)
     319
     320/* BOOL Cls_OnQueryOpen(HWND hwnd) */
     321#define HANDLE_WM_QUERYOPEN(hwnd, wParam, lParam, fn) \
     322    MAKELRESULT((BOOL)(fn)(hwnd), 0L)
     323#define FORWARD_WM_QUERYOPEN(hwnd, fn) \
     324    (BOOL)(DWORD)(fn)((hwnd), WM_QUERYOPEN, 0L, 0L)
     325
     326/* void Cls_OnGetMinMaxInfo(HWND hwnd, LPMINMAXINFO lpMinMaxInfo) */
     327#define HANDLE_WM_GETMINMAXINFO(hwnd, wParam, lParam, fn) \
     328    ((fn)((hwnd), (LPMINMAXINFO)(lParam)), 0L)
     329#define FORWARD_WM_GETMINMAXINFO(hwnd, lpMinMaxInfo, fn) \
     330    (void)(fn)((hwnd), WM_GETMINMAXINFO, 0L, (LPARAM)(LPMINMAXINFO)(lpMinMaxInfo))
     331
     332/* void Cls_OnPaint(HWND hwnd) */
     333#define HANDLE_WM_PAINT(hwnd, wParam, lParam, fn) \
     334    ((fn)(hwnd), 0L)
     335#define FORWARD_WM_PAINT(hwnd, fn) \
     336    (void)(fn)((hwnd), WM_PAINT, 0L, 0L)
     337
     338/* BOOL Cls_OnEraseBkgnd(HWND hwnd, HDC hdc) */
     339#define HANDLE_WM_ERASEBKGND(hwnd, wParam, lParam, fn) \
     340    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (HDC)(wParam))
     341#define FORWARD_WM_ERASEBKGND(hwnd, hdc, fn) \
     342   (BOOL)(DWORD)(fn)((hwnd), WM_ERASEBKGND, (WPARAM)(HDC)(hdc), 0L)
     343
     344/* BOOL Cls_OnIconEraseBkgnd(HWND hwnd, HDC hdc) */
     345#define HANDLE_WM_ICONERASEBKGND(hwnd, wParam, lParam, fn) \
     346    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (HDC)(wParam))
     347#define FORWARD_WM_ICONERASEBKGND(hwnd, hdc, fn) \
     348    (BOOL)(DWORD)(fn)((hwnd), WM_ICONERASEBKGND, (WPARAM)(HDC)(hdc), 0L)
     349
     350/* void Cls_OnNCPaint(HWND hwnd, HRGN hrgn) */
     351#define HANDLE_WM_NCPAINT(hwnd, wParam, lParam, fn) \
     352    ((fn)((hwnd), (HRGN)(wParam)), 0L)
     353#define FORWARD_WM_NCPAINT(hwnd, hrgn, fn) \
     354    (void)(fn)((hwnd), WM_NCPAINT, (WPARAM)(HRGN)(hrgn), 0L)
     355
     356/* UINT Cls_OnNCCalcSize(HWND hwnd, BOOL fCalcValidRects, NCCALCSIZE_PARAMS * lpcsp) */
     357#define HANDLE_WM_NCCALCSIZE(hwnd, wParam, lParam, fn) \
     358    (LRESULT)(DWORD)(UINT)(fn)((hwnd), (BOOL)(0), (NCCALCSIZE_PARAMS *)(lParam))
     359#define FORWARD_WM_NCCALCSIZE(hwnd, fCalcValidRects, lpcsp, fn) \
     360    (UINT)(DWORD)(fn)((hwnd), WM_NCCALCSIZE, 0L, (LPARAM)(NCCALCSIZE_PARAMS *)(lpcsp))
     361
     362/* UINT Cls_OnNCHitTest(HWND hwnd, int x, int y) */
     363#define HANDLE_WM_NCHITTEST(hwnd, wParam, lParam, fn) \
     364    (LRESULT)(DWORD)(UINT)(fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam))
     365#define FORWARD_WM_NCHITTEST(hwnd, x, y, fn) \
     366    (UINT)(DWORD)(fn)((hwnd), WM_NCHITTEST, 0L, MAKELPARAM((x), (y)))
     367
     368/* HICON Cls_OnQueryDragIcon(HWND hwnd) */
     369#define HANDLE_WM_QUERYDRAGICON(hwnd, wParam, lParam, fn) \
     370    (LRESULT)(DWORD)(UINT)(fn)(hwnd)
     371#define FORWARD_WM_QUERYDRAGICON(hwnd, fn) \
     372    (HICON)(UINT)(DWORD)(fn)((hwnd), WM_QUERYDRAGICON, 0L, 0L)
     373
     374#ifdef _INC_SHELLAPI
     375/* void Cls_OnDropFiles(HWND hwnd, HDROP hdrop) */
     376#define HANDLE_WM_DROPFILES(hwnd, wParam, lParam, fn) \
     377    ((fn)((hwnd), (HDROP)(wParam)), 0L)
     378#define FORWARD_WM_DROPFILES(hwnd, hdrop, fn) \
     379    (void)(fn)((hwnd), WM_DROPFILES, (WPARAM)(HDROP)(hdrop), 0L)
     380#endif  /* _INC_SHELLAPI */
     381
     382/* void Cls_OnActivate(HWND hwnd, UINT state, HWND hwndActDeact, BOOL fMinimized) */
     383#define HANDLE_WM_ACTIVATE(hwnd, wParam, lParam, fn) \
     384    ((fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (BOOL)HIWORD(wParam)), 0L)
     385#define FORWARD_WM_ACTIVATE(hwnd, state, hwndActDeact, fMinimized, fn) \
     386    (void)(fn)((hwnd), WM_ACTIVATE, MAKEWPARAM((state), (fMinimized)), (LPARAM)(HWND)(hwndActDeact))
     387
     388/* void Cls_OnActivateApp(HWND hwnd, BOOL fActivate, DWORD dwThreadId) */
     389#define HANDLE_WM_ACTIVATEAPP(hwnd, wParam, lParam, fn) \
     390    ((fn)((hwnd), (BOOL)(wParam), (DWORD)(lParam)), 0L)
     391#define FORWARD_WM_ACTIVATEAPP(hwnd, fActivate, dwThreadId, fn) \
     392    (void)(fn)((hwnd), WM_ACTIVATEAPP, (WPARAM)(BOOL)(fActivate), (LPARAM)(dwThreadId))
     393
     394/* BOOL Cls_OnNCActivate(HWND hwnd, BOOL fActive, HWND hwndActDeact, BOOL fMinimized) */
     395#define HANDLE_WM_NCACTIVATE(hwnd, wParam, lParam, fn) \
     396    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (BOOL)(wParam), 0L, 0L)
     397#define FORWARD_WM_NCACTIVATE(hwnd, fActive, hwndActDeact, fMinimized, fn) \
     398    (BOOL)(DWORD)(fn)((hwnd), WM_NCACTIVATE, (WPARAM)(BOOL)(fActive), 0L)
     399
     400/* void Cls_OnSetFocus(HWND hwnd, HWND hwndOldFocus) */
     401#define HANDLE_WM_SETFOCUS(hwnd, wParam, lParam, fn) \
     402    ((fn)((hwnd), (HWND)(wParam)), 0L)
     403#define FORWARD_WM_SETFOCUS(hwnd, hwndOldFocus, fn) \
     404    (void)(fn)((hwnd), WM_SETFOCUS, (WPARAM)(HWND)(hwndOldFocus), 0L)
     405
     406/* void Cls_OnKillFocus(HWND hwnd, HWND hwndNewFocus) */
     407#define HANDLE_WM_KILLFOCUS(hwnd, wParam, lParam, fn) \
     408    ((fn)((hwnd), (HWND)(wParam)), 0L)
     409#define FORWARD_WM_KILLFOCUS(hwnd, hwndNewFocus, fn) \
     410    (void)(fn)((hwnd), WM_KILLFOCUS, (WPARAM)(HWND)(hwndNewFocus), 0L)
     411
     412/* void Cls_OnKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */
     413#define HANDLE_WM_KEYDOWN(hwnd, wParam, lParam, fn) \
     414    ((fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
     415#define FORWARD_WM_KEYDOWN(hwnd, vk, cRepeat, flags, fn) \
     416    (void)(fn)((hwnd), WM_KEYDOWN, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)))
     417
     418/* void Cls_OnKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */
     419#define HANDLE_WM_KEYUP(hwnd, wParam, lParam, fn) \
     420    ((fn)((hwnd), (UINT)(wParam), FALSE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
     421#define FORWARD_WM_KEYUP(hwnd, vk, cRepeat, flags, fn) \
     422    (void)(fn)((hwnd), WM_KEYUP, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)))
     423
     424/* void Cls_OnChar(HWND hwnd, TCHAR ch, int cRepeat) */
     425#define HANDLE_WM_CHAR(hwnd, wParam, lParam, fn) \
     426    ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)
     427#define FORWARD_WM_CHAR(hwnd, ch, cRepeat, fn) \
     428    (void)(fn)((hwnd), WM_CHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat),0))
     429
     430/* void Cls_OnDeadChar(HWND hwnd, TCHAR ch, int cRepeat) */
     431#define HANDLE_WM_DEADCHAR(hwnd, wParam, lParam, fn) \
     432    ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)
     433#define FORWARD_WM_DEADCHAR(hwnd, ch, cRepeat, fn) \
     434    (void)(fn)((hwnd), WM_DEADCHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat),0))
     435
     436/* void Cls_OnSysKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */
     437#define HANDLE_WM_SYSKEYDOWN(hwnd, wParam, lParam, fn) \
     438    ((fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
     439#define FORWARD_WM_SYSKEYDOWN(hwnd, vk, cRepeat, flags, fn) \
     440    (void)(fn)((hwnd), WM_SYSKEYDOWN, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)))
     441
     442/* void Cls_OnSysKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */
     443#define HANDLE_WM_SYSKEYUP(hwnd, wParam, lParam, fn) \
     444    ((fn)((hwnd), (UINT)(wParam), FALSE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
     445#define FORWARD_WM_SYSKEYUP(hwnd, vk, cRepeat, flags, fn) \
     446    (void)(fn)((hwnd), WM_SYSKEYUP, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)))
     447
     448/* void Cls_OnSysChar(HWND hwnd, TCHAR ch, int cRepeat) */
     449#define HANDLE_WM_SYSCHAR(hwnd, wParam, lParam, fn) \
     450    ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)
     451#define FORWARD_WM_SYSCHAR(hwnd, ch, cRepeat, fn) \
     452    (void)(fn)((hwnd), WM_SYSCHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat), 0))
     453
     454/* void Cls_OnSysDeadChar(HWND hwnd, TCHAR ch, int cRepeat) */
     455#define HANDLE_WM_SYSDEADCHAR(hwnd, wParam, lParam, fn) \
     456    ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)
     457#define FORWARD_WM_SYSDEADCHAR(hwnd, ch, cRepeat, fn) \
     458    (void)(fn)((hwnd), WM_SYSDEADCHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat), 0))
     459
     460/* void Cls_OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags) */
     461#define HANDLE_WM_MOUSEMOVE(hwnd, wParam, lParam, fn) \
     462    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     463#define FORWARD_WM_MOUSEMOVE(hwnd, x, y, keyFlags, fn) \
     464    (void)(fn)((hwnd), WM_MOUSEMOVE, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
     465
     466/* void Cls_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
     467#define HANDLE_WM_LBUTTONDOWN(hwnd, wParam, lParam, fn) \
     468    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     469#define FORWARD_WM_LBUTTONDOWN(hwnd, fDoubleClick, x, y, keyFlags, fn) \
     470    (void)(fn)((hwnd), (fDoubleClick) ? WM_LBUTTONDBLCLK : WM_LBUTTONDOWN, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
     471
     472/* void Cls_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
     473#define HANDLE_WM_LBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
     474    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     475
     476/* void Cls_OnLButtonUp(HWND hwnd, int x, int y, UINT keyFlags) */
     477#define HANDLE_WM_LBUTTONUP(hwnd, wParam, lParam, fn) \
     478    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     479#define FORWARD_WM_LBUTTONUP(hwnd, x, y, keyFlags, fn) \
     480    (void)(fn)((hwnd), WM_LBUTTONUP, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
     481
     482/* void Cls_OnRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
     483#define HANDLE_WM_RBUTTONDOWN(hwnd, wParam, lParam, fn) \
     484    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     485#define FORWARD_WM_RBUTTONDOWN(hwnd, fDoubleClick, x, y, keyFlags, fn) \
     486    (void)(fn)((hwnd), (fDoubleClick) ? WM_RBUTTONDBLCLK : WM_RBUTTONDOWN, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
     487
     488/* void Cls_OnRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
     489#define HANDLE_WM_RBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
     490    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     491
     492/* void Cls_OnRButtonUp(HWND hwnd, int x, int y, UINT flags) */
     493#define HANDLE_WM_RBUTTONUP(hwnd, wParam, lParam, fn) \
     494    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     495#define FORWARD_WM_RBUTTONUP(hwnd, x, y, keyFlags, fn) \
     496    (void)(fn)((hwnd), WM_RBUTTONUP, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
     497
     498/* void Cls_OnMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
     499#define HANDLE_WM_MBUTTONDOWN(hwnd, wParam, lParam, fn) \
     500    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     501#define FORWARD_WM_MBUTTONDOWN(hwnd, fDoubleClick, x, y, keyFlags, fn) \
     502    (void)(fn)((hwnd), (fDoubleClick) ? WM_MBUTTONDBLCLK : WM_MBUTTONDOWN, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
     503
     504/* void Cls_OnMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
     505#define HANDLE_WM_MBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
     506    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     507
     508/* void Cls_OnMButtonUp(HWND hwnd, int x, int y, UINT flags) */
     509#define HANDLE_WM_MBUTTONUP(hwnd, wParam, lParam, fn) \
     510    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     511#define FORWARD_WM_MBUTTONUP(hwnd, x, y, keyFlags, fn) \
     512    (void)(fn)((hwnd), WM_MBUTTONUP, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
     513
     514/* void Cls_OnNCMouseMove(HWND hwnd, int x, int y, UINT codeHitTest) */
     515#define HANDLE_WM_NCMOUSEMOVE(hwnd, wParam, lParam, fn) \
     516    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     517#define FORWARD_WM_NCMOUSEMOVE(hwnd, x, y, codeHitTest, fn) \
     518    (void)(fn)((hwnd), WM_NCMOUSEMOVE, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)))
     519
     520/* void Cls_OnNCLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
     521#define HANDLE_WM_NCLBUTTONDOWN(hwnd, wParam, lParam, fn) \
     522    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     523#define FORWARD_WM_NCLBUTTONDOWN(hwnd, fDoubleClick, x, y, codeHitTest, fn) \
     524    (void)(fn)((hwnd), (fDoubleClick) ? WM_NCLBUTTONDBLCLK : WM_NCLBUTTONDOWN, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)))
     525
     526/* void Cls_OnNCLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
     527#define HANDLE_WM_NCLBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
     528    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     529
     530/* void Cls_OnNCLButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */
     531#define HANDLE_WM_NCLBUTTONUP(hwnd, wParam, lParam, fn) \
     532    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     533#define FORWARD_WM_NCLBUTTONUP(hwnd, x, y, codeHitTest, fn) \
     534    (void)(fn)((hwnd), WM_NCLBUTTONUP, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)))
     535
     536/* void Cls_OnNCRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
     537#define HANDLE_WM_NCRBUTTONDOWN(hwnd, wParam, lParam, fn) \
     538    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     539#define FORWARD_WM_NCRBUTTONDOWN(hwnd, fDoubleClick, x, y, codeHitTest, fn) \
     540    (void)(fn)((hwnd), (fDoubleClick) ? WM_NCRBUTTONDBLCLK : WM_NCRBUTTONDOWN, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) )
     541
     542/* void Cls_OnNCRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
     543#define HANDLE_WM_NCRBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
     544    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     545
     546/* void Cls_OnNCRButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */
     547#define HANDLE_WM_NCRBUTTONUP(hwnd, wParam, lParam, fn) \
     548    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     549#define FORWARD_WM_NCRBUTTONUP(hwnd, x, y, codeHitTest, fn) \
     550    (void)(fn)((hwnd), WM_NCRBUTTONUP, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) )
     551
     552/* void Cls_OnNCMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
     553#define HANDLE_WM_NCMBUTTONDOWN(hwnd, wParam, lParam, fn) \
     554    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     555#define FORWARD_WM_NCMBUTTONDOWN(hwnd, fDoubleClick, x, y, codeHitTest, fn) \
     556    (void)(fn)((hwnd), (fDoubleClick) ? WM_NCMBUTTONDBLCLK : WM_NCMBUTTONDOWN, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) )
     557
     558/* void Cls_OnNCMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
     559#define HANDLE_WM_NCMBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
     560    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     561
     562/* void Cls_OnNCMButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */
     563#define HANDLE_WM_NCMBUTTONUP(hwnd, wParam, lParam, fn) \
     564    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
     565#define FORWARD_WM_NCMBUTTONUP(hwnd, x, y, codeHitTest, fn) \
     566    (void)(fn)((hwnd), WM_NCMBUTTONUP, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) )
     567
     568/* int Cls_OnMouseActivate(HWND hwnd, HWND hwndTopLevel, UINT codeHitTest, UINT msg) */
     569#define HANDLE_WM_MOUSEACTIVATE(hwnd, wParam, lParam, fn) \
     570    (LRESULT)(DWORD)(int)(fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam))
     571#define FORWARD_WM_MOUSEACTIVATE(hwnd, hwndTopLevel, codeHitTest, msg, fn) \
     572    (int)(DWORD)(fn)((hwnd), WM_MOUSEACTIVATE, (WPARAM)(HWND)(hwndTopLevel), MAKELPARAM((codeHitTest), (msg)))
     573
     574/* void Cls_OnCancelMode(HWND hwnd) */
     575#define HANDLE_WM_CANCELMODE(hwnd, wParam, lParam, fn) \
     576    ((fn)(hwnd), 0L)
     577#define FORWARD_WM_CANCELMODE(hwnd, fn) \
     578    (void)(fn)((hwnd), WM_CANCELMODE, 0L, 0L)
     579
     580/* void Cls_OnTimer(HWND hwnd, UINT id) */
     581#define HANDLE_WM_TIMER(hwnd, wParam, lParam, fn) \
     582    ((fn)((hwnd), (UINT)(wParam)), 0L)
     583#define FORWARD_WM_TIMER(hwnd, id, fn) \
     584    (void)(fn)((hwnd), WM_TIMER, (WPARAM)(UINT)(id), 0L)
     585
     586/* void Cls_OnInitMenu(HWND hwnd, HMENU hMenu) */
     587#define HANDLE_WM_INITMENU(hwnd, wParam, lParam, fn) \
     588    ((fn)((hwnd), (HMENU)(wParam)), 0L)
     589#define FORWARD_WM_INITMENU(hwnd, hMenu, fn) \
     590    (void)(fn)((hwnd), WM_INITMENU, (WPARAM)(HMENU)(hMenu), 0L)
     591
     592/* void Cls_OnInitMenuPopup(HWND hwnd, HMENU hMenu, UINT item, BOOL fSystemMenu) */
     593#define HANDLE_WM_INITMENUPOPUP(hwnd, wParam, lParam, fn) \
     594    ((fn)((hwnd), (HMENU)(wParam), (UINT)LOWORD(lParam), (BOOL)HIWORD(lParam)), 0L)
     595#define FORWARD_WM_INITMENUPOPUP(hwnd, hMenu, item, fSystemMenu, fn) \
     596    (void)(fn)((hwnd), WM_INITMENUPOPUP, (WPARAM)(HMENU)(hMenu), MAKELPARAM((item),(fSystemMenu)))
     597
     598/* void Cls_OnMenuSelect(HWND hwnd, HMENU hmenu, int item, HMENU hmenuPopup, UINT flags) */
     599#define HANDLE_WM_MENUSELECT(hwnd, wParam, lParam, fn)                  \
     600    ((fn)((hwnd), (HMENU)(lParam),  \
     601    (int)(LOWORD(wParam)),          \
     602    (HIWORD(wParam) & MF_POPUP) ? GetSubMenu((HMENU)lParam, LOWORD(wParam)) : 0L, \
     603    (UINT)(((short)HIWORD(wParam) == -1) ? 0xFFFFFFFF : HIWORD(wParam))), 0L)
     604#define FORWARD_WM_MENUSELECT(hwnd, hmenu, item, hmenuPopup, flags, fn) \
     605    (void)(fn)((hwnd), WM_MENUSELECT, MAKEWPARAM((item), (flags)), (LPARAM)(HMENU)((hmenu) ? (hmenu) : (hmenuPopup)))
     606
     607/* DWORD Cls_OnMenuChar(HWND hwnd, UINT ch, UINT flags, HMENU hmenu) */
     608#define HANDLE_WM_MENUCHAR(hwnd, wParam, lParam, fn) \
     609    (LRESULT)(DWORD)(fn)((hwnd), (UINT)(LOWORD(wParam)), (UINT)HIWORD(wParam), (HMENU)(lParam))
     610#define FORWARD_WM_MENUCHAR(hwnd, ch, flags, hmenu, fn) \
     611    (DWORD)(fn)((hwnd), WM_MENUCHAR, MAKEWPARAM(flags, (WORD)(ch)), (LPARAM)(HMENU)(hmenu))
     612
     613/* void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) */
     614#define HANDLE_WM_COMMAND(hwnd, wParam, lParam, fn) \
     615    ((fn)((hwnd), (int)(LOWORD(wParam)), (HWND)(lParam), (UINT)HIWORD(wParam)), 0L)
     616#define FORWARD_WM_COMMAND(hwnd, id, hwndCtl, codeNotify, fn) \
     617    (void)(fn)((hwnd), WM_COMMAND, MAKEWPARAM((UINT)(id),(UINT)(codeNotify)), (LPARAM)(HWND)(hwndCtl))
     618
     619/* void Cls_OnHScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos) */
     620#define HANDLE_WM_HSCROLL(hwnd, wParam, lParam, fn) \
     621    ((fn)((hwnd), (HWND)(lParam), (UINT)(LOWORD(wParam)), (int)(short)HIWORD(wParam)), 0L)
     622#define FORWARD_WM_HSCROLL(hwnd, hwndCtl, code, pos, fn) \
     623    (void)(fn)((hwnd), WM_HSCROLL, MAKEWPARAM((UINT)(int)(code),(UINT)(int)(pos)), (LPARAM)(UINT)(hwndCtl))
     624
     625/* void Cls_OnVScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos) */
     626#define HANDLE_WM_VSCROLL(hwnd, wParam, lParam, fn) \
     627    ((fn)((hwnd), (HWND)(lParam), (UINT)(LOWORD(wParam)),  (int)(short)HIWORD(wParam)), 0L)
     628#define FORWARD_WM_VSCROLL(hwnd, hwndCtl, code, pos, fn) \
     629    (void)(fn)((hwnd), WM_VSCROLL, MAKEWPARAM((UINT)(int)(code),(UINT)(int)(pos)), (LPARAM)(HWND)(hwndCtl))
     630
     631/* void Cls_OnCut(HWND hwnd) */
     632#define HANDLE_WM_CUT(hwnd, wParam, lParam, fn) \
     633    ((fn)(hwnd), 0L)
     634#define FORWARD_WM_CUT(hwnd, fn) \
     635    (void)(fn)((hwnd), WM_CUT, 0L, 0L)
     636
     637/* void Cls_OnCopy(HWND hwnd) */
     638#define HANDLE_WM_COPY(hwnd, wParam, lParam, fn) \
     639    ((fn)(hwnd), 0L)
     640#define FORWARD_WM_COPY(hwnd, fn) \
     641    (void)(fn)((hwnd), WM_COPY, 0L, 0L)
     642
     643/* void Cls_OnPaste(HWND hwnd) */
     644#define HANDLE_WM_PASTE(hwnd, wParam, lParam, fn) \
     645    ((fn)(hwnd), 0L)
     646#define FORWARD_WM_PASTE(hwnd, fn) \
     647    (void)(fn)((hwnd), WM_PASTE, 0L, 0L)
     648
     649/* void Cls_OnClear(HWND hwnd) */
     650#define HANDLE_WM_CLEAR(hwnd, wParam, lParam, fn) \
     651    ((fn)(hwnd), 0L)
     652#define FORWARD_WM_CLEAR(hwnd, fn) \
     653    (void)(fn)((hwnd), WM_CLEAR, 0L, 0L)
     654
     655/* void Cls_OnUndo(HWND hwnd) */
     656#define HANDLE_WM_UNDO(hwnd, wParam, lParam, fn) \
     657    ((fn)(hwnd), 0L)
     658#define FORWARD_WM_UNDO(hwnd, fn) \
     659    (void)(fn)((hwnd), WM_UNDO, 0L, 0L)
     660
     661/* HANDLE Cls_OnRenderFormat(HWND hwnd, UINT fmt) */
     662#define HANDLE_WM_RENDERFORMAT(hwnd, wParam, lParam, fn) \
     663    (LRESULT)(DWORD)(UINT)(HANDLE)(fn)((hwnd), (UINT)(wParam))
     664#define FORWARD_WM_RENDERFORMAT(hwnd, fmt, fn) \
     665    (HANDLE)(UINT)(DWORD)(fn)((hwnd), WM_RENDERFORMAT, (WPARAM)(UINT)(fmt), 0L)
     666
     667/* void Cls_OnRenderAllFormats(HWND hwnd) */
     668#define HANDLE_WM_RENDERALLFORMATS(hwnd, wParam, lParam, fn) \
     669    ((fn)(hwnd), 0L)
     670#define FORWARD_WM_RENDERALLFORMATS(hwnd, fn) \
     671    (void)(fn)((hwnd), WM_RENDERALLFORMATS, 0L, 0L)
     672
     673/* void Cls_OnDestroyClipboard(HWND hwnd) */
     674#define HANDLE_WM_DESTROYCLIPBOARD(hwnd, wParam, lParam, fn) \
     675    ((fn)(hwnd), 0L)
     676#define FORWARD_WM_DESTROYCLIPBOARD(hwnd, fn) \
     677    (void)(fn)((hwnd), WM_DESTROYCLIPBOARD, 0L, 0L)
     678
     679/* void Cls_OnDrawClipboard(HWND hwnd) */
     680#define HANDLE_WM_DRAWCLIPBOARD(hwnd, wParam, lParam, fn) \
     681    ((fn)(hwnd), 0L)
     682#define FORWARD_WM_DRAWCLIPBOARD(hwnd, fn) \
     683    (void)(fn)((hwnd), WM_DRAWCLIPBOARD, 0L, 0L)
     684
     685/* void Cls_OnPaintClipboard(HWND hwnd, HWND hwndCBViewer, const LPPAINTSTRUCT lpPaintStruct) */
     686#define HANDLE_WM_PAINTCLIPBOARD(hwnd, wParam, lParam, fn) \
     687    ((fn)((hwnd), (HWND)(wParam), (const LPPAINTSTRUCT)GlobalLock((HGLOBAL)(lParam))), GlobalUnlock((HGLOBAL)(lParam)), 0L)
     688#define FORWARD_WM_PAINTCLIPBOARD(hwnd, hwndCBViewer, lpPaintStruct, fn) \
     689    (void)(fn)((hwnd), WM_PAINTCLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), (LPARAM)(LPPAINTSTRUCT)(lpPaintStruct))
     690
     691/* void Cls_OnSizeClipboard(HWND hwnd, HWND hwndCBViewer, const LPRECT lprc) */
     692#define HANDLE_WM_SIZECLIPBOARD(hwnd, wParam, lParam, fn) \
     693    ((fn)((hwnd), (HWND)(wParam), (const LPRECT)GlobalLock((HGLOBAL)(lParam))), GlobalUnlock((HGLOBAL)(lParam)), 0L)
     694#define FORWARD_WM_SIZECLIPBOARD(hwnd, hwndCBViewer, lprc, fn) \
     695    (void)(fn)((hwnd), WM_SIZECLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), (LPARAM)(LPRECT)(lprc))
     696
     697/* void Cls_OnVScrollClipboard(HWND hwnd, HWND hwndCBViewer, UINT code, int pos) */
     698#define HANDLE_WM_VSCROLLCLIPBOARD(hwnd, wParam, lParam, fn) \
     699    ((fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
     700#define FORWARD_WM_VSCROLLCLIPBOARD(hwnd, hwndCBViewer, code, pos, fn) \
     701    (void)(fn)((hwnd), WM_VSCROLLCLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), MAKELPARAM((code), (pos)))
     702
     703/* void Cls_OnHScrollClipboard(HWND hwnd, HWND hwndCBViewer, UINT code, int pos) */
     704#define HANDLE_WM_HSCROLLCLIPBOARD(hwnd, wParam, lParam, fn) \
     705    ((fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
     706#define FORWARD_WM_HSCROLLCLIPBOARD(hwnd, hwndCBViewer, code, pos, fn) \
     707    (void)(fn)((hwnd), WM_HSCROLLCLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), MAKELPARAM((code), (pos)))
     708
     709/* void Cls_OnAskCBFormatName(HWND hwnd, int cchMax, LPTSTR rgchName) */
     710#define HANDLE_WM_ASKCBFORMATNAME(hwnd, wParam, lParam, fn) \
     711    ((fn)((hwnd), (int)(wParam), (LPTSTR)(lParam)), 0L)
     712#define FORWARD_WM_ASKCBFORMATNAME(hwnd, cchMax, rgchName, fn) \
     713    (void)(fn)((hwnd), WM_ASKCBFORMATNAME, (WPARAM)(int)(cchMax), (LPARAM)(rgchName))
     714
     715/* void Cls_OnChangeCBChain(HWND hwnd, HWND hwndRemove, HWND hwndNext) */
     716#define HANDLE_WM_CHANGECBCHAIN(hwnd, wParam, lParam, fn) \
     717    ((fn)((hwnd), (HWND)(wParam), (HWND)(lParam)), 0L)
     718#define FORWARD_WM_CHANGECBCHAIN(hwnd, hwndRemove, hwndNext, fn) \
     719    (void)(fn)((hwnd), WM_CHANGECBCHAIN, (WPARAM)(HWND)(hwndRemove), (LPARAM)(HWND)(hwndNext))
     720
     721/* BOOL Cls_OnSetCursor(HWND hwnd, HWND hwndCursor, UINT codeHitTest, UINT msg) */
     722#define HANDLE_WM_SETCURSOR(hwnd, wParam, lParam, fn) \
     723    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam))
     724#define FORWARD_WM_SETCURSOR(hwnd, hwndCursor, codeHitTest, msg, fn) \
     725    (BOOL)(DWORD)(fn)((hwnd), WM_SETCURSOR, (WPARAM)(HWND)(hwndCursor), MAKELPARAM((codeHitTest), (msg)))
     726
     727/* void Cls_OnSysCommand(HWND hwnd, UINT cmd, int x, int y) */
     728#define HANDLE_WM_SYSCOMMAND(hwnd, wParam, lParam, fn) \
     729    ((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
     730#define FORWARD_WM_SYSCOMMAND(hwnd, cmd, x, y, fn) \
     731    (void)(fn)((hwnd), WM_SYSCOMMAND, (WPARAM)(UINT)(cmd), MAKELPARAM((x), (y)))
     732
     733/* HWND Cls_MDICreate(HWND hwnd, const LPMDICREATESTRUCT lpmcs) */
     734#define HANDLE_WM_MDICREATE(hwnd, wParam, lParam, fn) \
     735    (LRESULT)(DWORD)(UINT)(fn)((hwnd), (LPMDICREATESTRUCT)(lParam))
     736#define FORWARD_WM_MDICREATE(hwnd, lpmcs, fn) \
     737    (HWND)(UINT)(DWORD)(fn)((hwnd), WM_MDICREATE, 0L, (LPARAM)(LPMDICREATESTRUCT)(lpmcs))
     738
     739/* void Cls_MDIDestroy(HWND hwnd, HWND hwndDestroy) */
     740#define HANDLE_WM_MDIDESTROY(hwnd, wParam, lParam, fn) \
     741    ((fn)((hwnd), (HWND)(wParam)), 0L)
     742#define FORWARD_WM_MDIDESTROY(hwnd, hwndDestroy, fn) \
     743    (void)(fn)((hwnd), WM_MDIDESTROY, (WPARAM)(hwndDestroy), 0L)
     744
     745/* NOTE: Usable only by MDI client windows */
     746/* void Cls_MDIActivate(HWND hwnd, BOOL fActive, HWND hwndActivate, HWND hwndDeactivate) */
     747#define HANDLE_WM_MDIACTIVATE(hwnd, wParam, lParam, fn) \
     748    ((fn)((hwnd), (BOOL)(lParam == (LPARAM)hwnd), (HWND)(lParam), (HWND)(wParam)), 0L)
     749#define FORWARD_WM_MDIACTIVATE(hwnd, fActive, hwndActivate, hwndDeactivate, fn) \
     750    (void)(fn)(hwnd, WM_MDIACTIVATE, (WPARAM)(hwndDeactivate), (LPARAM)(hwndActivate))
     751
     752/* void Cls_MDIRestore(HWND hwnd, HWND hwndRestore) */
     753#define HANDLE_WM_MDIRESTORE(hwnd, wParam, lParam, fn) \
     754    ((fn)((hwnd), (HWND)(wParam)), 0L)
     755#define FORWARD_WM_MDIRESTORE(hwnd, hwndRestore, fn) \
     756    (void)(fn)((hwnd), WM_MDIRESTORE, (WPARAM)(hwndRestore), 0L)
     757
     758/* HWND Cls_MDINext(HWND hwnd, HWND hwndCur, BOOL fPrev) */
     759#define HANDLE_WM_MDINEXT(hwnd, wParam, lParam, fn) \
     760    (LRESULT)(HWND)(fn)((hwnd), (HWND)(wParam), (BOOL)lParam)
     761#define FORWARD_WM_MDINEXT(hwnd, hwndCur, fPrev, fn) \
     762    (HWND)(UINT)(DWORD)(fn)((hwnd), WM_MDINEXT, (WPARAM)(hwndCur), (LPARAM)(fPrev))
     763
     764/* void Cls_MDIMaximize(HWND hwnd, HWND hwndMaximize) */
     765#define HANDLE_WM_MDIMAXIMIZE(hwnd, wParam, lParam, fn) \
     766    ((fn)((hwnd), (HWND)(wParam)), 0L)
     767#define FORWARD_WM_MDIMAXIMIZE(hwnd, hwndMaximize, fn) \
     768    (void)(fn)((hwnd), WM_MDIMAXIMIZE, (WPARAM)(hwndMaximize), 0L)
     769
     770/* BOOL Cls_MDITile(HWND hwnd, UINT cmd) */
     771#define HANDLE_WM_MDITILE(hwnd, wParam, lParam, fn) \
     772    (LRESULT)(DWORD)(fn)((hwnd), (UINT)(wParam))
     773#define FORWARD_WM_MDITILE(hwnd, cmd, fn) \
     774    (BOOL)(DWORD)(fn)((hwnd), WM_MDITILE, (WPARAM)(cmd), 0L)
     775
     776/* BOOL Cls_MDICascade(HWND hwnd, UINT cmd) */
     777#define HANDLE_WM_MDICASCADE(hwnd, wParam, lParam, fn) \
     778    (LRESULT)(DWORD)(fn)((hwnd), (UINT)(wParam))
     779#define FORWARD_WM_MDICASCADE(hwnd, cmd, fn) \
     780    (BOOL)(DWORD)(fn)((hwnd), WM_MDICASCADE, (WPARAM)(cmd), 0L)
     781
     782/* void Cls_MDIIconArrange(HWND hwnd) */
     783#define HANDLE_WM_MDIICONARRANGE(hwnd, wParam, lParam, fn) \
     784    ((fn)(hwnd), 0L)
     785#define FORWARD_WM_MDIICONARRANGE(hwnd, fn) \
     786    (void)(fn)((hwnd), WM_MDIICONARRANGE, 0L, 0L)
     787
     788/* HWND Cls_MDIGetActive(HWND hwnd) */
     789#define HANDLE_WM_MDIGETACTIVE(hwnd, wParam, lParam, fn) \
     790    (LRESULT)(DWORD)(UINT)(fn)(hwnd)
     791#define FORWARD_WM_MDIGETACTIVE(hwnd, fn) \
     792    (HWND)(UINT)(DWORD)(fn)((hwnd), WM_MDIGETACTIVE, 0L, 0L)
     793
     794/* HMENU Cls_MDISetMenu(HWND hwnd, BOOL fRefresh, HMENU hmenuFrame, HMENU hmenuWindow) */
     795#define HANDLE_WM_MDISETMENU(hwnd, wParam, lParam, fn) \
     796    (LRESULT)(DWORD)(UINT)(fn)((hwnd), (BOOL)(wParam), (HMENU)(wParam), (HMENU)(lParam))
     797#define FORWARD_WM_MDISETMENU(hwnd, fRefresh, hmenuFrame, hmenuWindow, fn) \
     798    (HMENU)(UINT)(DWORD)(fn)((hwnd), WM_MDISETMENU, (WPARAM)((fRefresh) ? (hmenuFrame) : 0), (LPARAM)(hmenuWindow))
     799
     800/* void Cls_OnChildActivate(HWND hwnd) */
     801#define HANDLE_WM_CHILDACTIVATE(hwnd, wParam, lParam, fn) \
     802    ((fn)(hwnd), 0L)
     803#define FORWARD_WM_CHILDACTIVATE(hwnd, fn) \
     804    (void)(fn)((hwnd), WM_CHILDACTIVATE, 0L, 0L)
     805
     806/* BOOL Cls_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) */
     807#define HANDLE_WM_INITDIALOG(hwnd, wParam, lParam, fn) \
     808    (LRESULT)(DWORD)(UINT)(BOOL)(fn)((hwnd), (HWND)(wParam), lParam)
     809#define FORWARD_WM_INITDIALOG(hwnd, hwndFocus, lParam, fn) \
     810    (BOOL)(DWORD)(fn)((hwnd), WM_INITDIALOG, (WPARAM)(HWND)(hwndFocus), (lParam))
     811
     812/* HWND Cls_OnNextDlgCtl(HWND hwnd, HWND hwndSetFocus, BOOL fNext) */
     813#define HANDLE_WM_NEXTDLGCTL(hwnd, wParam, lParam, fn) \
     814    (LRESULT)(DWORD)(UINT)(HWND)(fn)((hwnd), (HWND)(wParam), (BOOL)(lParam))
     815#define FORWARD_WM_NEXTDLGCTL(hwnd, hwndSetFocus, fNext, fn) \
     816    (HWND)(UINT)(DWORD)(fn)((hwnd), WM_NEXTDLGCTL, (WPARAM)(HWND)(hwndSetFocus), (LPARAM)(fNext))
     817
     818/* void Cls_OnParentNotify(HWND hwnd, UINT msg, HWND hwndChild, int idChild) */
     819#define HANDLE_WM_PARENTNOTIFY(hwnd, wParam, lParam, fn) \
     820    ((fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (UINT)HIWORD(wParam)), 0L)
     821#define FORWARD_WM_PARENTNOTIFY(hwnd, msg, hwndChild, idChild, fn) \
     822    (void)(fn)((hwnd), WM_PARENTNOTIFY, MAKEWPARAM(msg, idChild), (LPARAM)(hwndChild))
     823
     824/* void Cls_OnEnterIdle(HWND hwnd, UINT source, HWND hwndSource) */
     825#define HANDLE_WM_ENTERIDLE(hwnd, wParam, lParam, fn) \
     826    ((fn)((hwnd), (UINT)(wParam), (HWND)(lParam)), 0L)
     827#define FORWARD_WM_ENTERIDLE(hwnd, source, hwndSource, fn) \
     828    (void)(fn)((hwnd), WM_ENTERIDLE, (WPARAM)(UINT)(source), (LPARAM)(HWND)(hwndSource))
     829
     830/* UINT Cls_OnGetDlgCode(HWND hwnd, LPMSG lpmsg) */
     831#define HANDLE_WM_GETDLGCODE(hwnd, wParam, lParam, fn) \
     832    (LRESULT)(DWORD)(UINT)(fn)(hwnd, (LPMSG)(lParam))
     833#define FORWARD_WM_GETDLGCODE(hwnd, lpmsg, fn) \
     834    (UINT)(DWORD)(fn)((hwnd), WM_GETDLGCODE, (lpmsg ? lpmsg->wParam : 0), (LPARAM)(LPMSG)(lpmsg))
     835
     836/* HBRUSH Cls_OnCtlColor(HWND hwnd, HDC hdc, HWND hwndChild, int type) */
     837#define HANDLE_WM_CTLCOLORMSGBOX(hwnd, wParam, lParam, fn) \
     838    (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_MSGBOX)
     839#define FORWARD_WM_CTLCOLORMSGBOX(hwnd, hdc, hwndChild, fn) \
     840    (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORMSGBOX, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
     841
     842#define HANDLE_WM_CTLCOLOREDIT(hwnd, wParam, lParam, fn) \
     843    (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_EDIT)
     844#define FORWARD_WM_CTLCOLOREDIT(hwnd, hdc, hwndChild, fn) \
     845    (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLOREDIT, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
     846
     847#define HANDLE_WM_CTLCOLORLISTBOX(hwnd, wParam, lParam, fn) \
     848    (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_LISTBOX)
     849#define FORWARD_WM_CTLCOLORLISTBOX(hwnd, hdc, hwndChild, fn) \
     850    (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORLISTBOX, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
     851
     852#define HANDLE_WM_CTLCOLORBTN(hwnd, wParam, lParam, fn) \
     853    (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_BTN)
     854#define FORWARD_WM_CTLCOLORBTN(hwnd, hdc, hwndChild, fn) \
     855    (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORBTN, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
     856
     857#define HANDLE_WM_CTLCOLORDLG(hwnd, wParam, lParam, fn) \
     858    (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_DLG)
     859#define FORWARD_WM_CTLCOLORDLG(hwnd, hdc, hwndChild, fn) \
     860    (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORDLG, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
     861
     862#define HANDLE_WM_CTLCOLORSCROLLBAR(hwnd, wParam, lParam, fn) \
     863    (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_SCROLLBAR)
     864#define FORWARD_WM_CTLCOLORSCROLLBAR(hwnd, hdc, hwndChild, fn) \
     865    (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORSCROLLBAR, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
     866
     867#define HANDLE_WM_CTLCOLORSTATIC(hwnd, wParam, lParam, fn) \
     868    (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_STATIC)
     869#define FORWARD_WM_CTLCOLORSTATIC(hwnd, hdc, hwndChild, fn) \
     870    (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORSTATIC, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
     871
     872/* void Cls_OnSetFont(HWND hwndCtl, HFONT hfont, BOOL fRedraw) */
     873#define HANDLE_WM_SETFONT(hwnd, wParam, lParam, fn) \
     874    ((fn)((hwnd), (HFONT)(wParam), (BOOL)(lParam)), 0L)
     875#define FORWARD_WM_SETFONT(hwnd, hfont, fRedraw, fn) \
     876    (void)(fn)((hwnd), WM_SETFONT, (WPARAM)(HFONT)(hfont), (LPARAM)(BOOL)(fRedraw))
     877
     878/* HFONT Cls_OnGetFont(HWND hwnd) */
     879#define HANDLE_WM_GETFONT(hwnd, wParam, lParam, fn) \
     880    (LRESULT)(DWORD)(UINT)(HFONT)(fn)(hwnd)
     881#define FORWARD_WM_GETFONT(hwnd, fn) \
     882    (HFONT)(UINT)(DWORD)(fn)((hwnd), WM_GETFONT, 0L, 0L)
     883
     884/* void Cls_OnDrawItem(HWND hwnd, const DRAWITEMSTRUCT * lpDrawItem) */
     885#define HANDLE_WM_DRAWITEM(hwnd, wParam, lParam, fn) \
     886    ((fn)((hwnd), (const DRAWITEMSTRUCT *)(lParam)), 0L)
     887#define FORWARD_WM_DRAWITEM(hwnd, lpDrawItem, fn) \
     888    (void)(fn)((hwnd), WM_DRAWITEM, (WPARAM)(((const DRAWITEMSTRUCT *)lpDrawItem)->CtlID), (LPARAM)(const DRAWITEMSTRUCT *)(lpDrawItem))
     889
     890/* void Cls_OnMeasureItem(HWND hwnd, MEASUREITEMSTRUCT * lpMeasureItem) */
     891#define HANDLE_WM_MEASUREITEM(hwnd, wParam, lParam, fn) \
     892    ((fn)((hwnd), (MEASUREITEMSTRUCT *)(lParam)), 0L)
     893#define FORWARD_WM_MEASUREITEM(hwnd, lpMeasureItem, fn) \
     894    (void)(fn)((hwnd), WM_MEASUREITEM, (WPARAM)(((MEASUREITEMSTRUCT *)lpMeasureItem)->CtlID), (LPARAM)(MEASUREITEMSTRUCT *)(lpMeasureItem))
     895
     896/* void Cls_OnDeleteItem(HWND hwnd, const DELETEITEMSTRUCT * lpDeleteItem) */
     897#define HANDLE_WM_DELETEITEM(hwnd, wParam, lParam, fn) \
     898    ((fn)((hwnd), (const DELETEITEMSTRUCT *)(lParam)), 0L)
     899#define FORWARD_WM_DELETEITEM(hwnd, lpDeleteItem, fn) \
     900    (void)(fn)((hwnd), WM_DELETEITEM, (WPARAM)(((const DELETEITEMSTRUCT *)(lpDeleteItem))->CtlID), (LPARAM)(const DELETEITEMSTRUCT *)(lpDeleteItem))
     901
     902/* int Cls_OnCompareItem(HWND hwnd, const COMPAREITEMSTRUCT * lpCompareItem) */
     903#define HANDLE_WM_COMPAREITEM(hwnd, wParam, lParam, fn) \
     904    (LRESULT)(DWORD)(int)(fn)((hwnd), (const COMPAREITEMSTRUCT *)(lParam))
     905#define FORWARD_WM_COMPAREITEM(hwnd, lpCompareItem, fn) \
     906    (int)(DWORD)(fn)((hwnd), WM_COMPAREITEM, (WPARAM)(((const COMPAREITEMSTRUCT *)(lpCompareItem))->CtlID), (LPARAM)(const COMPAREITEMSTRUCT *)(lpCompareItem))
     907
     908/* int Cls_OnVkeyToItem(HWND hwnd, UINT vk, HWND hwndListbox, int iCaret) */
     909#define HANDLE_WM_VKEYTOITEM(hwnd, wParam, lParam, fn) \
     910    (LRESULT)(DWORD)(int)(fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (int)(short)HIWORD(wParam))
     911#define FORWARD_WM_VKEYTOITEM(hwnd, vk, hwndListBox, iCaret, fn) \
     912    (int)(DWORD)(fn)((hwnd), WM_VKEYTOITEM, MAKEWPARAM((vk), (iCaret)), (LPARAM)(hwndListBox))
     913
     914/* int Cls_OnCharToItem(HWND hwnd, UINT ch, HWND hwndListbox, int iCaret) */
     915#define HANDLE_WM_CHARTOITEM(hwnd, wParam, lParam, fn) \
     916    (LRESULT)(DWORD)(int)(fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (int)(short)HIWORD(wParam))
     917#define FORWARD_WM_CHARTOITEM(hwnd, ch, hwndListBox, iCaret, fn) \
     918    (int)(DWORD)(fn)((hwnd), WM_CHARTOITEM, MAKEWPARAM((UINT)(iCaret), (UINT)(ch)), (LPARAM)(hwndListBox))
     919
     920/* void Cls_OnQueueSync(HWND hwnd) */
     921#define HANDLE_WM_QUEUESYNC(hwnd, wParam, lParam, fn) \
     922    ((fn)(hwnd), 0L)
     923#define FORWARD_WM_QUEUESYNC(hwnd, fn) \
     924    (void)(fn)((hwnd), WM_QUEUESYNC, 0L, 0L)
     925#if (WINVER >= 0x030a)
     926/* void Cls_OnCommNotify(HWND hwnd, int cid, UINT flags) */
     927#define HANDLE_WM_COMMNOTIFY(hwnd, wParam, lParam, fn) \
     928    ((fn)((hwnd), (int)(wParam), (UINT)LOWORD(lParam)), 0L)
     929#define FORWARD_WM_COMMNOTIFY(hwnd, cid, flags, fn) \
     930    (void)(fn)((hwnd), WM_COMMNOTIFY, (WPARAM)(cid), MAKELPARAM((flags), 0))
     931#endif
     932
     933/****** COMBOBOX control message APIs *****************************************/
    96934#define ComboBox_GetCount(hwndCtl)            \
    97935                ((int)(DWORD)SendMessage((hwndCtl), CB_GETCOUNT, 0L, 0L))
     
    110948
    111949#define ComboBox_FindString(hwndCtl, indexStart, lpszFind) \
    112                 ((int)(DWORD)SendMessage((hwndCtl), CB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind))) 
     950                ((int)(DWORD)SendMessage((hwndCtl), CB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
    113951
    114952#define ComboBox_ResetContent(hwndCtl)      \
    115953                ((int)(DWORD)SendMessage((hwndCtl), CB_RESETCONTENT, 0L, 0L))
    116                  
     954               
    117955#define ComboBox_AddString(hwndCtl, lpsz)   \
    118                 ((int)(DWORD)SendMessage((hwndCtl), CB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(lpsz)))   
     956                ((int)(DWORD)SendMessage((hwndCtl), CB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(lpsz)))
    119957#define ComboBox_GetLBTextLen(hwndCtl, index)       \
    120958                ((int)(DWORD)SendMessage((hwndCtl), CB_GETLBTEXTLEN, (WPARAM)(int)(index), 0L))
     
    147985#define ListBox_InsertString(hwndCtl, index, lpsz) \
    148986        ((int)(DWORD)SendMessage((hwndCtl), LB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpsz)))
    149          
     987       
    150988#define ListBox_AddItemData(hwndCtl, data) \
    151989        ((int)(DWORD)SendMessage((hwndCtl), LB_ADDSTRING, 0L, (LPARAM)(data)))
     
    1641002#define Edit_LineLength(hwndCtl, line)    \
    1651003        ((int)(DWORD)SendMessage((hwndCtl), EM_LINELENGTH, (WPARAM)(int)(line), 0L))
    166          
     1004
     1005/****** Static control message APIs ******************************************/
     1006
     1007#define Static_Enable(hwndCtl, fEnable)         EnableWindow((hwndCtl), (fEnable))
     1008
     1009#define Static_GetText(hwndCtl, lpch, cchMax)   GetWindowText((hwndCtl), (lpch), (cchMax))
     1010#define Static_GetTextLength(hwndCtl)           GetWindowTextLength(hwndCtl)
     1011#define Static_SetText(hwndCtl, lpsz)           SetWindowText((hwndCtl), (lpsz))
     1012
     1013#define Static_SetIcon(hwndCtl, hIcon)          ((HICON)(UINT)(DWORD)SendMessage((hwndCtl), STM_SETICON, (WPARAM)(HICON)(hIcon), 0L))
     1014#define Static_GetIcon(hwndCtl, hIcon)          ((HICON)(UINT)(DWORD)SendMessage((hwndCtl), STM_GETICON, 0L, 0L))
     1015
     1016/****** Button control message APIs ******************************************/
     1017
     1018#define Button_Enable(hwndCtl, fEnable)         EnableWindow((hwndCtl), (fEnable))
     1019
     1020#define Button_GetText(hwndCtl, lpch, cchMax)   GetWindowText((hwndCtl), (lpch), (cchMax))
     1021#define Button_GetTextLength(hwndCtl)           GetWindowTextLength(hwndCtl)
     1022#define Button_SetText(hwndCtl, lpsz)           SetWindowText((hwndCtl), (lpsz))
     1023
     1024#define Button_GetCheck(hwndCtl)            ((int)(DWORD)SendMessage((hwndCtl), BM_GETCHECK, 0L, 0L))
     1025#define Button_SetCheck(hwndCtl, check)     ((void)SendMessage((hwndCtl), BM_SETCHECK, (WPARAM)(int)(check), 0L))
     1026
     1027#define Button_GetState(hwndCtl)            ((int)(DWORD)SendMessage((hwndCtl), BM_GETSTATE, 0L, 0L))
     1028#define Button_SetState(hwndCtl, state)     ((UINT)(DWORD)SendMessage((hwndCtl), BM_SETSTATE, (WPARAM)(int)(state), 0L))
     1029
     1030#define Button_SetStyle(hwndCtl, style, fRedraw) ((void)SendMessage((hwndCtl), BM_SETSTYLE, (WPARAM)LOWORD(style), MAKELPARAM(((fRedraw) ? TRUE : FALSE), 0)))
     1031
    1671032/****** Edit control message APIs ********************************************/
    1681033
     
    1731038#define Edit_GetTextLength(hwndCtl)             GetWindowTextLength(hwndCtl)
    1741039#define Edit_SetText(hwndCtl, lpsz)             SetWindowText((hwndCtl), (lpsz))
    175          
     1040       
    1761041#define Edit_GetModify(hwndCtl)            \
    1771042        ((BOOL)(DWORD)SendMessage((hwndCtl), EM_GETMODIFY, 0L, 0L))
    1781043#define Edit_SetModify(hwndCtl, fModified) \
    1791044        ((void)SendMessage((hwndCtl), EM_SETMODIFY, (WPARAM)(UINT)(fModified), 0L))
    180          
     1045       
    1811046/* void Cls_OnMeasureItem(HWND hwnd, MEASUREITEMSTRUCT * lpMeasureItem) */
    1821047#define HANDLE_WM_MEASUREITEM(hwnd, wParam, lParam, fn) \
     
    2281093#define FORWARD_WM_DRAWITEM(hwnd, lpDrawItem, fn) \
    2291094        (void)(fn)((hwnd), WM_DRAWITEM, (WPARAM)(((const DRAWITEMSTRUCT *)lpDrawItem)->CtlID), (LPARAM)(const DRAWITEMSTRUCT *)(lpDrawItem))
    230                                  
     1095                               
    2311096/****** C runtime porting macros ****************************************/
    2321097
     1098#if (__IBMC__ >= 400) || (__IBMCPP__ >= 360)
     1099   // defines already in compiler includes
     1100#else
    2331101#define _ncalloc    calloc
    2341102#define _nexpand    _expand
     
    2721140#define _nstrdup    _strdup
    2731141#define hmemcpy16     MoveMemory
     1142#endif
    2741143
    2751144#ifdef __cplusplus
Note: See TracChangeset for help on using the changeset viewer.