예제 #1
0
        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);
        }