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; } }