Rais Shaikh Ответов: 1

Как сосредоточиться на элементе в clistctrl в C++ ?


Я создал один CXTListCtrl в формате LVS_ICON, так что у меня есть 20 изображений в группе. Я показываю изображения в строке 5 изображений,а затем следующую строку, как это.

Проблема в том, что, когда мне нужно переместить фокус с пятого пункта на шестой, фокус не приходит на это и не идет дальше изображений.

Что я уже пробовал:

LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
if (pLVKeyDow->wVKey == VK_LEFT || pLVKeyDow->wVKey == VK_RIGHT || pLVKeyDow->wVKey == VK_UP || pLVKeyDow->wVKey == VK_DOWN)
{
     switch(pLVKeyDow->wVKey)
     {
        case VK_RIGHT:
                  if (SelectedItem < Total - 1)
			NewItem = SelectedItem + 1;
		if(NewItem % 5 == 0)
		{
		   m_listCtrl->SetFocus();
	           m_listCtrl->SetItemState(NewItem,LVIS_FOCUSED|LVIS_SELECTED,LVIS_SELECTED);
	}
	break;
     }
}

Richard MacCutchan

Если текущий элемент является последним в строке, то вам нужно увеличить номер строки и установить индекс столбца равным нулю.

Sergey Alexandrovich Kryukov

Нет такой вещи, как"фокусировка и предмет". Не путайте фокусировку (которая всегда является фокусом клавиатуры) и выбор.
—СА

1 Ответов

Рейтинг:
2

Theo Buys

Если вы проектируете элемент управления списком с помощью шаблона ресурсов windows, убедитесь, что в свойствах элемента управления списком установлено значение "всегда показывать выбор" в значение True. Таким образом, вы всегда будете видеть выделение в сфокусированном или несфокусированном состоянии. Если вы хотите установить несколько выборок, установите для параметра "один выбор" значение False в свойствах элемента управления списком. Если вы используете listview, вам нужно добавить LVS_SHOWSELALWAYS и удалить стиль LVS_SINGLESEL.

Надеюсь, это поможет.