Guest User

Windowsx

a guest
Sep 27th, 2020 (edited)
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 102.32 KB | None | 0 0
  1. module windowsx;
  2.  
  3. /*****************************************************************************\
  4. *                                                                             *
  5. * windowsx.h -  Macro APIs, window message crackers, and control APIs         *
  6. *                                                                             *
  7. *               Version Win32 / Windows NT                                    *
  8. *                                                                             *
  9. *               Copyright (c) 1992-1999, Microsoft Corp.  All rights reserved.*
  10. *                                                                             *
  11. \*****************************************************************************/
  12.  
  13. static if(!_INC_WINDOWSX) {
  14. // #define _INC_WINDOWSX
  15.  
  16. static if((_MSC_VER >= 1020)) {
  17. // #pragma once
  18. }
  19. // #include <winapifamily.h>
  20.  
  21. // #pragma region Desktop Family
  22. static if(WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)) {
  23.  
  24.  
  25. static if(__cplusplus) {
  26. extern (C) {            /* Assume C declarations for C++ */
  27. } /* __cplusplus */
  28.  
  29. static if(!SNDMSG) {
  30. static if(__cplusplus) {
  31. static if(!_MAC) {
  32. // #define SNDMSG ::SendMessage
  33. } else {
  34. // #define SNDMSG ::AfxSendMessage
  35. }
  36. } else {   /* __cplusplus */
  37. static if(!_MAC) {
  38. alias  SendMessage  SNDMSG;
  39. } else {
  40. alias  AfxSendMessage  SNDMSG;
  41. }
  42. }  /* __cplusplus */
  43. }  /* SNDMSG */
  44.  
  45. /****** KERNEL Macro APIs ****************************************************/
  46.  
  47.  auto  GetInstanceModule(  ARG1 )(ARG1  hInstance) { return cast(HMODULE)hInstance; }
  48.  
  49.  auto  GlobalPtrHandle(  ARG1 )(ARG1  lp) { return        
  50.                 (cast(HGLOBAL)GlobalHandle(lp)); }
  51.  
  52.  auto  GlobalLockPtr(  ARG1 )(ARG1  lp) { return                
  53.                 (cast(BOOL)GlobalLock(GlobalPtrHandle(lp))); }
  54.  auto  GlobalUnlockPtr(  ARG1 )(ARG1  lp) { return      
  55.                  GlobalUnlock(GlobalPtrHandle(lp)); }
  56.  
  57. static if(!_MAC) {
  58.  auto  GlobalAllocPtr(  ARG1,  ARG2 )(ARG1  flags, ARG2  cb) { return        
  59.                 (GlobalLock(GlobalAlloc(flags, cb))); }
  60. } else {
  61.  auto  GlobalAllocPtr(  ARG1,  ARG2 )(ARG1  flags, ARG2  cb) { return        
  62.                 (GlobalLock(GlobalAlloc(flags | GMEM_PMODELOCKSTRATEGY, cb))); }
  63. }
  64.  auto  GlobalReAllocPtr(  ARG1,  ARG2,  ARG3 )(ARG1  lp, ARG2  cbNew, ARG3  flags) { return      
  65.                 (GlobalUnlockPtr(lp), GlobalLock(GlobalReAlloc(GlobalPtrHandle(lp) , cbNew, flags))); }
  66.  auto  GlobalFreePtr(  ARG1 )(ARG1  lp) { return                
  67.                 (GlobalUnlockPtr(lp), cast(BOOL)cast(ULONG_PTR)GlobalFree(GlobalPtrHandle(lp))); }
  68.  
  69. /****** GDI Macro APIs *******************************************************/
  70.  
  71.  auto  DeletePen(  ARG1 )(ARG1  hpen) { return       DeleteObject(cast(HGDIOBJ)cast(HPEN)hpen); }
  72.  auto  SelectPen(  ARG1,  ARG2 )(ARG1  hdc, ARG2  hpen) { return    (cast(HPEN)SelectObject(hdc, cast(HGDIOBJ)cast(HPEN)hpen)); }
  73.  auto  GetStockPen(  ARG1 )(ARG1  i) { return       (cast(HPEN)GetStockObject(i)); }
  74.  
  75.  auto  DeleteBrush(  ARG1 )(ARG1  hbr) { return      DeleteObject(cast(HGDIOBJ)cast(HBRUSH)hbr); }
  76.  auto  SelectBrush(  ARG1,  ARG2 )(ARG1  hdc, ARG2  hbr) { return   (cast(HBRUSH)SelectObject(hdc, cast(HGDIOBJ)cast(HBRUSH)hbr)); }
  77.  auto  GetStockBrush(  ARG1 )(ARG1  i) { return     (cast(HBRUSH)GetStockObject(i)); }
  78.  
  79.  auto  DeleteRgn(  ARG1 )(ARG1  hrgn) { return       DeleteObject(cast(HGDIOBJ)cast(HRGN)hrgn); }
  80.  
  81. static if(!_MAC) {
  82.  auto  CopyRgn(  ARG1,  ARG2 )(ARG1  hrgnDst, ARG2  hrgnSrc) { return                CombineRgn(hrgnDst, hrgnSrc, 0, RGN_COPY); }
  83. } else {
  84.  auto  AfxCopyRgn(  ARG1,  ARG2 )(ARG1  hrgnDst, ARG2  hrgnSrc) { return             CombineRgn(hrgnDst, hrgnSrc, 0, RGN_COPY); }
  85. }
  86.  auto  IntersectRgn(  ARG1,  ARG2,  ARG3 )(ARG1  hrgnResult, ARG2  hrgnA, ARG3  hrgnB) { return   CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_AND); }
  87.  auto  SubtractRgn(  ARG1,  ARG2,  ARG3 )(ARG1  hrgnResult, ARG2  hrgnA, ARG3  hrgnB) { return    CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_DIFF); }
  88. static if(!_MAC) {
  89.  auto  UnionRgn(  ARG1,  ARG2,  ARG3 )(ARG1  hrgnResult, ARG2  hrgnA, ARG3  hrgnB) { return       CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_OR); }
  90.  auto  XorRgn(  ARG1,  ARG2,  ARG3 )(ARG1  hrgnResult, ARG2  hrgnA, ARG3  hrgnB) { return         CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_XOR); }
  91. } else {
  92.  auto  AfxUnionRgn(  ARG1,  ARG2,  ARG3 )(ARG1  hrgnResult, ARG2  hrgnA, ARG3  hrgnB) { return    CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_OR); }
  93.  auto  AfxXorRgn(  ARG1,  ARG2,  ARG3 )(ARG1  hrgnResult, ARG2  hrgnA, ARG3  hrgnB) { return      CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_XOR); }
  94. }
  95.  
  96.  auto  DeletePalette(  ARG1 )(ARG1  hpal) { return      DeleteObject(cast(HGDIOBJ)cast(HPALETTE)hpal); }
  97.  
  98.  auto  DeleteFont(  ARG1 )(ARG1  hfont) { return             DeleteObject(cast(HGDIOBJ)cast(HFONT)hfont); }
  99.  auto  SelectFont(  ARG1,  ARG2 )(ARG1  hdc, ARG2  hfont) { return  (cast(HFONT)SelectObject(hdc, cast(HGDIOBJ)cast(HFONT)hfont)); }
  100.  auto  GetStockFont(  ARG1 )(ARG1  i) { return      (cast(HFONT)GetStockObject(i)); }
  101.  
  102.  auto  DeleteBitmap(  ARG1 )(ARG1  hbm) { return        DeleteObject(cast(HGDIOBJ)cast(HBITMAP)hbm); }
  103.  auto  SelectBitmap(  ARG1,  ARG2 )(ARG1  hdc, ARG2  hbm) { return  (cast(HBITMAP)SelectObject(hdc, cast(HGDIOBJ)cast(HBITMAP)hbm)); }
  104.  
  105. static if(!_MAC) {
  106.  auto  InsetRect(  ARG1,  ARG2,  ARG3 )(ARG1  lprc, ARG2  dx, ARG3  dy) { return  InflateRect(lprc, -dx, -dy); }
  107. } else {
  108.  auto  AfxInsetRect(  ARG1,  ARG2,  ARG3 )(ARG1  lprc, ARG2  dx, ARG3  dy) { return  InflateRect(lprc, -dx, -dy); }
  109. }
  110.  
  111. /****** USER Macro APIs ******************************************************/
  112.  
  113.  auto  GetWindowInstance(  ARG1 )(ARG1  hwnd) { return (cast(HMODULE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE)); }
  114.  
  115.  auto  GetWindowStyle(  ARG1 )(ARG1  hwnd) { return    (cast(DWORD)GetWindowLong(hwnd, GWL_STYLE)); }
  116.  auto  GetWindowExStyle(  ARG1 )(ARG1  hwnd) { return  (cast(DWORD)GetWindowLong(hwnd, GWL_EXSTYLE)); }
  117.  
  118.  auto  GetWindowOwner(  ARG1 )(ARG1  hwnd) { return     GetWindow(hwnd, GW_OWNER); }
  119.  
  120.  auto  GetFirstChild(  ARG1 )(ARG1  hwnd) { return      GetTopWindow(hwnd); }
  121.  auto  GetFirstSibling(  ARG1 )(ARG1  hwnd) { return    GetWindow(hwnd, GW_HWNDFIRST); }
  122.  auto  GetLastSibling(  ARG1 )(ARG1  hwnd) { return     GetWindow(hwnd, GW_HWNDLAST); }
  123.  auto  GetNextSibling(  ARG1 )(ARG1  hwnd) { return     GetWindow(hwnd, GW_HWNDNEXT); }
  124.  auto  GetPrevSibling(  ARG1 )(ARG1  hwnd) { return     GetWindow(hwnd, GW_HWNDPREV); }
  125.  
  126.  auto  GetWindowID(  ARG1 )(ARG1  hwnd) { return             GetDlgCtrlID(hwnd); }
  127.  
  128.  void  SetWindowRedraw(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fRedraw) {  
  129.                     (cast()SNDMSG(hwnd, WM_SETREDRAW, cast(WPARAM)cast(BOOL)fRedraw, 0)); }
  130.  
  131.  auto  SubclassWindow(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  lpfn) { return      
  132.               (cast(WNDPROC)SetWindowLongPtr(hwnd, GWLP_WNDPROC, cast(LPARAM)cast(WNDPROC)lpfn)); }
  133.  
  134.  auto  IsMinimized(  ARG1 )(ARG1  hwnd) { return         IsIconic(hwnd); }
  135.  auto  IsMaximized(  ARG1 )(ARG1  hwnd) { return         IsZoomed(hwnd); }
  136.  auto  IsRestored(  ARG1 )(ARG1  hwnd) { return    ((GetWindowStyle(hwnd) & (WS_MINIMIZE | WS_MAXIMIZE)) == 0); }
  137.  
  138.  auto  SetWindowFont(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  hfont, ARG3  fRedraw) { return  FORWARD_WM_SETFONT(hwnd, hfont, fRedraw, SNDMSG); }
  139.  
  140.  auto  GetWindowFont(  ARG1 )(ARG1  hwnd) { return                  FORWARD_WM_GETFONT(hwnd, SNDMSG); }
  141. static if((WINVER >= 0x030a)) {
  142.  
  143. static if(UNIX) {
  144. alias  MwMapWindowRect      MapWindowRect;
  145. LONG  MwMapWindowRect(HWND, HWND, RECT *);
  146. } else {
  147.  
  148.  auto  MapWindowRect(  ARG1,  ARG2,  ARG3 )(ARG1  hwndFrom, ARG2  hwndTo, ARG3  lprc) { return
  149.                      MapWindowPoints(hwndFrom, hwndTo, cast(POINT *)lprc, 2); }
  150. } /* !UNIX */
  151. }
  152.  auto  IsLButtonDown(  )() { return  (GetKeyState(VK_LBUTTON) < 0); }
  153.  auto  IsRButtonDown(  )() { return  (GetKeyState(VK_RBUTTON) < 0); }
  154.  auto  IsMButtonDown(  )() { return  (GetKeyState(VK_MBUTTON) < 0); }
  155.  
  156.  auto  SubclassDialog(  ARG1,  ARG2 )(ARG1  hwndDlg, ARG2  lpfn) { return
  157.              (SetWindowLongPtr(hwndDlg, DWLP_DLGPROC, cast(LPARAM)lpfn)); }
  158.  
  159.  auto  SetDlgMsgResult(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  msg, ARG3  result) { return ((
  160.         msg == WM_CTLCOLORMSGBOX      ||
  161.         msg == WM_CTLCOLOREDIT        ||
  162.         msg == WM_CTLCOLORLISTBOX     ||
  163.         msg == WM_CTLCOLORBTN         ||
  164.         msg == WM_CTLCOLORDLG         ||
  165.         msg == WM_CTLCOLORSCROLLBAR   ||
  166.         msg == WM_CTLCOLORSTATIC      ||
  167.         msg == WM_COMPAREITEM         ||
  168.         msg == WM_VKEYTOITEM          ||
  169.         msg == WM_CHARTOITEM          ||
  170.         msg == WM_QUERYDRAGICON       ||
  171.         msg == WM_INITDIALOG            
  172.     ) ? cast(BOOL)result : (SetWindowLongPtr(hwnd, DWLP_MSGRESULT, cast(LPARAM)cast(LRESULT)result), TRUE)); }
  173.  
  174.  auto  DefDlgProcEx(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  msg, ARG3  wParam, ARG4  lParam, ARG5  pfRecursion) { return
  175.     (*pfRecursion = TRUE, DefDlgProc(hwnd, msg, wParam, lParam)); }
  176.  
  177.  void  CheckDefDlgRecursion(  ARG1 )(ARG1  pfRecursion) {  
  178.     if (*pfRecursion) { *pfRecursion = FALSE; return  FALSE; }{} }
  179.  
  180. /****** Message crackers ****************************************************/
  181.  
  182.  void  HANDLE_MSG(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  message, ARG3  fn) {    
  183.     case  message: return  HANDLE_ /* SYNTAX ERROR: (181): expected ; instead of ## */ ##message((hwnd), (wParam), (lParam), (fn)); }
  184.  
  185. /* void Cls_OnCompacting(HWND hwnd, UINT compactRatio) */
  186.  auto  HANDLE_WM_COMPACTING(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  187.     (cast(fn)(hwnd, cast(UINT)wParam), 0); }
  188.  void  FORWARD_WM_COMPACTING(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  compactRatio, ARG3  fn) {  
  189.     cast()cast(fn)(hwnd, WM_COMPACTING, cast(WPARAM)cast(UINT)compactRatio, 0); }
  190.  
  191. /* void Cls_OnWinIniChange(HWND hwnd, LPCTSTR lpszSectionName) */
  192.  auto  HANDLE_WM_WININICHANGE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  193.     (cast(fn)(hwnd, cast(LPCTSTR)lParam), 0); }
  194.  void  FORWARD_WM_WININICHANGE(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  lpszSectionName, ARG3  fn) {  
  195.     cast()cast(fn)(hwnd, WM_WININICHANGE, 0, cast(LPARAM)cast(LPCTSTR)lpszSectionName); }
  196.  
  197. /* void Cls_OnSysColorChange(HWND hwnd) */
  198.  auto  HANDLE_WM_SYSCOLORCHANGE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  199.     (cast(fn)hwnd, 0); }
  200.  void  FORWARD_WM_SYSCOLORCHANGE(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  201.     cast()cast(fn)(hwnd, WM_SYSCOLORCHANGE, 0, 0); }
  202.  
  203. /* BOOL Cls_OnQueryNewPalette(HWND hwnd) */
  204.  auto  HANDLE_WM_QUERYNEWPALETTE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  205.      MAKELRESULT(cast(BOOL)cast(fn)hwnd, 0); }
  206.  auto  FORWARD_WM_QUERYNEWPALETTE(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) { return
  207.     cast(BOOL)cast(DWORD)cast(fn)(hwnd, WM_QUERYNEWPALETTE, 0, 0); }
  208.  
  209. /* void Cls_OnPaletteIsChanging(HWND hwnd, HWND hwndPaletteChange) */
  210.  auto  HANDLE_WM_PALETTEISCHANGING(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  211.     (cast(fn)(hwnd, cast(HWND)wParam), 0); }
  212.  void  FORWARD_WM_PALETTEISCHANGING(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  hwndPaletteChange, ARG3  fn) {  
  213.     cast()cast(fn)(hwnd, WM_PALETTEISCHANGING, cast(WPARAM)cast(HWND)hwndPaletteChange, 0); }
  214.  
  215. /* void Cls_OnPaletteChanged(HWND hwnd, HWND hwndPaletteChange) */
  216.  auto  HANDLE_WM_PALETTECHANGED(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  217.     (cast(fn)(hwnd, cast(HWND)wParam), 0); }
  218.  void  FORWARD_WM_PALETTECHANGED(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  hwndPaletteChange, ARG3  fn) {  
  219.     cast()cast(fn)(hwnd, WM_PALETTECHANGED, cast(WPARAM)cast(HWND)hwndPaletteChange, 0); }
  220.  
  221. /* void Cls_OnFontChange(HWND hwnd) */
  222.  auto  HANDLE_WM_FONTCHANGE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  223.     (cast(fn)hwnd, 0); }
  224.  void  FORWARD_WM_FONTCHANGE(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  225.     cast()cast(fn)(hwnd, WM_FONTCHANGE, 0, 0); }
  226.  
  227. /* void Cls_OnSpoolerStatus(HWND hwnd, UINT status, int cJobInQueue) */
  228.  auto  HANDLE_WM_SPOOLERSTATUS(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  229.     (cast(fn)(hwnd, cast(UINT)wParam, cast(int)cast(short)LOWORD(lParam)), 0); }
  230.  void  FORWARD_WM_SPOOLERSTATUS(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  status, ARG3  cJobInQueue, ARG4  fn) {  
  231.     cast()cast(fn)(hwnd, WM_SPOOLERSTATUS, cast(WPARAM)status, MAKELPARAM(cJobInQueue, 0)); }
  232.  
  233. /* void Cls_OnDevModeChange(HWND hwnd, LPCTSTR lpszDeviceName) */
  234.  auto  HANDLE_WM_DEVMODECHANGE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  235.     (cast(fn)(hwnd, cast(LPCTSTR)lParam), 0); }
  236.  void  FORWARD_WM_DEVMODECHANGE(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  lpszDeviceName, ARG3  fn) {  
  237.     cast()cast(fn)(hwnd, WM_DEVMODECHANGE, 0, cast(LPARAM)cast(LPCTSTR)lpszDeviceName); }
  238.  
  239. /* void Cls_OnTimeChange(HWND hwnd) */
  240.  auto  HANDLE_WM_TIMECHANGE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  241.     (cast(fn)hwnd, 0); }
  242.  void  FORWARD_WM_TIMECHANGE(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  243.     cast()cast(fn)(hwnd, WM_TIMECHANGE, 0, 0); }
  244.  
  245. /* void Cls_OnPower(HWND hwnd, int code) */
  246.  auto  HANDLE_WM_POWER(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  247.     (cast(fn)(hwnd, cast(int)wParam), 0); }
  248.  void  FORWARD_WM_POWER(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  code, ARG3  fn) {  
  249.     cast()cast(fn)(hwnd, WM_POWER, cast(WPARAM)cast(int)code, 0); }
  250.  
  251. /* BOOL Cls_OnQueryEndSession(HWND hwnd) */
  252.  auto  HANDLE_WM_QUERYENDSESSION(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  253.      MAKELRESULT(cast(BOOL)cast(fn)hwnd, 0); }
  254.  auto  FORWARD_WM_QUERYENDSESSION(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) { return
  255.     cast(BOOL)cast(DWORD)cast(fn)(hwnd, WM_QUERYENDSESSION, 0, 0); }
  256.  
  257. /* void Cls_OnEndSession(HWND hwnd, BOOL fEnding) */
  258.  auto  HANDLE_WM_ENDSESSION(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  259.     (cast(fn)(hwnd, cast(BOOL)wParam), 0); }
  260.  void  FORWARD_WM_ENDSESSION(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  fEnding, ARG3  fn) {  
  261.     cast()cast(fn)(hwnd, WM_ENDSESSION, cast(WPARAM)cast(BOOL)fEnding, 0); }
  262.  
  263. /* void Cls_OnQuit(HWND hwnd, int exitCode) */
  264.  auto  HANDLE_WM_QUIT(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  265.     (cast(fn)(hwnd, cast(int)wParam), 0); }
  266.  void  FORWARD_WM_QUIT(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  exitCode, ARG3  fn) {  
  267.     cast()cast(fn)(hwnd, WM_QUIT, cast(WPARAM)exitCode, 0); }
  268.  
  269. /* This message is in Windows 3.1 only */
  270. /* void Cls_OnSystemError(HWND hwnd, int errCode) */
  271.  auto  HANDLE_WM_SYSTEMERROR(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return  0; }
  272.  auto  FORWARD_WM_SYSTEMERROR(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  errCode, ARG3  fn) { return  0; }
  273.  
  274. /* BOOL Cls_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) */
  275.  auto  HANDLE_WM_CREATE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  276.     (cast(fn)(hwnd, cast(LPCREATESTRUCT)lParam) ? 0 : LRESULT-1); }
  277.  auto  FORWARD_WM_CREATE(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  lpCreateStruct, ARG3  fn) { return
  278.     cast(BOOL)cast(DWORD)cast(fn)(hwnd, WM_CREATE, 0, cast(LPARAM)cast(LPCREATESTRUCT)lpCreateStruct); }
  279.  
  280. /* BOOL Cls_OnNCCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) */
  281.  auto  HANDLE_WM_NCCREATE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  282.     cast(LRESULT)cast(DWORD)cast(BOOL)cast(fn)(hwnd, cast(LPCREATESTRUCT)lParam); }
  283.  auto  FORWARD_WM_NCCREATE(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  lpCreateStruct, ARG3  fn) { return
  284.     cast(BOOL)cast(DWORD)cast(fn)(hwnd, WM_NCCREATE, 0, cast(LPARAM)cast(LPCREATESTRUCT)lpCreateStruct); }
  285.  
  286. /* void Cls_OnDestroy(HWND hwnd) */
  287.  auto  HANDLE_WM_DESTROY(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  288.     (cast(fn)hwnd, 0); }
  289.  void  FORWARD_WM_DESTROY(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  290.     cast()cast(fn)(hwnd, WM_DESTROY, 0, 0); }
  291.  
  292. /* void Cls_OnNCDestroy(HWND hwnd) */
  293.  auto  HANDLE_WM_NCDESTROY(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  294.     (cast(fn)hwnd, 0); }
  295.  void  FORWARD_WM_NCDESTROY(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  296.     cast()cast(fn)(hwnd, WM_NCDESTROY, 0, 0); }
  297.  
  298. /* void Cls_OnShowWindow(HWND hwnd, BOOL fShow, UINT status) */
  299.  auto  HANDLE_WM_SHOWWINDOW(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  300.     (cast(fn)(hwnd, cast(BOOL)wParam, cast(UINT)lParam), 0); }
  301.  void  FORWARD_WM_SHOWWINDOW(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  fShow, ARG3  status, ARG4  fn) {  
  302.     cast()cast(fn)(hwnd, WM_SHOWWINDOW, cast(WPARAM)cast(BOOL)fShow, cast(LPARAM)cast(UINT)status); }
  303.  
  304. /* void Cls_OnSetRedraw(HWND hwnd, BOOL fRedraw) */
  305.  auto  HANDLE_WM_SETREDRAW(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  306.     (cast(fn)(hwnd, cast(BOOL)wParam), 0); }
  307.  void  FORWARD_WM_SETREDRAW(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  fRedraw, ARG3  fn) {  
  308.     cast()cast(fn)(hwnd, WM_SETREDRAW, cast(WPARAM)cast(BOOL)fRedraw, 0); }
  309.  
  310. /* void Cls_OnEnable(HWND hwnd, BOOL fEnable) */
  311.  auto  HANDLE_WM_ENABLE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  312.     (cast(fn)(hwnd, cast(BOOL)wParam), 0); }
  313.  void  FORWARD_WM_ENABLE(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  fEnable, ARG3  fn) {  
  314.     cast()cast(fn)(hwnd, WM_ENABLE, cast(WPARAM)cast(BOOL)fEnable, 0); }
  315.  
  316. /* void Cls_OnSetText(HWND hwnd, LPCTSTR lpszText) */
  317.  auto  HANDLE_WM_SETTEXT(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  318.     (cast(fn)(hwnd, cast(LPCTSTR)lParam), 0); }
  319.  void  FORWARD_WM_SETTEXT(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  lpszText, ARG3  fn) {  
  320.     cast()cast(fn)(hwnd, WM_SETTEXT, 0, cast(LPARAM)cast(LPCTSTR)lpszText); }
  321.  
  322. /* INT Cls_OnGetText(HWND hwnd, int cchTextMax, LPTSTR lpszText) */
  323.  auto  HANDLE_WM_GETTEXT(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  324.     cast(LRESULT)cast(DWORD)cast(int)cast(fn)(hwnd, cast(int)wParam, cast(LPTSTR)lParam); }
  325.  auto  FORWARD_WM_GETTEXT(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  cchTextMax, ARG3  lpszText, ARG4  fn) { return
  326.     cast(int)cast(DWORD)cast(fn)(hwnd, WM_GETTEXT, cast(WPARAM)cast(int)cchTextMax, cast(LPARAM)cast(LPTSTR)lpszText); }
  327.  
  328. /* INT Cls_OnGetTextLength(HWND hwnd) */
  329.  auto  HANDLE_WM_GETTEXTLENGTH(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  330.     cast(LRESULT)cast(DWORD)cast(int)cast(fn)hwnd; }
  331.  auto  FORWARD_WM_GETTEXTLENGTH(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) { return
  332.     cast(int)cast(DWORD)cast(fn)(hwnd, WM_GETTEXTLENGTH, 0, 0); }
  333.  
  334. /* BOOL Cls_OnWindowPosChanging(HWND hwnd, LPWINDOWPOS lpwpos) */
  335.  auto  HANDLE_WM_WINDOWPOSCHANGING(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  336.     cast(LRESULT)cast(DWORD)cast(BOOL)cast(fn)(hwnd, cast(LPWINDOWPOS)lParam); }
  337.  auto  FORWARD_WM_WINDOWPOSCHANGING(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  lpwpos, ARG3  fn) { return
  338.     cast(BOOL)cast(DWORD)cast(fn)(hwnd, WM_WINDOWPOSCHANGING, 0, cast(LPARAM)cast(LPWINDOWPOS)lpwpos); }
  339.  
  340. /* void Cls_OnWindowPosChanged(HWND hwnd, const LPWINDOWPOS lpwpos) */
  341.  void  HANDLE_WM_WINDOWPOSCHANGED(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) {  
  342.     (cast(fn)(hwnd, cast(const  LPWINDOWPOS)lParam), 0); }
  343.  void  FORWARD_WM_WINDOWPOSCHANGED(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  lpwpos, ARG3  fn) {  
  344.     cast()cast(fn)(hwnd, WM_WINDOWPOSCHANGED, 0, cast(LPARAM)cast(const  LPWINDOWPOS)lpwpos); }
  345.  
  346. /* void Cls_OnMove(HWND hwnd, int x, int y) */
  347.  auto  HANDLE_WM_MOVE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  348.     (cast(fn)(hwnd, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam)), 0); }
  349.  void  FORWARD_WM_MOVE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  x, ARG3  y, ARG4  fn) {  
  350.     cast()cast(fn)(hwnd, WM_MOVE, 0, MAKELPARAM(x, y)); }
  351.  
  352. /* void Cls_OnSize(HWND hwnd, UINT state, int cx, int cy) */
  353.  auto  HANDLE_WM_SIZE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  354.     (cast(fn)(hwnd, cast(UINT)wParam, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam)), 0); }
  355.  void  FORWARD_WM_SIZE(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  state, ARG3  cx, ARG4  cy, ARG5  fn) {  
  356.     cast()cast(fn)(hwnd, WM_SIZE, cast(WPARAM)cast(UINT)state, MAKELPARAM(cx, cy)); }
  357.  
  358. /* void Cls_OnClose(HWND hwnd) */
  359.  auto  HANDLE_WM_CLOSE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  360.     (cast(fn)hwnd, 0); }
  361.  void  FORWARD_WM_CLOSE(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  362.     cast()cast(fn)(hwnd, WM_CLOSE, 0, 0); }
  363.  
  364. /* BOOL Cls_OnQueryOpen(HWND hwnd) */
  365.  auto  HANDLE_WM_QUERYOPEN(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  366.      MAKELRESULT(cast(BOOL)cast(fn)hwnd, 0); }
  367.  auto  FORWARD_WM_QUERYOPEN(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) { return
  368.     cast(BOOL)cast(DWORD)cast(fn)(hwnd, WM_QUERYOPEN, 0, 0); }
  369.  
  370. /* void Cls_OnGetMinMaxInfo(HWND hwnd, LPMINMAXINFO lpMinMaxInfo) */
  371.  auto  HANDLE_WM_GETMINMAXINFO(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  372.     (cast(fn)(hwnd, cast(LPMINMAXINFO)lParam), 0); }
  373.  void  FORWARD_WM_GETMINMAXINFO(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  lpMinMaxInfo, ARG3  fn) {  
  374.     cast()cast(fn)(hwnd, WM_GETMINMAXINFO, 0, cast(LPARAM)cast(LPMINMAXINFO)lpMinMaxInfo); }
  375.  
  376. /* void Cls_OnPaint(HWND hwnd) */
  377.  auto  HANDLE_WM_PAINT(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  378.     (cast(fn)hwnd, 0); }
  379.  void  FORWARD_WM_PAINT(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  380.     cast()cast(fn)(hwnd, WM_PAINT, 0, 0); }
  381.  
  382. /* BOOL Cls_OnEraseBkgnd(HWND hwnd, HDC hdc) */
  383.  auto  HANDLE_WM_ERASEBKGND(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  384.     cast(LRESULT)cast(DWORD)cast(BOOL)cast(fn)(hwnd, cast(HDC)wParam); }
  385.  auto  FORWARD_WM_ERASEBKGND(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  hdc, ARG3  fn) { return
  386.    cast(BOOL)cast(DWORD)cast(fn)(hwnd, WM_ERASEBKGND, cast(WPARAM)cast(HDC)hdc, 0); }
  387.  
  388. /* BOOL Cls_OnIconEraseBkgnd(HWND hwnd, HDC hdc) */
  389.  auto  HANDLE_WM_ICONERASEBKGND(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  390.     cast(LRESULT)cast(DWORD)cast(BOOL)cast(fn)(hwnd, cast(HDC)wParam); }
  391.  auto  FORWARD_WM_ICONERASEBKGND(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  hdc, ARG3  fn) { return
  392.     cast(BOOL)cast(DWORD)cast(fn)(hwnd, WM_ICONERASEBKGND, cast(WPARAM)cast(HDC)hdc, 0); }
  393.  
  394. /* void Cls_OnNCPaint(HWND hwnd, HRGN hrgn) */
  395.  auto  HANDLE_WM_NCPAINT(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  396.     (cast(fn)(hwnd, cast(HRGN)wParam), 0); }
  397.  void  FORWARD_WM_NCPAINT(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  hrgn, ARG3  fn) {  
  398.     cast()cast(fn)(hwnd, WM_NCPAINT, cast(WPARAM)cast(HRGN)hrgn, 0); }
  399.  
  400. /* UINT Cls_OnNCCalcSize(HWND hwnd, BOOL fCalcValidRects, NCCALCSIZE_PARAMS * lpcsp) */
  401.  auto  HANDLE_WM_NCCALCSIZE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  402.     cast(LRESULT)cast(DWORD)cast(UINT)cast(fn)(hwnd, cast(BOOL)wParam, cast(NCCALCSIZE_PARAMS *)lParam); }
  403.  auto  FORWARD_WM_NCCALCSIZE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  fCalcValidRects, ARG3  lpcsp, ARG4  fn) { return
  404.     cast(UINT)cast(DWORD)cast(fn)(hwnd, WM_NCCALCSIZE, cast(WPARAM)fCalcValidRects, cast(LPARAM)cast(NCCALCSIZE_PARAMS *)lpcsp); }
  405.  
  406. /* UINT Cls_OnNCHitTest(HWND hwnd, int x, int y) */
  407.  auto  HANDLE_WM_NCHITTEST(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  408.     cast(LRESULT)cast(DWORD)cast(UINT)cast(fn)(hwnd, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam)); }
  409.  auto  FORWARD_WM_NCHITTEST(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  x, ARG3  y, ARG4  fn) { return
  410.     cast(UINT)cast(DWORD)cast(fn)(hwnd, WM_NCHITTEST, 0, MAKELPARAM(x, y)); }
  411.  
  412. /* HICON Cls_OnQueryDragIcon(HWND hwnd) */
  413.  auto  HANDLE_WM_QUERYDRAGICON(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  414.     cast(LRESULT)cast(DWORD)cast(UINT)cast(fn)hwnd; }
  415.  auto  FORWARD_WM_QUERYDRAGICON(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) { return
  416.     cast(HICON)cast(UINT)cast(DWORD)cast(fn)(hwnd, WM_QUERYDRAGICON, 0, 0); }
  417.  
  418. static if(_INC_SHELLAPI) {
  419. /* void Cls_OnDropFiles(HWND hwnd, HDROP hdrop) */
  420.  auto  HANDLE_WM_DROPFILES(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  421.     (cast(fn)(hwnd, cast(HDROP)wParam), 0); }
  422.  void  FORWARD_WM_DROPFILES(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  hdrop, ARG3  fn) {  
  423.     cast()cast(fn)(hwnd, WM_DROPFILES, cast(WPARAM)cast(HDROP)hdrop, 0); }
  424. }  /* _INC_SHELLAPI */
  425.  
  426. /* void Cls_OnActivate(HWND hwnd, UINT state, HWND hwndActDeact, BOOL fMinimized) */
  427.  auto  HANDLE_WM_ACTIVATE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  428.     (cast(fn)(hwnd, cast(UINT)LOWORD(wParam), cast(HWND)lParam, cast(BOOL)HIWORD(wParam)), 0); }
  429.  void  FORWARD_WM_ACTIVATE(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  state, ARG3  hwndActDeact, ARG4  fMinimized, ARG5  fn) {  
  430.     cast()cast(fn)(hwnd, WM_ACTIVATE, MAKEWPARAM(state, fMinimized), cast(LPARAM)cast(HWND)hwndActDeact); }
  431.  
  432. /* void Cls_OnActivateApp(HWND hwnd, BOOL fActivate, DWORD dwThreadId) */
  433.  auto  HANDLE_WM_ACTIVATEAPP(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  434.     (cast(fn)(hwnd, cast(BOOL)wParam, cast(DWORD)lParam), 0); }
  435.  void  FORWARD_WM_ACTIVATEAPP(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  fActivate, ARG3  dwThreadId, ARG4  fn) {  
  436.     cast()cast(fn)(hwnd, WM_ACTIVATEAPP, cast(WPARAM)cast(BOOL)fActivate, cast(LPARAM)dwThreadId); }
  437.  
  438. /* BOOL Cls_OnNCActivate(HWND hwnd, BOOL fActive, HWND hwndActDeact, BOOL fMinimized) */
  439.  auto  HANDLE_WM_NCACTIVATE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  440.     cast(LRESULT)cast(DWORD)cast(BOOL)cast(fn)(hwnd, cast(BOOL)wParam, 0, 0); }
  441.  auto  FORWARD_WM_NCACTIVATE(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  fActive, ARG3  hwndActDeact, ARG4  fMinimized, ARG5  fn) { return
  442.     cast(BOOL)cast(DWORD)cast(fn)(hwnd, WM_NCACTIVATE, cast(WPARAM)cast(BOOL)fActive, 0); }
  443.  
  444. /* void Cls_OnSetFocus(HWND hwnd, HWND hwndOldFocus) */
  445.  auto  HANDLE_WM_SETFOCUS(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  446.     (cast(fn)(hwnd, cast(HWND)wParam), 0); }
  447.  void  FORWARD_WM_SETFOCUS(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  hwndOldFocus, ARG3  fn) {  
  448.     cast()cast(fn)(hwnd, WM_SETFOCUS, cast(WPARAM)cast(HWND)hwndOldFocus, 0); }
  449.  
  450. /* void Cls_OnKillFocus(HWND hwnd, HWND hwndNewFocus) */
  451.  auto  HANDLE_WM_KILLFOCUS(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  452.     (cast(fn)(hwnd, cast(HWND)wParam), 0); }
  453.  void  FORWARD_WM_KILLFOCUS(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  hwndNewFocus, ARG3  fn) {  
  454.     cast()cast(fn)(hwnd, WM_KILLFOCUS, cast(WPARAM)cast(HWND)hwndNewFocus, 0); }
  455.  
  456. /* void Cls_OnKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */
  457.  auto  HANDLE_WM_KEYDOWN(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  458.     (cast(fn)(hwnd, cast(UINT)wParam, TRUE, cast(int)cast(short)LOWORD(lParam), cast(UINT)HIWORD(lParam)), 0); }
  459.  void  FORWARD_WM_KEYDOWN(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  vk, ARG3  cRepeat, ARG4  flags, ARG5  fn) {  
  460.     cast()cast(fn)(hwnd, WM_KEYDOWN, cast(WPARAM)cast(UINT)vk, MAKELPARAM(cRepeat, flags)); }
  461.  
  462. /* void Cls_OnKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */
  463.  auto  HANDLE_WM_KEYUP(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  464.     (cast(fn)(hwnd, cast(UINT)wParam, FALSE, cast(int)cast(short)LOWORD(lParam), cast(UINT)HIWORD(lParam)), 0); }
  465.  void  FORWARD_WM_KEYUP(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  vk, ARG3  cRepeat, ARG4  flags, ARG5  fn) {  
  466.     cast()cast(fn)(hwnd, WM_KEYUP, cast(WPARAM)cast(UINT)vk, MAKELPARAM(cRepeat, flags)); }
  467.  
  468. /* void Cls_OnChar(HWND hwnd, TCHAR ch, int cRepeat) */
  469.  auto  HANDLE_WM_CHAR(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  470.     (cast(fn)(hwnd, cast(TCHAR)wParam, cast(int)cast(short)LOWORD(lParam)), 0); }
  471.  void  FORWARD_WM_CHAR(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  ch, ARG3  cRepeat, ARG4  fn) {  
  472.     cast()cast(fn)(hwnd, WM_CHAR, cast(WPARAM)cast(TCHAR)ch, MAKELPARAM(cRepeat,0)); }
  473.  
  474. /* void Cls_OnDeadChar(HWND hwnd, TCHAR ch, int cRepeat) */
  475.  auto  HANDLE_WM_DEADCHAR(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  476.     (cast(fn)(hwnd, cast(TCHAR)wParam, cast(int)cast(short)LOWORD(lParam)), 0); }
  477.  void  FORWARD_WM_DEADCHAR(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  ch, ARG3  cRepeat, ARG4  fn) {  
  478.     cast()cast(fn)(hwnd, WM_DEADCHAR, cast(WPARAM)cast(TCHAR)ch, MAKELPARAM(cRepeat,0)); }
  479.  
  480. /* void Cls_OnSysKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */
  481.  auto  HANDLE_WM_SYSKEYDOWN(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  482.     (cast(fn)(hwnd, cast(UINT)wParam, TRUE, cast(int)cast(short)LOWORD(lParam), cast(UINT)HIWORD(lParam)), 0); }
  483.  void  FORWARD_WM_SYSKEYDOWN(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  vk, ARG3  cRepeat, ARG4  flags, ARG5  fn) {  
  484.     cast()cast(fn)(hwnd, WM_SYSKEYDOWN, cast(WPARAM)cast(UINT)vk, MAKELPARAM(cRepeat, flags)); }
  485.  
  486. /* void Cls_OnSysKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */
  487.  auto  HANDLE_WM_SYSKEYUP(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  488.     (cast(fn)(hwnd, cast(UINT)wParam, FALSE, cast(int)cast(short)LOWORD(lParam), cast(UINT)HIWORD(lParam)), 0); }
  489.  void  FORWARD_WM_SYSKEYUP(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  vk, ARG3  cRepeat, ARG4  flags, ARG5  fn) {  
  490.     cast()cast(fn)(hwnd, WM_SYSKEYUP, cast(WPARAM)cast(UINT)vk, MAKELPARAM(cRepeat, flags)); }
  491.  
  492. /* void Cls_OnSysChar(HWND hwnd, TCHAR ch, int cRepeat) */
  493.  auto  HANDLE_WM_SYSCHAR(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  494.     (cast(fn)(hwnd, cast(TCHAR)wParam, cast(int)cast(short)LOWORD(lParam)), 0); }
  495.  void  FORWARD_WM_SYSCHAR(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  ch, ARG3  cRepeat, ARG4  fn) {  
  496.     cast()cast(fn)(hwnd, WM_SYSCHAR, cast(WPARAM)cast(TCHAR)ch, MAKELPARAM(cRepeat, 0)); }
  497.  
  498. /* void Cls_OnSysDeadChar(HWND hwnd, TCHAR ch, int cRepeat) */
  499.  auto  HANDLE_WM_SYSDEADCHAR(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  500.     (cast(fn)(hwnd, cast(TCHAR)wParam, cast(int)cast(short)LOWORD(lParam)), 0); }
  501.  void  FORWARD_WM_SYSDEADCHAR(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  ch, ARG3  cRepeat, ARG4  fn) {  
  502.     cast()cast(fn)(hwnd, WM_SYSDEADCHAR, cast(WPARAM)cast(TCHAR)ch, MAKELPARAM(cRepeat, 0)); }
  503.  
  504. /* void Cls_OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags) */
  505.  auto  HANDLE_WM_MOUSEMOVE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  506.     (cast(fn)(hwnd, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  507.  void  FORWARD_WM_MOUSEMOVE(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  x, ARG3  y, ARG4  keyFlags, ARG5  fn) {  
  508.     cast()cast(fn)(hwnd, WM_MOUSEMOVE, cast(WPARAM)cast(UINT)keyFlags, MAKELPARAM(x, y)); }
  509.  
  510. /* void Cls_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
  511.  auto  HANDLE_WM_LBUTTONDOWN(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  512.     (cast(fn)(hwnd, FALSE, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  513.  void  FORWARD_WM_LBUTTONDOWN(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5,  ARG6 )(ARG1  hwnd, ARG2  fDoubleClick, ARG3  x, ARG4  y, ARG5  keyFlags, ARG6  fn) {  
  514.     cast()cast(fn)(hwnd, fDoubleClick ? WM_LBUTTONDBLCLK : WM_LBUTTONDOWN, cast(WPARAM)cast(UINT)keyFlags, MAKELPARAM(x, y)); }
  515.  
  516. /* void Cls_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
  517.  auto  HANDLE_WM_LBUTTONDBLCLK(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  518.     (cast(fn)(hwnd, TRUE, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  519.  
  520. /* void Cls_OnLButtonUp(HWND hwnd, int x, int y, UINT keyFlags) */
  521.  auto  HANDLE_WM_LBUTTONUP(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  522.     (cast(fn)(hwnd, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  523.  void  FORWARD_WM_LBUTTONUP(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  x, ARG3  y, ARG4  keyFlags, ARG5  fn) {  
  524.     cast()cast(fn)(hwnd, WM_LBUTTONUP, cast(WPARAM)cast(UINT)keyFlags, MAKELPARAM(x, y)); }
  525.  
  526. /* void Cls_OnRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
  527.  auto  HANDLE_WM_RBUTTONDOWN(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  528.     (cast(fn)(hwnd, FALSE, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  529.  void  FORWARD_WM_RBUTTONDOWN(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5,  ARG6 )(ARG1  hwnd, ARG2  fDoubleClick, ARG3  x, ARG4  y, ARG5  keyFlags, ARG6  fn) {  
  530.     cast()cast(fn)(hwnd, fDoubleClick ? WM_RBUTTONDBLCLK : WM_RBUTTONDOWN, cast(WPARAM)cast(UINT)keyFlags, MAKELPARAM(x, y)); }
  531.  
  532. /* void Cls_OnRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
  533.  auto  HANDLE_WM_RBUTTONDBLCLK(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  534.     (cast(fn)(hwnd, TRUE, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  535.  
  536. /* void Cls_OnRButtonUp(HWND hwnd, int x, int y, UINT flags) */
  537.  auto  HANDLE_WM_RBUTTONUP(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  538.     (cast(fn)(hwnd, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  539.  void  FORWARD_WM_RBUTTONUP(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  x, ARG3  y, ARG4  keyFlags, ARG5  fn) {  
  540.     cast()cast(fn)(hwnd, WM_RBUTTONUP, cast(WPARAM)cast(UINT)keyFlags, MAKELPARAM(x, y)); }
  541.  
  542. /* void Cls_OnMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
  543.  auto  HANDLE_WM_MBUTTONDOWN(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  544.     (cast(fn)(hwnd, FALSE, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  545.  void  FORWARD_WM_MBUTTONDOWN(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5,  ARG6 )(ARG1  hwnd, ARG2  fDoubleClick, ARG3  x, ARG4  y, ARG5  keyFlags, ARG6  fn) {  
  546.     cast()cast(fn)(hwnd, fDoubleClick ? WM_MBUTTONDBLCLK : WM_MBUTTONDOWN, cast(WPARAM)cast(UINT)keyFlags, MAKELPARAM(x, y)); }
  547.  
  548. /* void Cls_OnMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
  549.  auto  HANDLE_WM_MBUTTONDBLCLK(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  550.     (cast(fn)(hwnd, TRUE, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  551.  
  552. /* void Cls_OnMButtonUp(HWND hwnd, int x, int y, UINT flags) */
  553.  auto  HANDLE_WM_MBUTTONUP(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  554.     (cast(fn)(hwnd, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  555.  void  FORWARD_WM_MBUTTONUP(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  x, ARG3  y, ARG4  keyFlags, ARG5  fn) {  
  556.     cast()cast(fn)(hwnd, WM_MBUTTONUP, cast(WPARAM)cast(UINT)keyFlags, MAKELPARAM(x, y)); }
  557.  
  558. /* void Cls_OnMouseWheel(HWND hwnd, int xPos, int yPos, int zDelta, UINT fwKeys) */
  559.  auto  HANDLE_WM_MOUSEWHEEL(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  560.     (cast(fn)(hwnd, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(int)cast(short)HIWORD(wParam), cast(UINT)cast(short)LOWORD(wParam)), 0); }
  561.  void  FORWARD_WM_MOUSEWHEEL(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5,  ARG6 )(ARG1  hwnd, ARG2  xPos, ARG3  yPos, ARG4  zDelta, ARG5  fwKeys, ARG6  fn) {  
  562.     cast()cast(fn)(hwnd, WM_MOUSEWHEEL, MAKEWPARAM(fwKeys,zDelta), MAKELPARAM(xPos,yPos)); }
  563.  
  564. /* void Cls_OnNCMouseMove(HWND hwnd, int x, int y, UINT codeHitTest) */
  565.  auto  HANDLE_WM_NCMOUSEMOVE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  566.     (cast(fn)(hwnd, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  567.  void  FORWARD_WM_NCMOUSEMOVE(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  x, ARG3  y, ARG4  codeHitTest, ARG5  fn) {  
  568.     cast()cast(fn)(hwnd, WM_NCMOUSEMOVE, cast(WPARAM)cast(UINT)codeHitTest, MAKELPARAM(x, y)); }
  569.  
  570. /* void Cls_OnNCLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
  571.  auto  HANDLE_WM_NCLBUTTONDOWN(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  572.     (cast(fn)(hwnd, FALSE, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  573.  void  FORWARD_WM_NCLBUTTONDOWN(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5,  ARG6 )(ARG1  hwnd, ARG2  fDoubleClick, ARG3  x, ARG4  y, ARG5  codeHitTest, ARG6  fn) {  
  574.     cast()cast(fn)(hwnd, fDoubleClick ? WM_NCLBUTTONDBLCLK : WM_NCLBUTTONDOWN, cast(WPARAM)cast(UINT)codeHitTest, MAKELPARAM(x, y)); }
  575.  
  576. /* void Cls_OnNCLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
  577.  auto  HANDLE_WM_NCLBUTTONDBLCLK(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  578.     (cast(fn)(hwnd, TRUE, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  579.  
  580. /* void Cls_OnNCLButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */
  581.  auto  HANDLE_WM_NCLBUTTONUP(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  582.     (cast(fn)(hwnd, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  583.  void  FORWARD_WM_NCLBUTTONUP(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  x, ARG3  y, ARG4  codeHitTest, ARG5  fn) {  
  584.     cast()cast(fn)(hwnd, WM_NCLBUTTONUP, cast(WPARAM)cast(UINT)codeHitTest, MAKELPARAM(x, y)); }
  585.  
  586. /* void Cls_OnNCRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
  587.  auto  HANDLE_WM_NCRBUTTONDOWN(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  588.     (cast(fn)(hwnd, FALSE, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  589.  void  FORWARD_WM_NCRBUTTONDOWN(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5,  ARG6 )(ARG1  hwnd, ARG2  fDoubleClick, ARG3  x, ARG4  y, ARG5  codeHitTest, ARG6  fn) {  
  590.     cast()cast(fn)(hwnd, fDoubleClick ? WM_NCRBUTTONDBLCLK : WM_NCRBUTTONDOWN, cast(WPARAM)cast(UINT)codeHitTest, MAKELPARAM(x, y) ); }
  591.  
  592. /* void Cls_OnNCRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
  593.  auto  HANDLE_WM_NCRBUTTONDBLCLK(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  594.     (cast(fn)(hwnd, TRUE, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  595.  
  596. /* void Cls_OnNCRButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */
  597.  auto  HANDLE_WM_NCRBUTTONUP(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  598.     (cast(fn)(hwnd, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  599.  void  FORWARD_WM_NCRBUTTONUP(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  x, ARG3  y, ARG4  codeHitTest, ARG5  fn) {  
  600.     cast()cast(fn)(hwnd, WM_NCRBUTTONUP, cast(WPARAM)cast(UINT)codeHitTest, MAKELPARAM(x, y) ); }
  601.  
  602. /* void Cls_OnNCMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
  603.  auto  HANDLE_WM_NCMBUTTONDOWN(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  604.     (cast(fn)(hwnd, FALSE, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  605.  void  FORWARD_WM_NCMBUTTONDOWN(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5,  ARG6 )(ARG1  hwnd, ARG2  fDoubleClick, ARG3  x, ARG4  y, ARG5  codeHitTest, ARG6  fn) {  
  606.     cast()cast(fn)(hwnd, fDoubleClick ? WM_NCMBUTTONDBLCLK : WM_NCMBUTTONDOWN, cast(WPARAM)cast(UINT)codeHitTest, MAKELPARAM(x, y) ); }
  607.  
  608. /* void Cls_OnNCMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
  609.  auto  HANDLE_WM_NCMBUTTONDBLCLK(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  610.     (cast(fn)(hwnd, TRUE, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  611.  
  612. /* void Cls_OnNCMButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */
  613.  auto  HANDLE_WM_NCMBUTTONUP(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  614.     (cast(fn)(hwnd, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam), cast(UINT)wParam), 0); }
  615.  void  FORWARD_WM_NCMBUTTONUP(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  x, ARG3  y, ARG4  codeHitTest, ARG5  fn) {  
  616.     cast()cast(fn)(hwnd, WM_NCMBUTTONUP, cast(WPARAM)cast(UINT)codeHitTest, MAKELPARAM(x, y) ); }
  617.  
  618. /* int Cls_OnMouseActivate(HWND hwnd, HWND hwndTopLevel, UINT codeHitTest, UINT msg) */
  619.  auto  HANDLE_WM_MOUSEACTIVATE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  620.     cast(LRESULT)cast(DWORD)cast(int)cast(fn)(hwnd, cast(HWND)wParam, cast(UINT)LOWORD(lParam), cast(UINT)HIWORD(lParam)); }
  621.  auto  FORWARD_WM_MOUSEACTIVATE(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  hwndTopLevel, ARG3  codeHitTest, ARG4  msg, ARG5  fn) { return
  622.     cast(int)cast(DWORD)cast(fn)(hwnd, WM_MOUSEACTIVATE, cast(WPARAM)cast(HWND)hwndTopLevel, MAKELPARAM(codeHitTest, msg)); }
  623.  
  624. /* void Cls_OnCancelMode(HWND hwnd) */
  625.  auto  HANDLE_WM_CANCELMODE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  626.     (cast(fn)hwnd, 0); }
  627.  void  FORWARD_WM_CANCELMODE(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  628.     cast()cast(fn)(hwnd, WM_CANCELMODE, 0, 0); }
  629.  
  630. /* void Cls_OnTimer(HWND hwnd, UINT id) */
  631.  auto  HANDLE_WM_TIMER(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  632.     (cast(fn)(hwnd, cast(UINT)wParam), 0); }
  633.  void  FORWARD_WM_TIMER(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  id, ARG3  fn) {  
  634.     cast()cast(fn)(hwnd, WM_TIMER, cast(WPARAM)cast(UINT)id, 0); }
  635.  
  636. /* void Cls_OnInitMenu(HWND hwnd, HMENU hMenu) */
  637.  auto  HANDLE_WM_INITMENU(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  638.     (cast(fn)(hwnd, cast(HMENU)wParam), 0); }
  639.  void  FORWARD_WM_INITMENU(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  hMenu, ARG3  fn) {  
  640.     cast()cast(fn)(hwnd, WM_INITMENU, cast(WPARAM)cast(HMENU)hMenu, 0); }
  641.  
  642. /* void Cls_OnInitMenuPopup(HWND hwnd, HMENU hMenu, UINT item, BOOL fSystemMenu) */
  643.  auto  HANDLE_WM_INITMENUPOPUP(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  644.     (cast(fn)(hwnd, cast(HMENU)wParam, cast(UINT)LOWORD(lParam), cast(BOOL)HIWORD(lParam)), 0); }
  645.  void  FORWARD_WM_INITMENUPOPUP(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  hMenu, ARG3  item, ARG4  fSystemMenu, ARG5  fn) {  
  646.     cast()cast(fn)(hwnd, WM_INITMENUPOPUP, cast(WPARAM)cast(HMENU)hMenu, MAKELPARAM(item,fSystemMenu)); }
  647.  
  648. /* void Cls_OnMenuSelect(HWND hwnd, HMENU hmenu, int item, HMENU hmenuPopup, UINT flags) */
  649.  auto  HANDLE_WM_MENUSELECT(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return                  
  650.     (cast(fn)(hwnd, cast(HMENU)lParam,  
  651.     (HIWORD(wParam) & MF_POPUP) ? 0 : cast(int)(LOWORD(wParam)),          
  652.     (HIWORD(wParam) & MF_POPUP) ? GetSubMenu(cast(HMENU)lParam, LOWORD(wParam)) : 0,
  653.     cast(UINT)((cast(short)HIWORD(wParam) == -1) ? 0xFFFFFFFF : HIWORD(wParam))), 0); }
  654.  void  FORWARD_WM_MENUSELECT(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5,  ARG6 )(ARG1  hwnd, ARG2  hmenu, ARG3  item, ARG4  hmenuPopup, ARG5  flags, ARG6  fn) {  
  655.     cast()cast(fn)(hwnd, WM_MENUSELECT, MAKEWPARAM(item, flags), cast(LPARAM)cast(HMENU)(hmenu ? hmenu : hmenuPopup)); }
  656.  
  657. /* DWORD Cls_OnMenuChar(HWND hwnd, UINT ch, UINT flags, HMENU hmenu) */
  658.  auto  HANDLE_WM_MENUCHAR(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  659.     cast(LRESULT)cast(DWORD)cast(fn)(hwnd, cast(UINT)(LOWORD(wParam)), cast(UINT)HIWORD(wParam), cast(HMENU)lParam); }
  660.  auto  FORWARD_WM_MENUCHAR(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  ch, ARG3  flags, ARG4  hmenu, ARG5  fn) { return
  661.     cast(DWORD)cast(fn)(hwnd, WM_MENUCHAR, MAKEWPARAM(flags, cast(WORD)ch), cast(LPARAM)cast(HMENU)hmenu); }
  662.  
  663. /* void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) */
  664.  auto  HANDLE_WM_COMMAND(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  665.     (cast(fn)(hwnd, cast(int)(LOWORD(wParam)), cast(HWND)lParam, cast(UINT)HIWORD(wParam)), 0); }
  666.  void  FORWARD_WM_COMMAND(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  id, ARG3  hwndCtl, ARG4  codeNotify, ARG5  fn) {  
  667.     cast()cast(fn)(hwnd, WM_COMMAND, MAKEWPARAM(cast(UINT)id,cast(UINT)codeNotify), cast(LPARAM)cast(HWND)hwndCtl); }
  668.  
  669. /* void Cls_OnHScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos) */
  670.  auto  HANDLE_WM_HSCROLL(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  671.     (cast(fn)(hwnd, cast(HWND)lParam, cast(UINT)(LOWORD(wParam)), cast(int)cast(short)HIWORD(wParam)), 0); }
  672.  void  FORWARD_WM_HSCROLL(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  hwndCtl, ARG3  code, ARG4  pos, ARG5  fn) {  
  673.     cast()cast(fn)(hwnd, WM_HSCROLL, MAKEWPARAM(cast(UINT)cast(int)code,cast(UINT)cast(int)pos), cast(LPARAM)cast(HWND)hwndCtl); }
  674.  
  675. /* void Cls_OnVScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos) */
  676.  auto  HANDLE_WM_VSCROLL(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  677.     (cast(fn)(hwnd, cast(HWND)lParam, cast(UINT)(LOWORD(wParam)),  cast(int)cast(short)HIWORD(wParam)), 0); }
  678.  void  FORWARD_WM_VSCROLL(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  hwndCtl, ARG3  code, ARG4  pos, ARG5  fn) {  
  679.     cast()cast(fn)(hwnd, WM_VSCROLL, MAKEWPARAM(cast(UINT)cast(int)code, cast(UINT)cast(int)pos), cast(LPARAM)cast(HWND)hwndCtl); }
  680.  
  681. /* void Cls_OnCut(HWND hwnd) */
  682.  auto  HANDLE_WM_CUT(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  683.     (cast(fn)hwnd, 0); }
  684.  void  FORWARD_WM_CUT(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  685.     cast()cast(fn)(hwnd, WM_CUT, 0, 0); }
  686.  
  687. /* void Cls_OnCopy(HWND hwnd) */
  688.  auto  HANDLE_WM_COPY(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  689.     (cast(fn)hwnd, 0); }
  690.  void  FORWARD_WM_COPY(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  691.     cast()cast(fn)(hwnd, WM_COPY, 0, 0); }
  692.  
  693. /* void Cls_OnPaste(HWND hwnd) */
  694.  auto  HANDLE_WM_PASTE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  695.     (cast(fn)hwnd, 0); }
  696.  void  FORWARD_WM_PASTE(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  697.     cast()cast(fn)(hwnd, WM_PASTE, 0, 0); }
  698.  
  699. /* void Cls_OnClear(HWND hwnd) */
  700.  auto  HANDLE_WM_CLEAR(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  701.     (cast(fn)hwnd, 0); }
  702.  void  FORWARD_WM_CLEAR(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  703.     cast()cast(fn)(hwnd, WM_CLEAR, 0, 0); }
  704.  
  705. /* void Cls_OnUndo(HWND hwnd) */
  706.  auto  HANDLE_WM_UNDO(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  707.     (cast(fn)hwnd, 0); }
  708.  void  FORWARD_WM_UNDO(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  709.     cast()cast(fn)(hwnd, WM_UNDO, 0, 0); }
  710.  
  711. /* HANDLE Cls_OnRenderFormat(HWND hwnd, UINT fmt) */
  712.  auto  HANDLE_WM_RENDERFORMAT(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  713.     cast(LRESULT)cast(UINT_PTR)cast(HANDLE)cast(fn)(hwnd, cast(UINT)wParam); }
  714.  auto  FORWARD_WM_RENDERFORMAT(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  fmt, ARG3  fn) { return
  715.     cast(HANDLE)cast(UINT_PTR)cast(fn)(hwnd, WM_RENDERFORMAT, cast(WPARAM)cast(UINT)fmt, 0); }
  716.  
  717. /* void Cls_OnRenderAllFormats(HWND hwnd) */
  718.  auto  HANDLE_WM_RENDERALLFORMATS(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  719.     (cast(fn)hwnd, 0); }
  720.  void  FORWARD_WM_RENDERALLFORMATS(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  721.     cast()cast(fn)(hwnd, WM_RENDERALLFORMATS, 0, 0); }
  722.  
  723. /* void Cls_OnDestroyClipboard(HWND hwnd) */
  724.  auto  HANDLE_WM_DESTROYCLIPBOARD(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  725.     (cast(fn)hwnd, 0); }
  726.  void  FORWARD_WM_DESTROYCLIPBOARD(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  727.     cast()cast(fn)(hwnd, WM_DESTROYCLIPBOARD, 0, 0); }
  728.  
  729. /* void Cls_OnDrawClipboard(HWND hwnd) */
  730.  auto  HANDLE_WM_DRAWCLIPBOARD(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  731.     (cast(fn)hwnd, 0); }
  732.  void  FORWARD_WM_DRAWCLIPBOARD(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  733.     cast()cast(fn)(hwnd, WM_DRAWCLIPBOARD, 0, 0); }
  734.  
  735. /* void Cls_OnPaintClipboard(HWND hwnd, HWND hwndCBViewer, const LPPAINTSTRUCT lpPaintStruct) */
  736.  void  HANDLE_WM_PAINTCLIPBOARD(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) {  
  737.     (cast(fn)(hwnd, cast(HWND)wParam, cast(const  LPPAINTSTRUCT)GlobalLock(cast(HGLOBAL)lParam)), GlobalUnlock(cast(HGLOBAL)lParam), 0); }
  738.  void  FORWARD_WM_PAINTCLIPBOARD(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  hwndCBViewer, ARG3  lpPaintStruct, ARG4  fn) {  
  739.     cast()cast(fn)(hwnd, WM_PAINTCLIPBOARD, cast(WPARAM)cast(HWND)hwndCBViewer, cast(LPARAM)cast(LPPAINTSTRUCT)lpPaintStruct); }
  740.  
  741. /* void Cls_OnSizeClipboard(HWND hwnd, HWND hwndCBViewer, const LPRECT lprc) */
  742.  void  HANDLE_WM_SIZECLIPBOARD(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) {  
  743.     (cast(fn)(hwnd, cast(HWND)wParam, cast(const  LPRECT)GlobalLock(cast(HGLOBAL)lParam)), GlobalUnlock(cast(HGLOBAL)lParam), 0); }
  744.  void  FORWARD_WM_SIZECLIPBOARD(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  hwndCBViewer, ARG3  lprc, ARG4  fn) {  
  745.     cast()cast(fn)(hwnd, WM_SIZECLIPBOARD, cast(WPARAM)cast(HWND)hwndCBViewer, cast(LPARAM)cast(LPRECT)lprc); }
  746.  
  747. /* void Cls_OnVScrollClipboard(HWND hwnd, HWND hwndCBViewer, UINT code, int pos) */
  748.  auto  HANDLE_WM_VSCROLLCLIPBOARD(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  749.     (cast(fn)(hwnd, cast(HWND)wParam, cast(UINT)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam)), 0); }
  750.  void  FORWARD_WM_VSCROLLCLIPBOARD(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  hwndCBViewer, ARG3  code, ARG4  pos, ARG5  fn) {  
  751.     cast()cast(fn)(hwnd, WM_VSCROLLCLIPBOARD, cast(WPARAM)cast(HWND)hwndCBViewer, MAKELPARAM(code, pos)); }
  752.  
  753. /* void Cls_OnHScrollClipboard(HWND hwnd, HWND hwndCBViewer, UINT code, int pos) */
  754.  auto  HANDLE_WM_HSCROLLCLIPBOARD(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  755.     (cast(fn)(hwnd, cast(HWND)wParam, cast(UINT)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam)), 0); }
  756.  void  FORWARD_WM_HSCROLLCLIPBOARD(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  hwndCBViewer, ARG3  code, ARG4  pos, ARG5  fn) {  
  757.     cast()cast(fn)(hwnd, WM_HSCROLLCLIPBOARD, cast(WPARAM)cast(HWND)hwndCBViewer, MAKELPARAM(code, pos)); }
  758.  
  759. /* void Cls_OnAskCBFormatName(HWND hwnd, int cchMax, LPTSTR rgchName) */
  760.  auto  HANDLE_WM_ASKCBFORMATNAME(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  761.     (cast(fn)(hwnd, cast(int)wParam, cast(LPTSTR)lParam), 0); }
  762.  void  FORWARD_WM_ASKCBFORMATNAME(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  cchMax, ARG3  rgchName, ARG4  fn) {  
  763.     cast()cast(fn)(hwnd, WM_ASKCBFORMATNAME, cast(WPARAM)cast(int)cchMax, cast(LPARAM)rgchName); }
  764.  
  765. /* void Cls_OnChangeCBChain(HWND hwnd, HWND hwndRemove, HWND hwndNext) */
  766.  auto  HANDLE_WM_CHANGECBCHAIN(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  767.     (cast(fn)(hwnd, cast(HWND)wParam, cast(HWND)lParam), 0); }
  768.  void  FORWARD_WM_CHANGECBCHAIN(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  hwndRemove, ARG3  hwndNext, ARG4  fn) {  
  769.     cast()cast(fn)(hwnd, WM_CHANGECBCHAIN, cast(WPARAM)cast(HWND)hwndRemove, cast(LPARAM)cast(HWND)hwndNext); }
  770.  
  771. /* BOOL Cls_OnSetCursor(HWND hwnd, HWND hwndCursor, UINT codeHitTest, UINT msg) */
  772.  auto  HANDLE_WM_SETCURSOR(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  773.     cast(LRESULT)cast(DWORD)cast(BOOL)cast(fn)(hwnd, cast(HWND)wParam, cast(UINT)LOWORD(lParam), cast(UINT)HIWORD(lParam)); }
  774.  auto  FORWARD_WM_SETCURSOR(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  hwndCursor, ARG3  codeHitTest, ARG4  msg, ARG5  fn) { return
  775.     cast(BOOL)cast(DWORD)cast(fn)(hwnd, WM_SETCURSOR, cast(WPARAM)cast(HWND)hwndCursor, MAKELPARAM(codeHitTest, msg)); }
  776.  
  777. /* void Cls_OnSysCommand(HWND hwnd, UINT cmd, int x, int y) */
  778.  auto  HANDLE_WM_SYSCOMMAND(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  779.     (cast(fn)(hwnd, cast(UINT)wParam, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam)), 0); }
  780.  void  FORWARD_WM_SYSCOMMAND(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  cmd, ARG3  x, ARG4  y, ARG5  fn) {  
  781.     cast()cast(fn)(hwnd, WM_SYSCOMMAND, cast(WPARAM)cast(UINT)cmd, MAKELPARAM(x, y)); }
  782.  
  783. /* HWND Cls_MDICreate(HWND hwnd, const LPMDICREATESTRUCT lpmcs) */
  784.  auto  HANDLE_WM_MDICREATE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  785.     cast(LRESULT)cast(DWORD)cast(UINT)cast(fn)(hwnd, cast(LPMDICREATESTRUCT)lParam); }
  786.  auto  FORWARD_WM_MDICREATE(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  lpmcs, ARG3  fn) { return
  787.     cast(HWND)cast(UINT)cast(DWORD)cast(fn)(hwnd, WM_MDICREATE, 0, cast(LPARAM)cast(LPMDICREATESTRUCT)lpmcs); }
  788.  
  789. /* void Cls_MDIDestroy(HWND hwnd, HWND hwndDestroy) */
  790.  auto  HANDLE_WM_MDIDESTROY(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  791.     (cast(fn)(hwnd, cast(HWND)wParam), 0); }
  792.  void  FORWARD_WM_MDIDESTROY(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  hwndDestroy, ARG3  fn) {  
  793.     cast()cast(fn)(hwnd, WM_MDIDESTROY, cast(WPARAM)hwndDestroy, 0); }
  794.  
  795. /* NOTE: Usable only by MDI client windows */
  796. /* void Cls_MDIActivate(HWND hwnd, BOOL fActive, HWND hwndActivate, HWND hwndDeactivate) */
  797.  auto  HANDLE_WM_MDIACTIVATE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  798.     (cast(fn)(hwnd, cast(BOOL)(lParam == cast(LPARAM)hwnd), cast(HWND)lParam, cast(HWND)wParam), 0); }
  799.  void  FORWARD_WM_MDIACTIVATE(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  fActive, ARG3  hwndActivate, ARG4  hwndDeactivate, ARG5  fn) {  
  800.     cast()cast(fn)(hwnd, WM_MDIACTIVATE, cast(WPARAM)hwndDeactivate, cast(LPARAM)hwndActivate); }
  801.  
  802. /* void Cls_MDIRestore(HWND hwnd, HWND hwndRestore) */
  803.  auto  HANDLE_WM_MDIRESTORE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  804.     (cast(fn)(hwnd, cast(HWND)wParam), 0); }
  805.  void  FORWARD_WM_MDIRESTORE(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  hwndRestore, ARG3  fn) {  
  806.     cast()cast(fn)(hwnd, WM_MDIRESTORE, cast(WPARAM)hwndRestore, 0); }
  807.  
  808. /* HWND Cls_MDINext(HWND hwnd, HWND hwndCur, BOOL fPrev) */
  809.  auto  HANDLE_WM_MDINEXT(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  810.     cast(LRESULT)cast(HWND)cast(fn)(hwnd, cast(HWND)wParam, cast(BOOL)lParam); }
  811.  auto  FORWARD_WM_MDINEXT(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  hwndCur, ARG3  fPrev, ARG4  fn) { return
  812.     cast(HWND)cast(UINT_PTR)cast(fn)(hwnd, WM_MDINEXT, cast(WPARAM)hwndCur, cast(LPARAM)fPrev); }
  813.  
  814. /* void Cls_MDIMaximize(HWND hwnd, HWND hwndMaximize) */
  815.  auto  HANDLE_WM_MDIMAXIMIZE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  816.     (cast(fn)(hwnd, cast(HWND)wParam), 0); }
  817.  void  FORWARD_WM_MDIMAXIMIZE(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  hwndMaximize, ARG3  fn) {  
  818.     cast()cast(fn)(hwnd, WM_MDIMAXIMIZE, cast(WPARAM)hwndMaximize, 0); }
  819.  
  820. /* BOOL Cls_MDITile(HWND hwnd, UINT cmd) */
  821.  auto  HANDLE_WM_MDITILE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  822.     cast(LRESULT)cast(DWORD)cast(fn)(hwnd, cast(UINT)wParam); }
  823.  auto  FORWARD_WM_MDITILE(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  cmd, ARG3  fn) { return
  824.     cast(BOOL)cast(DWORD)cast(fn)(hwnd, WM_MDITILE, cast(WPARAM)cmd, 0); }
  825.  
  826. /* BOOL Cls_MDICascade(HWND hwnd, UINT cmd) */
  827.  auto  HANDLE_WM_MDICASCADE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  828.     cast(LRESULT)cast(DWORD)cast(fn)(hwnd, cast(UINT)wParam); }
  829.  auto  FORWARD_WM_MDICASCADE(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  cmd, ARG3  fn) { return
  830.     cast(BOOL)cast(DWORD)cast(fn)(hwnd, WM_MDICASCADE, cast(WPARAM)cmd, 0); }
  831.  
  832. /* void Cls_MDIIconArrange(HWND hwnd) */
  833.  auto  HANDLE_WM_MDIICONARRANGE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  834.     (cast(fn)hwnd, 0); }
  835.  void  FORWARD_WM_MDIICONARRANGE(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  836.     cast()cast(fn)(hwnd, WM_MDIICONARRANGE, 0, 0); }
  837.  
  838. /* HWND Cls_MDIGetActive(HWND hwnd) */
  839.  auto  HANDLE_WM_MDIGETACTIVE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  840.     cast(LRESULT)cast(UINT_PTR)cast(fn)hwnd; }
  841.  auto  FORWARD_WM_MDIGETACTIVE(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) { return
  842.     cast(HWND)cast(UINT_PTR)cast(fn)(hwnd, WM_MDIGETACTIVE, 0, 0); }
  843.  
  844. /* HMENU Cls_MDISetMenu(HWND hwnd, BOOL fRefresh, HMENU hmenuFrame, HMENU hmenuWindow) */
  845.  auto  HANDLE_WM_MDISETMENU(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  846.     cast(LRESULT)cast(UINT_PTR)cast(fn)(hwnd, cast(BOOL)wParam, cast(HMENU)wParam, cast(HMENU)lParam); }
  847.  auto  FORWARD_WM_MDISETMENU(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  fRefresh, ARG3  hmenuFrame, ARG4  hmenuWindow, ARG5  fn) { return
  848.     cast(HMENU)cast(UINT_PTR)cast(fn)(hwnd, WM_MDISETMENU, cast(WPARAM)(fRefresh ? hmenuFrame : 0), cast(LPARAM)hmenuWindow); }
  849.  
  850. /* void Cls_OnChildActivate(HWND hwnd) */
  851.  auto  HANDLE_WM_CHILDACTIVATE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  852.     (cast(fn)hwnd, 0); }
  853.  void  FORWARD_WM_CHILDACTIVATE(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  854.     cast()cast(fn)(hwnd, WM_CHILDACTIVATE, 0, 0); }
  855.  
  856. /* BOOL Cls_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) */
  857.  auto  HANDLE_WM_INITDIALOG(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  858.     cast(LRESULT)cast(DWORD)cast(UINT)cast(BOOL)cast(fn)(hwnd, cast(HWND)wParam, lParam); }
  859.  auto  FORWARD_WM_INITDIALOG(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  hwndFocus, ARG3  lParam, ARG4  fn) { return
  860.     cast(BOOL)cast(DWORD)cast(fn)(hwnd, WM_INITDIALOG, cast(WPARAM)cast(HWND)hwndFocus, lParam); }
  861.  
  862. /* HWND Cls_OnNextDlgCtl(HWND hwnd, HWND hwndSetFocus, BOOL fNext) */
  863.  auto  HANDLE_WM_NEXTDLGCTL(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  864.     cast(LRESULT)cast(UINT_PTR)cast(HWND)cast(fn)(hwnd, cast(HWND)wParam, cast(BOOL)lParam); }
  865.  auto  FORWARD_WM_NEXTDLGCTL(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  hwndSetFocus, ARG3  fNext, ARG4  fn) { return
  866.     cast(HWND)cast(UINT_PTR)cast(fn)(hwnd, WM_NEXTDLGCTL, cast(WPARAM)cast(HWND)hwndSetFocus, cast(LPARAM)fNext); }
  867.  
  868. /* void Cls_OnParentNotify(HWND hwnd, UINT msg, HWND hwndChild, int idChild) */
  869.  auto  HANDLE_WM_PARENTNOTIFY(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  870.     (cast(fn)(hwnd, cast(UINT)LOWORD(wParam), cast(HWND)lParam, cast(UINT)HIWORD(wParam)), 0); }
  871.  void  FORWARD_WM_PARENTNOTIFY(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  msg, ARG3  hwndChild, ARG4  idChild, ARG5  fn) {  
  872.     cast()cast(fn)(hwnd, WM_PARENTNOTIFY, MAKEWPARAM(msg, idChild), cast(LPARAM)hwndChild); }
  873.  
  874. /* void Cls_OnEnterIdle(HWND hwnd, UINT source, HWND hwndSource) */
  875.  auto  HANDLE_WM_ENTERIDLE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  876.     (cast(fn)(hwnd, cast(UINT)wParam, cast(HWND)lParam), 0); }
  877.  void  FORWARD_WM_ENTERIDLE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  source, ARG3  hwndSource, ARG4  fn) {  
  878.     cast()cast(fn)(hwnd, WM_ENTERIDLE, cast(WPARAM)cast(UINT)source, cast(LPARAM)cast(HWND)hwndSource); }
  879.  
  880. /* UINT Cls_OnGetDlgCode(HWND hwnd, LPMSG lpmsg) */
  881.  auto  HANDLE_WM_GETDLGCODE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  882.     cast(LRESULT)cast(DWORD)cast(UINT)cast(fn)(hwnd, cast(LPMSG)lParam); }
  883.  void  FORWARD_WM_GETDLGCODE(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  lpmsg, ARG3  fn) {  
  884.     cast(UINT)cast(DWORD)cast(fn)(hwnd, WM_GETDLGCODE, (lpmsg ? lpmsg.wParam : 0), cast(LPARAM)cast(LPMSG)lpmsg); }
  885.  
  886. /* HBRUSH Cls_OnCtlColor(HWND hwnd, HDC hdc, HWND hwndChild, int type) */
  887.  auto  HANDLE_WM_CTLCOLORMSGBOX(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  888.     cast(LRESULT)cast(UINT_PTR)cast(HBRUSH)cast(fn)(hwnd, cast(HDC)wParam, cast(HWND)lParam, CTLCOLOR_MSGBOX); }
  889.  auto  FORWARD_WM_CTLCOLORMSGBOX(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  hdc, ARG3  hwndChild, ARG4  fn) { return
  890.     cast(HBRUSH)cast(UINT_PTR)cast(fn)(hwnd, WM_CTLCOLORMSGBOX, cast(WPARAM)cast(HDC)hdc, cast(LPARAM)cast(HWND)hwndChild); }
  891.  
  892.  auto  HANDLE_WM_CTLCOLOREDIT(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  893.     cast(LRESULT)cast(UINT_PTR)cast(HBRUSH)cast(fn)(hwnd, cast(HDC)wParam, cast(HWND)lParam, CTLCOLOR_EDIT); }
  894.  auto  FORWARD_WM_CTLCOLOREDIT(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  hdc, ARG3  hwndChild, ARG4  fn) { return
  895.     cast(HBRUSH)cast(UINT_PTR)cast(fn)(hwnd, WM_CTLCOLOREDIT, cast(WPARAM)cast(HDC)hdc, cast(LPARAM)cast(HWND)hwndChild); }
  896.  
  897.  auto  HANDLE_WM_CTLCOLORLISTBOX(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  898.     cast(LRESULT)cast(UINT_PTR)cast(HBRUSH)cast(fn)(hwnd, cast(HDC)wParam, cast(HWND)lParam, CTLCOLOR_LISTBOX); }
  899.  auto  FORWARD_WM_CTLCOLORLISTBOX(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  hdc, ARG3  hwndChild, ARG4  fn) { return
  900.     cast(HBRUSH)cast(UINT_PTR)cast(fn)(hwnd, WM_CTLCOLORLISTBOX, cast(WPARAM)cast(HDC)hdc, cast(LPARAM)cast(HWND)hwndChild); }
  901.  
  902.  auto  HANDLE_WM_CTLCOLORBTN(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  903.     cast(LRESULT)cast(UINT_PTR)cast(HBRUSH)cast(fn)(hwnd, cast(HDC)wParam, cast(HWND)lParam, CTLCOLOR_BTN); }
  904.  auto  FORWARD_WM_CTLCOLORBTN(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  hdc, ARG3  hwndChild, ARG4  fn) { return
  905.     cast(HBRUSH)cast(UINT_PTR)cast(fn)(hwnd, WM_CTLCOLORBTN, cast(WPARAM)cast(HDC)hdc, cast(LPARAM)cast(HWND)hwndChild); }
  906.  
  907.  auto  HANDLE_WM_CTLCOLORDLG(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  908.     cast(LRESULT)cast(UINT_PTR)cast(HBRUSH)cast(fn)(hwnd, cast(HDC)wParam, cast(HWND)lParam, CTLCOLOR_DLG); }
  909.  auto  FORWARD_WM_CTLCOLORDLG(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  hdc, ARG3  hwndChild, ARG4  fn) { return
  910.     cast(HBRUSH)cast(UINT_PTR)cast(fn)(hwnd, WM_CTLCOLORDLG, cast(WPARAM)cast(HDC)hdc, cast(LPARAM)cast(HWND)hwndChild); }
  911.  
  912.  auto  HANDLE_WM_CTLCOLORSCROLLBAR(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  913.     cast(LRESULT)cast(UINT_PTR)cast(HBRUSH)cast(fn)(hwnd, cast(HDC)wParam, cast(HWND)lParam, CTLCOLOR_SCROLLBAR); }
  914.  auto  FORWARD_WM_CTLCOLORSCROLLBAR(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  hdc, ARG3  hwndChild, ARG4  fn) { return
  915.     cast(HBRUSH)cast(UINT_PTR)cast(fn)(hwnd, WM_CTLCOLORSCROLLBAR, cast(WPARAM)cast(HDC)hdc, cast(LPARAM)cast(HWND)hwndChild); }
  916.  
  917.  auto  HANDLE_WM_CTLCOLORSTATIC(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  918.     cast(LRESULT)cast(UINT_PTR)cast(HBRUSH)cast(fn)(hwnd, cast(HDC)wParam, cast(HWND)lParam, CTLCOLOR_STATIC); }
  919.  auto  FORWARD_WM_CTLCOLORSTATIC(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  hdc, ARG3  hwndChild, ARG4  fn) { return
  920.     cast(HBRUSH)cast(UINT_PTR)cast(fn)(hwnd, WM_CTLCOLORSTATIC, cast(WPARAM)cast(HDC)hdc, cast(LPARAM)cast(HWND)hwndChild); }
  921.  
  922. /* void Cls_OnSetFont(HWND hwndCtl, HFONT hfont, BOOL fRedraw) */
  923.  auto  HANDLE_WM_SETFONT(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  924.     (cast(fn)(hwnd, cast(HFONT)wParam, cast(BOOL)lParam), 0); }
  925.  void  FORWARD_WM_SETFONT(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  hfont, ARG3  fRedraw, ARG4  fn) {  
  926.     cast()cast(fn)(hwnd, WM_SETFONT, cast(WPARAM)cast(HFONT)hfont, cast(LPARAM)cast(BOOL)fRedraw); }
  927.  
  928. /* HFONT Cls_OnGetFont(HWND hwnd) */
  929.  auto  HANDLE_WM_GETFONT(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  930.     cast(LRESULT)cast(UINT_PTR)cast(HFONT)cast(fn)hwnd; }
  931.  auto  FORWARD_WM_GETFONT(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) { return
  932.     cast(HFONT)cast(UINT_PTR)cast(fn)(hwnd, WM_GETFONT, 0, 0); }
  933.  
  934. /* void Cls_OnDrawItem(HWND hwnd, const DRAWITEMSTRUCT * lpDrawItem) */
  935.  void  HANDLE_WM_DRAWITEM(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) {  
  936.     (cast(fn)(hwnd, cast(const  DRAWITEMSTRUCT *)lParam), 0); }
  937.  void  FORWARD_WM_DRAWITEM(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  lpDrawItem, ARG3  fn) {  
  938.     cast()cast(fn)(hwnd, WM_DRAWITEM, cast(WPARAM)((cast(const  DRAWITEMSTRUCT *)lpDrawItem).CtlID), cast(LPARAM)cast(const  DRAWITEMSTRUCT *)lpDrawItem); }
  939.  
  940. /* void Cls_OnMeasureItem(HWND hwnd, MEASUREITEMSTRUCT * lpMeasureItem) */
  941.  auto  HANDLE_WM_MEASUREITEM(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  942.     (cast(fn)(hwnd, cast(MEASUREITEMSTRUCT *)lParam), 0); }
  943.  void  FORWARD_WM_MEASUREITEM(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  lpMeasureItem, ARG3  fn) {  
  944.     cast()cast(fn)(hwnd, WM_MEASUREITEM, cast(WPARAM)((cast(MEASUREITEMSTRUCT *)lpMeasureItem).CtlID), cast(LPARAM)cast(MEASUREITEMSTRUCT *)lpMeasureItem); }
  945.  
  946. /* void Cls_OnDeleteItem(HWND hwnd, const DELETEITEMSTRUCT * lpDeleteItem) */
  947.  void  HANDLE_WM_DELETEITEM(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) {  
  948.     (cast(fn)(hwnd, cast(const  DELETEITEMSTRUCT *)lParam), 0); }
  949.  void  FORWARD_WM_DELETEITEM(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  lpDeleteItem, ARG3  fn) {  
  950.     cast()cast(fn)(hwnd, WM_DELETEITEM, cast(WPARAM)((cast(const  DELETEITEMSTRUCT *)lpDeleteItem).CtlID), cast(LPARAM)cast(const  DELETEITEMSTRUCT *)lpDeleteItem); }
  951.  
  952. /* int Cls_OnCompareItem(HWND hwnd, const COMPAREITEMSTRUCT * lpCompareItem) */
  953.  void  HANDLE_WM_COMPAREITEM(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) {  
  954.     cast(LRESULT)cast(DWORD)cast(int)cast(fn)(hwnd, cast(const  COMPAREITEMSTRUCT *)lParam); }
  955.  void  FORWARD_WM_COMPAREITEM(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  lpCompareItem, ARG3  fn) {  
  956.     cast(int)cast(DWORD)cast(fn)(hwnd, WM_COMPAREITEM, cast(WPARAM)((cast(const  COMPAREITEMSTRUCT *)lpCompareItem).CtlID), cast(LPARAM)cast(const  COMPAREITEMSTRUCT *)lpCompareItem); }
  957.  
  958. /* int Cls_OnVkeyToItem(HWND hwnd, UINT vk, HWND hwndListbox, int iCaret) */
  959.  auto  HANDLE_WM_VKEYTOITEM(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  960.     cast(LRESULT)cast(DWORD)cast(int)cast(fn)(hwnd, cast(UINT)LOWORD(wParam), cast(HWND)lParam, cast(int)cast(short)HIWORD(wParam)); }
  961.  auto  FORWARD_WM_VKEYTOITEM(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  vk, ARG3  hwndListBox, ARG4  iCaret, ARG5  fn) { return
  962.     cast(int)cast(DWORD)cast(fn)(hwnd, WM_VKEYTOITEM, MAKEWPARAM(vk, iCaret), cast(LPARAM)hwndListBox); }
  963.  
  964. /* int Cls_OnCharToItem(HWND hwnd, UINT ch, HWND hwndListbox, int iCaret) */
  965.  auto  HANDLE_WM_CHARTOITEM(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  966.     cast(LRESULT)cast(DWORD)cast(int)cast(fn)(hwnd, cast(UINT)LOWORD(wParam), cast(HWND)lParam, cast(int)cast(short)HIWORD(wParam)); }
  967.  auto  FORWARD_WM_CHARTOITEM(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  ch, ARG3  hwndListBox, ARG4  iCaret, ARG5  fn) { return
  968.     cast(int)cast(DWORD)cast(fn)(hwnd, WM_CHARTOITEM, MAKEWPARAM(cast(UINT)ch, cast(UINT)iCaret), cast(LPARAM)hwndListBox); }
  969.  
  970. /* void Cls_OnQueueSync(HWND hwnd) */
  971.  auto  HANDLE_WM_QUEUESYNC(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  972.     (cast(fn)hwnd, 0); }
  973.  void  FORWARD_WM_QUEUESYNC(  ARG1,  ARG2 )(ARG1  hwnd, ARG2  fn) {  
  974.     cast()cast(fn)(hwnd, WM_QUEUESYNC, 0, 0); }
  975. static if((WINVER >= 0x030a)) {
  976. /* void Cls_OnCommNotify(HWND hwnd, int cid, UINT flags) */
  977.  auto  HANDLE_WM_COMMNOTIFY(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  978.     (cast(fn)(hwnd, cast(int)wParam, cast(UINT)LOWORD(lParam)), 0); }
  979.  void  FORWARD_WM_COMMNOTIFY(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  cid, ARG3  flags, ARG4  fn) {  
  980.     cast()cast(fn)(hwnd, WM_COMMNOTIFY, cast(WPARAM)cid, MAKELPARAM(flags, 0)); }
  981. }
  982.  
  983. /* void Cls_OnDisplayChange(HWND hwnd, UINT bitsPerPixel, UINT cxScreen, UINT cyScreen) */
  984.  auto  HANDLE_WM_DISPLAYCHANGE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  985.     (cast(fn)(hwnd, cast(UINT)wParam, cast(UINT)LOWORD(lParam), cast(UINT)HIWORD(lParam)), 0); }
  986.  void  FORWARD_WM_DISPLAYCHANGE(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  bitsPerPixel, ARG3  cxScreen, ARG4  cyScreen, ARG5  fn) {  
  987.     cast()cast(fn)(hwnd, WM_DISPLAYCHANGE, cast(WPARAM)cast(UINT)bitsPerPixel, cast(LPARAM)MAKELPARAM(cast(UINT)cxScreen, cast(UINT)cyScreen)); }
  988.  
  989. /* BOOL Cls_OnDeviceChange(HWND hwnd, UINT uEvent, DWORD dwEventData) */
  990.  auto  HANDLE_WM_DEVICECHANGE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  991.     cast(LRESULT)cast(DWORD)cast(BOOL)cast(fn)(hwnd, cast(UINT)wParam, cast(DWORD)lParam); }
  992.  auto  FORWARD_WM_DEVICECHANGE(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  uEvent, ARG3  dwEventData, ARG4  fn) { return
  993.     cast(BOOL)cast(DWORD)cast(fn)(hwnd, WM_DEVICECHANGE, cast(WPARAM)cast(UINT)uEvent, cast(LPARAM)cast(DWORD)dwEventData); }
  994.  
  995. /* void Cls_OnContextMenu(HWND hwnd, HWND hwndContext, UINT xPos, UINT yPos) */
  996.  auto  HANDLE_WM_CONTEXTMENU(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  997.     (cast(fn)(hwnd, cast(HWND)wParam, cast(int)cast(short)LOWORD(lParam), cast(int)cast(short)HIWORD(lParam)), 0); }
  998.  void  FORWARD_WM_CONTEXTMENU(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  hwndContext, ARG3  xPos, ARG4  yPos, ARG5  fn) {  
  999.     cast()cast(fn)(hwnd, WM_CONTEXTMENU, cast(WPARAM)cast(HWND)hwndContext, MAKELPARAM(cast(UINT)xPos, cast(UINT)yPos)); }
  1000.  
  1001.  auto  HANDLE_WM_COPYDATA(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  1002.     (cast(fn)(hwnd, cast(HWND)wParam, cast(PCOPYDATASTRUCT)lParam), 0); }
  1003.  auto  FORWARD_WM_COPYDATA(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  hwndFrom, ARG3  pcds, ARG4  fn) { return
  1004.     cast(BOOL)cast(UINT)cast(DWORD)cast(fn)(hwnd, WM_COPYDATA, cast(WPARAM)hwndFrom, cast(LPARAM)pcds); }
  1005.  
  1006. /* void Cls_OnHotKey(HWND hwnd, int idHotKey, UINT fuModifiers, UINT vk) */
  1007.  auto  HANDLE_WM_HOTKEY(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwnd, ARG2  wParam, ARG3  lParam, ARG4  fn) { return
  1008.     (cast(fn)(hwnd, cast(int)wParam, cast(UINT)LOWORD(lParam), cast(UINT)HIWORD(lParam)), 0); }
  1009.  void  FORWARD_WM_HOTKEY(  ARG1,  ARG2,  ARG3,  ARG4,  ARG5 )(ARG1  hwnd, ARG2  idHotKey, ARG3  fuModifiers, ARG4  vk, ARG5  fn) {  
  1010.     cast()cast(fn)(hwnd, WM_HOTKEY, cast(WPARAM)idHotKey, MAKELPARAM(fuModifiers, vk)); }
  1011.  
  1012. /****** Static control message APIs ******************************************/
  1013.  
  1014.  auto  Static_Enable(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  fEnable) { return          EnableWindow(hwndCtl, fEnable); }
  1015.  
  1016.  auto  Static_GetText(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  lpch, ARG3  cchMax) { return    GetWindowText(hwndCtl, lpch, cchMax); }
  1017.  auto  Static_GetTextLength(  ARG1 )(ARG1  hwndCtl) { return            GetWindowTextLength(hwndCtl); }
  1018.  auto  Static_SetText(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  lpsz) { return            SetWindowText(hwndCtl, lpsz); }
  1019.  
  1020.  auto  Static_SetIcon(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  hIcon) { return          (cast(HICON)cast(UINT_PTR)SNDMSG(hwndCtl, STM_SETICON, cast(WPARAM)cast(HICON)hIcon, 0)); }
  1021.  auto  Static_GetIcon(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  hIcon) { return          (cast(HICON)cast(UINT_PTR)SNDMSG(hwndCtl, STM_GETICON, 0, 0)); }
  1022.  
  1023. /****** Button control message APIs ******************************************/
  1024.  
  1025.  auto  Button_Enable(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  fEnable) { return          EnableWindow(hwndCtl, fEnable); }
  1026.  
  1027.  auto  Button_GetText(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  lpch, ARG3  cchMax) { return    GetWindowText(hwndCtl, lpch, cchMax); }
  1028.  auto  Button_GetTextLength(  ARG1 )(ARG1  hwndCtl) { return            GetWindowTextLength(hwndCtl); }
  1029.  auto  Button_SetText(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  lpsz) { return            SetWindowText(hwndCtl, lpsz); }
  1030.  
  1031.  auto  Button_GetCheck(  ARG1 )(ARG1  hwndCtl) { return            (cast(int)cast(DWORD)SNDMSG(hwndCtl, BM_GETCHECK, 0, 0)); }
  1032.  void  Button_SetCheck(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  check) {      (cast()SNDMSG(hwndCtl, BM_SETCHECK, cast(WPARAM)cast(int)check, 0)); }
  1033.  
  1034.  auto  Button_GetState(  ARG1 )(ARG1  hwndCtl) { return            (cast(int)cast(DWORD)SNDMSG(hwndCtl, BM_GETSTATE, 0, 0)); }
  1035.  auto  Button_SetState(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  state) { return     (cast(UINT)cast(DWORD)SNDMSG(hwndCtl, BM_SETSTATE, cast(WPARAM)cast(int)state, 0)); }
  1036.  
  1037.  void  Button_SetStyle(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  style, ARG3  fRedraw) {  (cast()SNDMSG(hwndCtl, BM_SETSTYLE, cast(WPARAM)LOWORD(style), MAKELPARAM((fRedraw ? TRUE : FALSE), 0))); }
  1038.  
  1039. /****** Edit control message APIs ********************************************/
  1040.  
  1041.  auto  Edit_Enable(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  fEnable) { return            EnableWindow(hwndCtl, fEnable); }
  1042.  
  1043.  auto  Edit_GetText(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  lpch, ARG3  cchMax) { return      GetWindowText(hwndCtl, lpch, cchMax); }
  1044.  auto  Edit_GetTextLength(  ARG1 )(ARG1  hwndCtl) { return              GetWindowTextLength(hwndCtl); }
  1045.  auto  Edit_SetText(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  lpsz) { return              SetWindowText(hwndCtl, lpsz); }
  1046.  
  1047.  void  Edit_LimitText(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  cchMax) {          (cast()SNDMSG(hwndCtl, EM_LIMITTEXT, cast(WPARAM)cchMax, 0)); }
  1048.  
  1049.  auto  Edit_GetLineCount(  ARG1 )(ARG1  hwndCtl) { return              (cast(int)cast(DWORD)SNDMSG(hwndCtl, EM_GETLINECOUNT, 0, 0)); }
  1050. static if(!_MAC) {
  1051.  auto  Edit_GetLine(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwndCtl, ARG2  line, ARG3  lpch, ARG4  cchMax) { return ((*(cast(int *)lpch) = cchMax), (cast(int)cast(DWORD)SNDMSG(hwndCtl, EM_GETLINE, cast(WPARAM)cast(int)line, cast(LPARAM)cast(LPTSTR)lpch))); }
  1052. } else {
  1053.  auto  Edit_GetLine(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwndCtl, ARG2  line, ARG3  lpch, ARG4  cchMax) { return ((*(cast(WORD *)lpch) = cchMax), (cast(int)cast(DWORD)SNDMSG(hwndCtl, EM_GETLINE, cast(WPARAM)cast(int)line, cast(LPARAM)cast(LPTSTR)lpch))); }
  1054. }
  1055.  
  1056.  void  Edit_GetRect(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  lprc) {              (cast()SNDMSG(hwndCtl, EM_GETRECT, 0, cast(LPARAM)cast(RECT *)lprc)); }
  1057.  void  Edit_SetRect(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  lprc) {              (cast()SNDMSG(hwndCtl, EM_SETRECT, 0, cast(LPARAM)cast(const  RECT *)lprc)); }
  1058.  void  Edit_SetRectNoPaint(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  lprc) {       (cast()SNDMSG(hwndCtl, EM_SETRECTNP, 0, cast(LPARAM)cast(const  RECT *)lprc)); }
  1059.  
  1060.  auto  Edit_GetSel(  ARG1 )(ARG1  hwndCtl) { return                    (cast(DWORD)SNDMSG(hwndCtl, EM_GETSEL, 0, 0)); }
  1061.  void  Edit_SetSel(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  ichStart, ARG3  ichEnd) {   (cast()SNDMSG(hwndCtl, EM_SETSEL, ichStart, ichEnd)); }
  1062.  void  Edit_ReplaceSel(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  lpszReplace) {    (cast()SNDMSG(hwndCtl, EM_REPLACESEL, 0, cast(LPARAM)cast(LPCTSTR)lpszReplace)); }
  1063.  
  1064.  auto  Edit_GetModify(  ARG1 )(ARG1  hwndCtl) { return                 (cast(BOOL)cast(DWORD)SNDMSG(hwndCtl, EM_GETMODIFY, 0, 0)); }
  1065.  void  Edit_SetModify(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  fModified) {       (cast()SNDMSG(hwndCtl, EM_SETMODIFY, cast(WPARAM)cast(UINT)fModified, 0)); }
  1066.  
  1067.  auto  Edit_ScrollCaret(  ARG1 )(ARG1  hwndCtl) { return               (cast(BOOL)cast(DWORD)SNDMSG(hwndCtl, EM_SCROLLCARET, 0, 0)); }
  1068.  
  1069.  auto  Edit_LineFromChar(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  ich) { return         (cast(int)cast(DWORD)SNDMSG(hwndCtl, EM_LINEFROMCHAR, cast(WPARAM)cast(int)ich, 0)); }
  1070.  auto  Edit_LineIndex(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  line) { return           (cast(int)cast(DWORD)SNDMSG(hwndCtl, EM_LINEINDEX, cast(WPARAM)cast(int)line, 0)); }
  1071.  auto  Edit_LineLength(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  line) { return          (cast(int)cast(DWORD)SNDMSG(hwndCtl, EM_LINELENGTH, cast(WPARAM)cast(int)line, 0)); }
  1072.  
  1073.  void  Edit_Scroll(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  dv, ARG3  dh) {             (cast()SNDMSG(hwndCtl, EM_LINESCROLL, cast(WPARAM)dh, cast(LPARAM)dv)); }
  1074.  
  1075.  auto  Edit_CanUndo(  ARG1 )(ARG1  hwndCtl) { return                   (cast(BOOL)cast(DWORD)SNDMSG(hwndCtl, EM_CANUNDO, 0, 0)); }
  1076.  auto  Edit_Undo(  ARG1 )(ARG1  hwndCtl) { return                      (cast(BOOL)cast(DWORD)SNDMSG(hwndCtl, EM_UNDO, 0, 0)); }
  1077.  void  Edit_EmptyUndoBuffer(  ARG1 )(ARG1  hwndCtl) {            (cast()SNDMSG(hwndCtl, EM_EMPTYUNDOBUFFER, 0, 0)); }
  1078.  
  1079.  void  Edit_SetPasswordChar(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  ch) {        (cast()SNDMSG(hwndCtl, EM_SETPASSWORDCHAR, cast(WPARAM)cast(UINT)ch, 0)); }
  1080.  
  1081.  void  Edit_SetTabStops(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  cTabs, ARG3  lpTabs) {  (cast()SNDMSG(hwndCtl, EM_SETTABSTOPS, cast(WPARAM)cast(int)cTabs, cast(LPARAM)cast(const(int) *)lpTabs)); }
  1082.  
  1083.  auto  Edit_FmtLines(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  fAddEOL) { return         (cast(BOOL)cast(DWORD)SNDMSG(hwndCtl, EM_FMTLINES, cast(WPARAM)cast(BOOL)fAddEOL, 0)); }
  1084.  
  1085.  auto  Edit_GetHandle(  ARG1 )(ARG1  hwndCtl) { return                 (cast(HLOCAL)cast(UINT_PTR)SNDMSG(hwndCtl, EM_GETHANDLE, 0, 0)); }
  1086.  void  Edit_SetHandle(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  h) {               (cast()SNDMSG(hwndCtl, EM_SETHANDLE, cast(WPARAM)cast(UINT_PTR)cast(HLOCAL)h, 0)); }
  1087.  
  1088. static if((WINVER >= 0x030a)) {
  1089.  auto  Edit_GetFirstVisibleLine(  ARG1 )(ARG1  hwndCtl) { return       (cast(int)cast(DWORD)SNDMSG(hwndCtl, EM_GETFIRSTVISIBLELINE, 0, 0)); }
  1090.  
  1091.  auto  Edit_SetReadOnly(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  fReadOnly) { return    (cast(BOOL)cast(DWORD)SNDMSG(hwndCtl, EM_SETREADONLY, cast(WPARAM)cast(BOOL)fReadOnly, 0)); }
  1092.  
  1093.  auto  Edit_GetPasswordChar(  ARG1 )(ARG1  hwndCtl) { return           (cast(TCHAR)cast(DWORD)SNDMSG(hwndCtl, EM_GETPASSWORDCHAR, 0, 0)); }
  1094.  
  1095.  void  Edit_SetWordBreakProc(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  lpfnWordBreak) {  (cast()SNDMSG(hwndCtl, EM_SETWORDBREAKPROC, 0, cast(LPARAM)cast(EDITWORDBREAKPROC)lpfnWordBreak)); }
  1096.  auto  Edit_GetWordBreakProc(  ARG1 )(ARG1  hwndCtl) { return          (cast(EDITWORDBREAKPROC)SNDMSG(hwndCtl, EM_GETWORDBREAKPROC, 0, 0)); }
  1097. } /* WINVER >= 0x030a */
  1098.  
  1099. /****** ScrollBar control message APIs ***************************************/
  1100.  
  1101. /* NOTE: flags parameter is a collection of ESB_* values, NOT a boolean! */
  1102.  auto  ScrollBar_Enable(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  flags) { return             EnableScrollBar(hwndCtl, SB_CTL, flags); }
  1103.  
  1104.  auto  ScrollBar_Show(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  fShow) { return               ShowWindow(hwndCtl, fShow ? SW_SHOWNORMAL : SW_HIDE); }
  1105.  
  1106.  auto  ScrollBar_SetPos(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  pos, ARG3  fRedraw) { return      SetScrollPos(hwndCtl, SB_CTL, pos, fRedraw); }
  1107.  auto  ScrollBar_GetPos(  ARG1 )(ARG1  hwndCtl) { return                    GetScrollPos(hwndCtl, SB_CTL); }
  1108.  
  1109.  auto  ScrollBar_SetRange(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwndCtl, ARG2  posMin, ARG3  posMax, ARG4  fRedraw) { return     SetScrollRange(hwndCtl, SB_CTL, posMin, posMax, fRedraw); }
  1110.  auto  ScrollBar_GetRange(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  lpposMin, ARG3  lpposMax) { return          GetScrollRange(hwndCtl, SB_CTL, lpposMin, lpposMax); }
  1111.  
  1112. /****** ListBox control message APIs *****************************************/
  1113.  
  1114.  auto  ListBox_Enable(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  fEnable) { return             EnableWindow(hwndCtl, fEnable); }
  1115.  
  1116.  auto  ListBox_GetCount(  ARG1 )(ARG1  hwndCtl) { return                   (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_GETCOUNT, 0, 0)); }
  1117.  auto  ListBox_ResetContent(  ARG1 )(ARG1  hwndCtl) { return               (cast(BOOL)cast(DWORD)SNDMSG(hwndCtl, LB_RESETCONTENT, 0, 0)); }
  1118.  
  1119.  auto  ListBox_AddString(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  lpsz) { return            (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_ADDSTRING, 0, cast(LPARAM)cast(LPCTSTR)lpsz)); }
  1120.  auto  ListBox_InsertString(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  index, ARG3  lpsz) { return  (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_INSERTSTRING, cast(WPARAM)cast(int)index, cast(LPARAM)cast(LPCTSTR)lpsz)); }
  1121.  
  1122.  auto  ListBox_AddItemData(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  data) { return          (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_ADDSTRING, 0, cast(LPARAM)data)); }
  1123.  auto  ListBox_InsertItemData(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  index, ARG3  data) { return (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_INSERTSTRING, cast(WPARAM)cast(int)index, cast(LPARAM)data)); }
  1124.  
  1125.  auto  ListBox_DeleteString(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  index) { return        (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_DELETESTRING, cast(WPARAM)cast(int)index, 0)); }
  1126.  
  1127.  auto  ListBox_GetTextLen(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  index) { return          (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_GETTEXTLEN, cast(WPARAM)cast(int)index, 0)); }
  1128.  auto  ListBox_GetText(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  index, ARG3  lpszBuffer) { return  (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_GETTEXT, cast(WPARAM)cast(int)index, cast(LPARAM)cast(LPCTSTR)lpszBuffer)); }
  1129.  
  1130.  auto  ListBox_GetItemData(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  index) { return         (cast(LRESULT)cast(ULONG_PTR)SNDMSG(hwndCtl, LB_GETITEMDATA, cast(WPARAM)cast(int)index, 0)); }
  1131.  auto  ListBox_SetItemData(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  index, ARG3  data) { return   (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_SETITEMDATA, cast(WPARAM)cast(int)index, cast(LPARAM)data)); }
  1132.  
  1133. static if((WINVER >= 0x030a)) {
  1134.  auto  ListBox_FindString(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  indexStart, ARG3  lpszFind) { return (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_FINDSTRING, cast(WPARAM)cast(int)indexStart, cast(LPARAM)cast(LPCTSTR)lpszFind)); }
  1135.  auto  ListBox_FindItemData(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  indexStart, ARG3  data) { return (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_FINDSTRING, cast(WPARAM)cast(int)indexStart, cast(LPARAM)data)); }
  1136.  
  1137.  auto  ListBox_SetSel(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  fSelect, ARG3  index) { return     (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_SETSEL, cast(WPARAM)cast(BOOL)fSelect, cast(LPARAM)index)); }
  1138.  auto  ListBox_SelItemRange(  ARG1,  ARG2,  ARG3,  ARG4 )(ARG1  hwndCtl, ARG2  fSelect, ARG3  first, ARG4  last) { return    (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_SELITEMRANGE, cast(WPARAM)cast(BOOL)fSelect, MAKELPARAM(first, last))); }
  1139.  
  1140.  auto  ListBox_GetCurSel(  ARG1 )(ARG1  hwndCtl) { return                  (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_GETCURSEL, 0, 0)); }
  1141.  auto  ListBox_SetCurSel(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  index) { return           (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_SETCURSEL, cast(WPARAM)cast(int)index, 0)); }
  1142.  
  1143.  auto  ListBox_SelectString(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  indexStart, ARG3  lpszFind) { return (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_SELECTSTRING, cast(WPARAM)cast(int)indexStart, cast(LPARAM)cast(LPCTSTR)lpszFind)); }
  1144.  auto  ListBox_SelectItemData(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  indexStart, ARG3  data) { return   (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_SELECTSTRING, cast(WPARAM)cast(int)indexStart, cast(LPARAM)data)); }
  1145.  
  1146.  auto  ListBox_GetSel(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  index) { return              (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_GETSEL, cast(WPARAM)cast(int)index, 0)); }
  1147.  auto  ListBox_GetSelCount(  ARG1 )(ARG1  hwndCtl) { return                (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_GETSELCOUNT, 0, 0)); }
  1148.  auto  ListBox_GetTopIndex(  ARG1 )(ARG1  hwndCtl) { return                (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_GETTOPINDEX, 0, 0)); }
  1149.  auto  ListBox_GetSelItems(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  cItems, ARG3  lpItems) { return (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_GETSELITEMS, cast(WPARAM)cast(int)cItems, cast(LPARAM)cast(int *)lpItems)); }
  1150.  
  1151.  auto  ListBox_SetTopIndex(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  indexTop) { return      (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_SETTOPINDEX, cast(WPARAM)cast(int)indexTop, 0)); }
  1152.  
  1153.  void  ListBox_SetColumnWidth(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  cxColumn) {    (cast()SNDMSG(hwndCtl, LB_SETCOLUMNWIDTH, cast(WPARAM)cast(int)cxColumn, 0)); }
  1154.  auto  ListBox_GetHorizontalExtent(  ARG1 )(ARG1  hwndCtl) { return        (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_GETHORIZONTALEXTENT, 0, 0)); }
  1155.  void  ListBox_SetHorizontalExtent(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  cxExtent) {      (cast()SNDMSG(hwndCtl, LB_SETHORIZONTALEXTENT, cast(WPARAM)cast(int)cxExtent, 0)); }
  1156.  
  1157.  auto  ListBox_SetTabStops(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  cTabs, ARG3  lpTabs) { return (cast(BOOL)cast(DWORD)SNDMSG(hwndCtl, LB_SETTABSTOPS, cast(WPARAM)cast(int)cTabs, cast(LPARAM)cast(int *)lpTabs)); }
  1158.  
  1159.  auto  ListBox_GetItemRect(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  index, ARG3  lprc) { return   (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_GETITEMRECT, cast(WPARAM)cast(int)index, cast(LPARAM)cast(RECT *)lprc)); }
  1160.  
  1161.  auto  ListBox_SetCaretIndex(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  index) { return       (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_SETCARETINDEX, cast(WPARAM)cast(int)index, 0)); }
  1162.  auto  ListBox_GetCaretIndex(  ARG1 )(ARG1  hwndCtl) { return              (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_GETCARETINDEX, 0, 0)); }
  1163.  
  1164.  auto  ListBox_FindStringExact(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  indexStart, ARG3  lpszFind) { return (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_FINDSTRINGEXACT, cast(WPARAM)cast(int)indexStart, cast(LPARAM)cast(LPCTSTR)lpszFind)); }
  1165.  
  1166.  auto  ListBox_SetItemHeight(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  index, ARG3  cy) { return   (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_SETITEMHEIGHT, cast(WPARAM)cast(int)index, MAKELPARAM(cy, 0))); }
  1167.  auto  ListBox_GetItemHeight(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  index) { return       (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_GETITEMHEIGHT, cast(WPARAM)cast(int)index, 0)); }
  1168. }  /* WINVER >= 0x030a */
  1169.  
  1170.  auto  ListBox_Dir(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  attrs, ARG3  lpszFileSpec) { return   (cast(int)cast(DWORD)SNDMSG(hwndCtl, LB_DIR, cast(WPARAM)cast(UINT)attrs, cast(LPARAM)cast(LPCTSTR)lpszFileSpec)); }
  1171.  
  1172. /****** ComboBox control message APIs ****************************************/
  1173.  
  1174.  auto  ComboBox_Enable(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  fEnable) { return        EnableWindow(hwndCtl, fEnable); }
  1175.  
  1176.  auto  ComboBox_GetText(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  lpch, ARG3  cchMax) { return  GetWindowText(hwndCtl, lpch, cchMax); }
  1177.  auto  ComboBox_GetTextLength(  ARG1 )(ARG1  hwndCtl) { return          GetWindowTextLength(hwndCtl); }
  1178.  auto  ComboBox_SetText(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  lpsz) { return          SetWindowText(hwndCtl, lpsz); }
  1179.  
  1180.  auto  ComboBox_LimitText(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  cchLimit) { return   (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_LIMITTEXT, cast(WPARAM)cast(int)cchLimit, 0)); }
  1181.  
  1182.  auto  ComboBox_GetEditSel(  ARG1 )(ARG1  hwndCtl) { return            (cast(DWORD)SNDMSG(hwndCtl, CB_GETEDITSEL, 0, 0)); }
  1183.  auto  ComboBox_SetEditSel(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  ichStart, ARG3  ichEnd) { return (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_SETEDITSEL, 0, MAKELPARAM(ichStart, ichEnd))); }
  1184.  
  1185.  auto  ComboBox_GetCount(  ARG1 )(ARG1  hwndCtl) { return              (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_GETCOUNT, 0, 0)); }
  1186.  auto  ComboBox_ResetContent(  ARG1 )(ARG1  hwndCtl) { return          (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_RESETCONTENT, 0, 0)); }
  1187.  
  1188.  auto  ComboBox_AddString(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  lpsz) { return       (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_ADDSTRING, 0, cast(LPARAM)cast(LPCTSTR)lpsz)); }
  1189.  auto  ComboBox_InsertString(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  index, ARG3  lpsz) { return (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_INSERTSTRING, cast(WPARAM)cast(int)index, cast(LPARAM)cast(LPCTSTR)lpsz)); }
  1190.  
  1191.  auto  ComboBox_AddItemData(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  data) { return     (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_ADDSTRING, 0, cast(LPARAM)data)); }
  1192.  auto  ComboBox_InsertItemData(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  index, ARG3  data) { return (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_INSERTSTRING, cast(WPARAM)cast(int)index, cast(LPARAM)data)); }
  1193.  
  1194.  auto  ComboBox_DeleteString(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  index) { return   (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_DELETESTRING, cast(WPARAM)cast(int)index, 0)); }
  1195.  
  1196.  auto  ComboBox_GetLBTextLen(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  index) { return           (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_GETLBTEXTLEN, cast(WPARAM)cast(int)index, 0)); }
  1197.  auto  ComboBox_GetLBText(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  index, ARG3  lpszBuffer) { return  (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_GETLBTEXT, cast(WPARAM)cast(int)index, cast(LPARAM)cast(LPCTSTR)lpszBuffer)); }
  1198.  
  1199.  auto  ComboBox_GetItemData(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  index) { return        (cast(LRESULT)cast(ULONG_PTR)SNDMSG(hwndCtl, CB_GETITEMDATA, cast(WPARAM)cast(int)index, 0)); }
  1200.  auto  ComboBox_SetItemData(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  index, ARG3  data) { return  (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_SETITEMDATA, cast(WPARAM)cast(int)index, cast(LPARAM)data)); }
  1201.  
  1202.  auto  ComboBox_FindString(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  indexStart, ARG3  lpszFind) { return  (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_FINDSTRING, cast(WPARAM)cast(int)indexStart, cast(LPARAM)cast(LPCTSTR)lpszFind)); }
  1203.  auto  ComboBox_FindItemData(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  indexStart, ARG3  data) { return    (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_FINDSTRING, cast(WPARAM)cast(int)indexStart, cast(LPARAM)data)); }
  1204.  
  1205.  auto  ComboBox_GetCurSel(  ARG1 )(ARG1  hwndCtl) { return                 (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_GETCURSEL, 0, 0)); }
  1206.  auto  ComboBox_SetCurSel(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  index) { return          (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_SETCURSEL, cast(WPARAM)cast(int)index, 0)); }
  1207.  
  1208.  auto  ComboBox_SelectString(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  indexStart, ARG3  lpszSelect) { return  (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_SELECTSTRING, cast(WPARAM)cast(int)indexStart, cast(LPARAM)cast(LPCTSTR)lpszSelect)); }
  1209.  auto  ComboBox_SelectItemData(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  indexStart, ARG3  data) { return      (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_SELECTSTRING, cast(WPARAM)cast(int)indexStart, cast(LPARAM)data)); }
  1210.  
  1211.  auto  ComboBox_Dir(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  attrs, ARG3  lpszFileSpec) { return  (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_DIR, cast(WPARAM)cast(UINT)attrs, cast(LPARAM)cast(LPCTSTR)lpszFileSpec)); }
  1212.  
  1213.  auto  ComboBox_ShowDropdown(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  fShow) { return       (cast(BOOL)cast(DWORD)SNDMSG(hwndCtl, CB_SHOWDROPDOWN, cast(WPARAM)cast(BOOL)fShow, 0)); }
  1214.  
  1215. static if((WINVER >= 0x030a)) {
  1216.  auto  ComboBox_FindStringExact(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  indexStart, ARG3  lpszFind) { return  (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_FINDSTRINGEXACT, cast(WPARAM)cast(int)indexStart, cast(LPARAM)cast(LPCTSTR)lpszFind)); }
  1217.  
  1218.  auto  ComboBox_GetDroppedState(  ARG1 )(ARG1  hwndCtl) { return           (cast(BOOL)cast(DWORD)SNDMSG(hwndCtl, CB_GETDROPPEDSTATE, 0, 0)); }
  1219.  void  ComboBox_GetDroppedControlRect(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  lprc) {  (cast()SNDMSG(hwndCtl, CB_GETDROPPEDCONTROLRECT, 0, cast(LPARAM)cast(RECT *)lprc)); }
  1220.  
  1221.  auto  ComboBox_GetItemHeight(  ARG1 )(ARG1  hwndCtl) { return             (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_GETITEMHEIGHT, 0, 0)); }
  1222.  auto  ComboBox_SetItemHeight(  ARG1,  ARG2,  ARG3 )(ARG1  hwndCtl, ARG2  index, ARG3  cyItem) { return (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_SETITEMHEIGHT, cast(WPARAM)cast(int)index, cast(LPARAM)cast(int)cyItem)); }
  1223.  
  1224.  auto  ComboBox_GetExtendedUI(  ARG1 )(ARG1  hwndCtl) { return             (cast(UINT)cast(DWORD)SNDMSG(hwndCtl, CB_GETEXTENDEDUI, 0, 0)); }
  1225.  auto  ComboBox_SetExtendedUI(  ARG1,  ARG2 )(ARG1  hwndCtl, ARG2  flags) { return      (cast(int)cast(DWORD)SNDMSG(hwndCtl, CB_SETEXTENDEDUI, cast(WPARAM)cast(UINT)flags, 0)); }
  1226. }  /* WINVER >= 0x030a */
  1227.  
  1228. /****** Alternate porting layer macros ****************************************/
  1229.  
  1230. /* USER MESSAGES: */
  1231.  
  1232.  auto  GET_WPARAM(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return                       wp; }
  1233.  auto  GET_LPARAM(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return                       lp; }
  1234.  
  1235.  auto  GET_X_LPARAM(  ARG1 )(ARG1  lp) { return                        (cast(int)cast(short)LOWORD(lp)); }
  1236.  auto  GET_Y_LPARAM(  ARG1 )(ARG1  lp) { return                        (cast(int)cast(short)HIWORD(lp)); }
  1237.  
  1238.  auto  GET_WM_ACTIVATE_STATE(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return            LOWORD(wp); }
  1239.  auto  GET_WM_ACTIVATE_FMINIMIZED(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return      cast(BOOL)HIWORD(wp); }
  1240.  auto  GET_WM_ACTIVATE_HWND(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return            cast(HWND)lp; }
  1241.  auto  GET_WM_ACTIVATE_MPS(  ARG1,  ARG2,  ARG3 )(ARG1  s, ARG2  fmin, ARG3  hwnd) { return  
  1242.         cast(WPARAM)MAKELONG(s, fmin), cast(LPARAM)hwnd; }
  1243.  
  1244.  auto  GET_WM_CHARTOITEM_CHAR(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return          cast(TCHAR)LOWORD(wp); }
  1245.  auto  GET_WM_CHARTOITEM_POS(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return            HIWORD(wp); }
  1246.  auto  GET_WM_CHARTOITEM_HWND(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return          cast(HWND)lp; }
  1247.  auto  GET_WM_CHARTOITEM_MPS(  ARG1,  ARG2,  ARG3 )(ARG1  ch, ARG2  pos, ARG3  hwnd) { return
  1248.         cast(WPARAM)MAKELONG(pos, ch), cast(LPARAM)hwnd; }
  1249.  
  1250.  auto  GET_WM_COMMAND_ID(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return                LOWORD(wp); }
  1251.  auto  GET_WM_COMMAND_HWND(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return             cast(HWND)lp; }
  1252.  auto  GET_WM_COMMAND_CMD(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return               HIWORD(wp); }
  1253.  auto  GET_WM_COMMAND_MPS(  ARG1,  ARG2,  ARG3 )(ARG1  id, ARG2  hwnd, ARG3  cmd) { return    
  1254.         cast(WPARAM)MAKELONG(id, cmd), cast(LPARAM)hwnd; }
  1255.  
  1256. enum  WM_CTLCOLOR =                             0x0019;
  1257.  
  1258.  auto  GET_WM_CTLCOLOR_HDC(  ARG1,  ARG2,  ARG3 )(ARG1  wp, ARG2  lp, ARG3  msg) { return        cast(HDC)wp; }
  1259.  auto  GET_WM_CTLCOLOR_HWND(  ARG1,  ARG2,  ARG3 )(ARG1  wp, ARG2  lp, ARG3  msg) { return       cast(HWND)lp; }
  1260.  auto  GET_WM_CTLCOLOR_TYPE(  ARG1,  ARG2,  ARG3 )(ARG1  wp, ARG2  lp, ARG3  msg) { return       cast(WORD)(msg - WM_CTLCOLORMSGBOX); }
  1261.  auto  GET_WM_CTLCOLOR_MSG(  ARG1 )(ARG1  type) { return               cast(WORD)(WM_CTLCOLORMSGBOX+type); }
  1262.  auto  GET_WM_CTLCOLOR_MPS(  ARG1,  ARG2,  ARG3 )(ARG1  hdc, ARG2  hwnd, ARG3  type) { return
  1263.         cast(WPARAM)hdc, cast(LPARAM)hwnd; }
  1264.  
  1265.  
  1266.  auto  GET_WM_MENUSELECT_CMD(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return                LOWORD(wp); }
  1267.  auto  GET_WM_MENUSELECT_FLAGS(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return             cast(UINT)cast(int)cast(short)HIWORD(wp); }
  1268.  auto  GET_WM_MENUSELECT_HMENU(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return             cast(HMENU)lp; }
  1269.  auto  GET_WM_MENUSELECT_MPS(  ARG1,  ARG2,  ARG3 )(ARG1  cmd, ARG2  f, ARG3  hmenu) { return  
  1270.         cast(WPARAM)MAKELONG(cmd, f), cast(LPARAM)hmenu; }
  1271.  
  1272. /* Note: the following are for interpreting MDIclient to MDI child messages. */
  1273.  auto  GET_WM_MDIACTIVATE_FACTIVATE(  ARG1,  ARG2,  ARG3 )(ARG1  hwnd, ARG2  wp, ARG3  lp) { return  (lp == cast(LPARAM)hwnd); }
  1274.  auto  GET_WM_MDIACTIVATE_HWNDDEACT(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return        cast(HWND)wp; }
  1275.  auto  GET_WM_MDIACTIVATE_HWNDACTIVATE(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return     cast(HWND)lp; }
  1276. /* Note: the following is for sending to the MDI client window. */
  1277.  auto  GET_WM_MDIACTIVATE_MPS(  ARG1,  ARG2,  ARG3 )(ARG1  f, ARG2  hwndD, ARG3  hwndA) { return
  1278.         cast(WPARAM)hwndA, 0; }
  1279.  
  1280.  auto  GET_WM_MDISETMENU_MPS(  ARG1,  ARG2 )(ARG1  hmenuF, ARG2  hmenuW) { return cast(WPARAM)hmenuF, cast(LPARAM)hmenuW; }
  1281.  
  1282.  auto  GET_WM_MENUCHAR_CHAR(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return                cast(TCHAR)LOWORD(wp); }
  1283.  auto  GET_WM_MENUCHAR_HMENU(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return               cast(HMENU)lp; }
  1284.  auto  GET_WM_MENUCHAR_FMENU(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return               cast(BOOL)HIWORD(wp); }
  1285.  auto  GET_WM_MENUCHAR_MPS(  ARG1,  ARG2,  ARG3 )(ARG1  ch, ARG2  hmenu, ARG3  f) { return    
  1286.         cast(WPARAM)MAKELONG(ch, f), cast(LPARAM)hmenu; }
  1287.  
  1288.  auto  GET_WM_PARENTNOTIFY_MSG(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return              LOWORD(wp); }
  1289.  auto  GET_WM_PARENTNOTIFY_ID(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return               HIWORD(wp); }
  1290.  auto  GET_WM_PARENTNOTIFY_HWNDCHILD(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return       cast(HWND)lp; }
  1291.  auto  GET_WM_PARENTNOTIFY_X(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return               cast(int)cast(short)LOWORD(lp); }
  1292.  auto  GET_WM_PARENTNOTIFY_Y(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return               cast(int)cast(short)HIWORD(lp); }
  1293.  auto  GET_WM_PARENTNOTIFY_MPS(  ARG1,  ARG2,  ARG3 )(ARG1  msg, ARG2  id, ARG3  hwnd) { return
  1294.         cast(WPARAM)MAKELONG(id, msg), cast(LPARAM)hwnd; }
  1295.  auto  GET_WM_PARENTNOTIFY2_MPS(  ARG1,  ARG2,  ARG3 )(ARG1  msg, ARG2  x, ARG3  y) { return
  1296.         cast(WPARAM)MAKELONG(0, msg), MAKELONG(x, y); }
  1297.  
  1298.  auto  GET_WM_VKEYTOITEM_CODE(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return              cast(int)cast(short)LOWORD(wp); }
  1299.  auto  GET_WM_VKEYTOITEM_ITEM(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return               HIWORD(wp); }
  1300.  auto  GET_WM_VKEYTOITEM_HWND(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return              cast(HWND)lp; }
  1301.  auto  GET_WM_VKEYTOITEM_MPS(  ARG1,  ARG2,  ARG3 )(ARG1  code, ARG2  item, ARG3  hwnd) { return
  1302.         cast(WPARAM)MAKELONG(item, code), cast(LPARAM)hwnd; }
  1303.  
  1304.  auto  GET_EM_SETSEL_START(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return                 cast(INT)wp; }
  1305.  auto  GET_EM_SETSEL_END(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return                    lp; }
  1306.  auto  GET_EM_SETSEL_MPS(  ARG1,  ARG2 )(ARG1  iStart, ARG2  iEnd) { return
  1307.         cast(WPARAM)iStart, cast(LPARAM)iEnd; }
  1308.  
  1309.  auto  GET_EM_LINESCROLL_MPS(  ARG1,  ARG2 )(ARG1  vert, ARG2  horz) { return    
  1310.         cast(WPARAM)horz, cast(LPARAM)vert; }
  1311.  
  1312.  auto  GET_WM_CHANGECBCHAIN_HWNDNEXT(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return       cast(HWND)lp; }
  1313.  
  1314.  auto  GET_WM_HSCROLL_CODE(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return                  LOWORD(wp); }
  1315.  auto  GET_WM_HSCROLL_POS(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return                   HIWORD(wp); }
  1316.  auto  GET_WM_HSCROLL_HWND(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return                 cast(HWND)lp; }
  1317.  auto  GET_WM_HSCROLL_MPS(  ARG1,  ARG2,  ARG3 )(ARG1  code, ARG2  pos, ARG3  hwnd) { return    
  1318.         cast(WPARAM)MAKELONG(code, pos), cast(LPARAM)hwnd; }
  1319.  
  1320.  auto  GET_WM_VSCROLL_CODE(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return                  LOWORD(wp); }
  1321.  auto  GET_WM_VSCROLL_POS(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return                   HIWORD(wp); }
  1322.  auto  GET_WM_VSCROLL_HWND(  ARG1,  ARG2 )(ARG1  wp, ARG2  lp) { return                 cast(HWND)lp; }
  1323.  auto  GET_WM_VSCROLL_MPS(  ARG1,  ARG2,  ARG3 )(ARG1  code, ARG2  pos, ARG3  hwnd) { return    
  1324.         cast(WPARAM)MAKELONG(code, pos), cast(LPARAM)hwnd; }
  1325.  
  1326. /****** C runtime porting macros ****************************************/
  1327.  
  1328. alias     calloc  _ncalloc;
  1329. alias     _expand  _nexpand;
  1330. alias       free  _ffree;
  1331. alias     malloc  _fmalloc;
  1332. alias    _memccpy  _fmemccpy;
  1333. alias     memchr  _fmemchr;
  1334. alias     memcmp  _fmemcmp;
  1335. alias     memcpy  _fmemcpy;
  1336. alias    _memicmp  _fmemicmp;
  1337. alias    memmove  _fmemmove;
  1338. alias     memset  _fmemset;
  1339. alias      _msize  _fmsize;
  1340. alias    realloc  _frealloc;
  1341. alias     strcat  _fstrcat;
  1342. alias     strchr  _fstrchr;
  1343. alias     strcmp  _fstrcmp;
  1344. alias     strcpy  _fstrcpy;
  1345. alias    strcspn  _fstrcspn;
  1346. alias     _strdup  _fstrdup;
  1347. alias    _stricmp  _fstricmp;
  1348. alias     strlen  _fstrlen;
  1349. alias     _strlwr  _fstrlwr;
  1350. alias    strncat  _fstrncat;
  1351. alias    strncmp  _fstrncmp;
  1352. alias    strncpy  _fstrncpy;
  1353. alias   _strnicmp  _fstrnicmp;
  1354. alias    _strnset  _fstrnset;
  1355. alias    strpbrk  _fstrpbrk;
  1356. alias    strrchr  _fstrrchr;
  1357. alias     _strrev  _fstrrev;
  1358. alias     _strset  _fstrset;
  1359. alias     strspn  _fstrspn;
  1360. alias     strstr  _fstrstr;
  1361. alias     strtok  _fstrtok;
  1362. alias     _strupr  _fstrupr;
  1363. alias       free  _nfree;
  1364. alias     malloc  _nmalloc;
  1365. alias      _msize  _nmsize;
  1366. alias    realloc  _nrealloc;
  1367. alias     _strdup  _nstrdup;
  1368. alias      MoveMemory  hmemcpy;
  1369.  
  1370. static if(!DECLARE_HANDLE32) {
  1371. alias     DECLARE_HANDLE  DECLARE_HANDLE32;
  1372. }                       /* End of extern "C" { */
  1373. }       /* __cplusplus */
  1374.  
  1375.  
  1376. } /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
  1377. // #pragma endregion
  1378.  
  1379. }  /* !_INC_WINDOWSX */
  1380.  
Advertisement
Add Comment
Please, Sign In to add comment