List Control SetFocus Ошибка перерисовки на вкладке Control - PullRequest
0 голосов
/ 06 октября 2009

Среда: Visual Studio 2008, пакет дополнительных компонентов Visual Studio, приложение MFC Dialog, Windows XP, новые общие элементы управления.

У меня проблема с элементом управления списком, который находится на вкладке.

Чтобы воспроизвести проблему, просто создайте диалоговое приложение. Поместите элемент управления вкладки в этом диалоговом окне, затем поместите элемент управления списком на этот элемент управления вкладками. Вам не нужно добавлять код в проект. Просто построй и беги. Установите фокус на представление списка, а затем либо сверните диалоговое окно, либо откройте перед ним другое окно.

Теперь верните диалоговое окно на передний план, список не будет отображаться правильно.

Одна вещь, которую я попробовал, это обработать событие set focus для элемента управления list, но оставил его с пустым телом метода, т.е. ...

void CMyListControl::OnSetFocus(CWnd* window)
{
  // Default();
}

Тогда проблема перерисовки исчезнет, ​​однако теперь вы не можете выбирать элементы в списке. Раскомментирование вызова по умолчанию заставляет проблему вернуться.

Если я уберу список со вкладки, проблема исчезнет. Если я установлю фокус на другой элемент управления на вкладке или в диалоговом окне, проблема исчезнет. Это странно.

На самом деле, если вы внимательно посмотрите, то увидите, что список нарисован сам, а затем скрыт элементом управления вкладками.

1 Ответ

2 голосов
/ 29 августа 2010

Я знаю, что уже поздно, но у меня были те же проблемы сегодня. Вам необходимо установить родительский элемент ListView в элемент управления Tab.

hWndTab = CreateWindowEx(WS_EX_CLIENTEDGE, WC_TABCONTROL, NULL,
    WS_CHILD | WS_TABSTOP | WS_VISIBLE,
    0, 0, 0, 0, hWnd, (HMENU) IDC_TAB, hInstance, NULL);

hWndList = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, NULL,
    WS_CHILD | WS_TABSTOP | WS_VISIBLE | LVS_REPORT,
    0, 0, 0, 0, hWndTab, (HMENU) IDC_LIST, hInstance, NULL);

Примечание. Обработчик родительского окна для hWndList: hWndTab. Или вы можете использовать SetParent.

...