public override IntPtr Call16from32(Machine machine, bool hook, bool dlgproc, ref Win32.MSG msg32, ref Win16.MSG msg16, Func <uint> callback) { System.Diagnostics.Debug.Assert(msg32.message != WM_CTLCOLOR16); msg16.message = WM_CTLCOLOR16; msg16.wParam = HDC.To16(msg32.wParam); msg16.lParam = BitUtils.MakeDWord(HWND.To16(msg32.lParam), (ushort)(msg32.message - WM_CTLCOLORMSGBOX)); uint retv = callback(); if (dlgproc) { if (retv == 0) { return(IntPtr.Zero); } retv = User._GetWindowLong(msg32.hWnd, Win32.DWL_MSGRESULT); } // Map the returned brush return(HGDIOBJ.To32(retv.Loword()).value); }