Example #1
0
        LResult ListBoxProcedure(WindowHandle window, MessageType message, WParam wParam, LParam lParam)
        {
            if (message == MessageType.KeyDown && (VirtualKey)wParam == VirtualKey.Return)
            {
                window.GetParent().SendMessage(
                    MessageType.Command,
                    new WParam(1, (ushort)ListBoxNotification.DoubleClick),
                    (LParam)window);
            }

            return(Windows.CallWindowProcedure(_existingListBoxWndProc, window, message, wParam, lParam));
        }
        public void WindowCallback_Subclass()
        {
            int             value   = 42;
            WindowClassInfo myClass = new WindowClassInfo
            {
                ClassName       = "WindowCallback_Subclass",
                WindowProcedure = (window, message, wParam, lParam) =>
                {
                    return(value);
                }
            };

            Atom atom = Windows.RegisterClass(ref myClass);

            atom.IsValid.Should().BeTrue();

            try
            {
                WindowHandle window = Windows.CreateWindow(atom, style: WindowStyles.Minimize | WindowStyles.Diabled);
                window.IsInvalid.Should().BeFalse();

                try
                {
                    Windows.SendMessage(window, MessageType.Activate, 0, 0).Should().Be((LResult)42);

                    WNDPROC         previous = default;
                    WindowProcedure subClass = (w, m, wParam, lParam) =>
                    {
                        return(Windows.CallWindowProcedure(previous, w, m, wParam, lParam));
                    };

                    value    = 1999;
                    previous = Windows.SetWindowProcedure(window, subClass);
                    Windows.SendMessage(window, MessageType.Activate, 0, 0).Should().Be((LResult)1999);
                    GC.KeepAlive(subClass);
                }
                finally
                {
                    Windows.DestroyWindow(window);
                }
            }
            finally
            {
                Windows.UnregisterClass(atom, null);
            }
        }
Example #3
0
        private LResult ScrollProcedure(WindowHandle window, MessageType message, WParam wParam, LParam lParam)
        {
            int id = (int)window.GetWindowLong(WindowLong.Id).ToInt64();

            switch (message)
            {
            case MessageType.KeyDown:
                if ((VirtualKey)wParam == VirtualKey.Tab)
                {
                    window.GetParent().GetDialogItem(
                        (id + ((Windows.GetKeyState(VirtualKey.Shift) & KeyState.Down) != 0 ? 2 : 1) % 3))
                    .SetFocus();
                }
                break;

            case MessageType.SetFocus:
                idFocus = id;
                break;
            }

            return(Windows.CallWindowProcedure(OldScroll[id], window, message, wParam, lParam));
        }