Я разработал элемент управления ActiveX, который состоит из одного поля ввода и одного поля со списком.
Я пытаюсь разместить поле редактирования над списком, чтобы каждый раз, когда пользователь выбирал какой-либо элемент из списка, он располагался в окне редактирования. Таким образом, мое поле редактирования должно закрывать часть combobox’а, и для этого поля видна только кнопка со стрелкой.
Вопрос: Всякий раз, когда я пытаюсь навести курсор мыши на этот элемент управления, поле со списком появляется перед окном редактирования. Я сделал дизайн, такой как поле со списком редактирования, просто прикрывает поле со списком, но только когда фокус возвращается к списку со списком, и это занимает комбобокс передний.
Пробные подходы: в одной из моих определенных функций я попробовал все нижеприведенные функции, чтобы сделать поле редактирования над списком.
1) BringWindowToTop
2) SetForegroundWindow
3) SetWindowPos
Мой код для этой функции:
void DetermineWindowsShown()
{
m_edit.EnableWindow(m_bEnabled);
m_combo.EnableWindow(m_bEnabled);
//here only I tried all the diff function
m_edit.BringWindowToTop();
//m_edit.SetForegroundWindow();
//m_combo.SetWindowPos(&CWnd::wndBottom ,0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}.
Я звоню DetermineWindowsShown много мест, так что всегда editbox выше над выпадающим списком.
BringWindowToTop
обычно для окон MDI. SetForegroundWindow
для главного окна.
Вы должны быть в состоянии использовать SetWindowPos
, примените это к обоим, а не только к одному:
m_combo.SetWindowPos(&CWnd::wndBottom, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
m_edit.SetWindowPos(&CWnd::wndTop, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);