protected override void WndProc(ref Message m)
            {
                switch ((User32.WM)m.Msg)
                {
                case WM.GETOBJECT:
                    WmGetObject(ref m);
                    return;

                case WM.MOUSEMOVE:
                    if (_childWindowType == ChildWindowType.DropDownList)
                    {
                        // Need to track the selection change via mouse over to
                        // raise focus changed event for the items. Monitoring
                        // item change in setters does not guarantee that focus
                        // is properly announced.
                        object before = _owner.SelectedItem;
                        DefWndProc(ref m);
                        object after = _owner.SelectedItem;

                        // Call the focus event for the new selected item accessible object provided by ComboBoxAccessibleObject.
                        // If the owning ComboBox has a custom accessible object,
                        // it should override the logic and implement setting an item focus by itself.
                        if (before != after && _owner.IsAccessibilityObjectCreated && _owner.AccessibilityObject is ComboBoxAccessibleObject comboBoxAccessibleObject)
                        {
                            comboBoxAccessibleObject.SetComboBoxItemFocus();
                        }
                    }
                    else
                    {
                        _owner.ChildWndProc(ref m);
                    }

                    break;

                default:
                    if (_childWindowType == ChildWindowType.DropDownList)
                    {
                        DefWndProc(ref m);     // Drop Down window should behave by its own.
                    }
                    else
                    {
                        _owner.ChildWndProc(ref m);
                    }

                    break;
                }
            }
            protected override void WndProc(ref Message m)
            {
                switch ((User32.WM)m.Msg)
                {
                case WM.GETOBJECT:
                    WmGetObject(ref m);
                    return;

                case WM.MOUSEMOVE:
                    if (_childWindowType == ChildWindowType.DropDownList)
                    {
                        // Need to track the selection change via mouse over to
                        // raise focus changed event for the items. Monitoring
                        // item change in setters does not guarantee that focus
                        // is properly announced.
                        object before = _owner.SelectedItem;
                        DefWndProc(ref m);
                        object after = _owner.SelectedItem;
                        if (before != after)
                        {
                            (_owner.AccessibilityObject as ComboBoxAccessibleObject).SetComboBoxItemFocus();
                        }
                    }
                    else
                    {
                        _owner.ChildWndProc(ref m);
                    }

                    break;

                default:
                    if (_childWindowType == ChildWindowType.DropDownList)
                    {
                        DefWndProc(ref m);     // Drop Down window should behave by its own.
                    }
                    else
                    {
                        _owner.ChildWndProc(ref m);
                    }

                    break;
                }
            }