Я проверил код и обнаружил, что проблема была вызвана командой ::SetWindowPos()
в OnBnClickedCheck1()
. Вызываете это, чтобы решить проблему рисования, но вы делаете это, изменяя Z-порядок, и это заставляет элемент управления B захватывать ввод. Поэтому его необходимо удалить, и код в OnBnClickedCheck1()
можно изменить, как показано ниже (я упростил синтаксис и использовал MF C вместо команд WinAPI):
void CTestDlgActXDlg::OnBnClickedCheck1()
{
m_list_A.ShowWindow(m_list_A.IsWindowVisible() ? SW_HIDE : SW_SHOW);
}
Рисунок Проблема может быть решена путем установки стиля WS_CLIPSIBLINGS
в скрипте ресурса, как предлагается в комментариях:
.
.
LISTBOX IDC_LIST_A,114,36,48,42,LBS_SORT | LBS_NOINTEGRALHEIGHT | NOT WS_VISIBLE | WS_VSCROLL | WS_TABSTOP
CONTROL "",IDC_LIST_B,"SysListView32",LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP | WS_CLIPSIBLINGS,108,60,60,54
.
.
Таким образом, это работает для меня, элемент управления A имеет приоритет над B и отправляет LBN_SELCHANGE
уведомления, для любого из его пунктов нажал.
И что-то странное, что я заметил, команда DDX_Control(pDX, IDC_LIST_B, m_list_B);
в testdlg. cpp запускается дважды. Удалите второй вызов.
Кстати, странный дизайн интерфейса. ?