Example #1
0
            public void Convert(ref Win16.CREATESTRUCT cs16, out Win32.CREATESTRUCT cs32)
            {
                if (cs16.lpCreateParams != 0 && !WindowClass.IsRegistered(_machine.ReadString(cs16.lpszClassName)))
                {
                    throw new NotImplementedException("CREATESTRUCT.lpCreateParams not supported");
                }

                // Convert it
                cs32.lpCreateParams = BitUtils.DWordToIntPtr(cs16.lpCreateParams);
                cs32.hInstance      = IntPtr.Zero;
                cs32.x             = (short)(cs16.cx == Win16.CW_USEDEFAULT ? Win16.CW_USEDEFAULT : cs16.x);
                cs32.y             = (short)(cs16.cx == Win16.CW_USEDEFAULT ? Win16.CW_USEDEFAULT : cs16.y);
                cs32.cx            = (short)(cs16.cx == Win16.CW_USEDEFAULT ? Win16.CW_USEDEFAULT : cs16.cx);
                cs32.cy            = (short)(cs16.cx == Win16.CW_USEDEFAULT ? Win16.CW_USEDEFAULT : cs16.cy);
                cs32.dwExStyle     = cs16.dwExStyle;
                cs32.style         = cs16.style;
                cs32.lpszClassName = GetString(cs16.lpszClassName);
                cs32.lpszName      = GetString(cs16.lpszName);

                if ((cs16.style & Win16.WS_CHILD) != 0)
                {
                    cs32.hMenu = (IntPtr)cs16.hMenu;
                }
                else
                {
                    cs32.hMenu = HMENU.Map.To32(cs16.hMenu);
                }

                cs32.hWndParent = HWND.Map.To32(cs16.hWndParent);
            }
Example #2
0
        public override uint Call32from16(Machine machine, bool hook, bool dlgproc, ref Win16.MSG msg16, ref Win32.MSG msg32, Func <IntPtr> callback)
        {
            // Get info
            var info = GetInfo(machine, msg32.hWnd);

            // Make sure no funny business going on
            // (ie: the same CREATESTRUCT is passed out from 16-bit code as was passed in)
            System.Diagnostics.Debug.Assert(info.Struct32 != IntPtr.Zero);
            System.Diagnostics.Debug.Assert(info.Struct16 != 0);
            System.Diagnostics.Debug.Assert(info.Struct16 == msg16.lParam);

            // Convert
            Win16.CREATESTRUCT cs16 = machine.ReadStruct <Win16.CREATESTRUCT>(msg16.lParam);
            Win32.CREATESTRUCT cs32;
            info.Convert(ref cs16, out cs32);
            Marshal.StructureToPtr(cs32, info.Struct32, false);

            // Call
            msg32.wParam = IntPtr.Zero;
            msg32.lParam = info.Struct32;
            IntPtr retv = callback();

            // Convert back
            cs32 = Marshal.PtrToStructure <Win32.CREATESTRUCT>(info.Struct32);
            info.Convert(ref cs32, out cs16);
            machine.WriteStruct(info.Struct16, ref cs16);

            // Return value depends on WM_CREATE/WM_NCCREATE
            if (_nc)
            {
                return(retv != IntPtr.Zero ? 1U : 0U);
            }
            else
            {
                return(retv.ToInt64() < 0 ? unchecked ((uint)-1) : 0U);
            }
        }