Member 12330615 Ответов: 1

Как установить фокус курсора на конкретную строку?


Я использую MFC VC++ для программирования программы мониторинга.

Он показывает данные на экране ListCtrl, listctrl имеет 10 столбцов со стилем отчета.

Хотя экран не прокручивается, он фокусируется непосредственно на одной строке.

Но в то время как экран прокручивается, если я фокусирую одну строку, курсор охватывает больше строк и растет, покрывая весь экран.

Я хочу сделать фокусировку одной строки непосредственно во время прокрутки экрана монитора.

OnInitDialog () и nm_click событие ListCtrl, я использовал несколько стилей, как показано ниже.
//m_List_2100.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
//DWORD dwEXStyle = m_List_2100.GetExtendedStyle();
//m_List_2100.SetExtendedStyle(dwEXStyle | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER);
////m_List_2100.SetExtendedStyle(dwEXStyle | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_TRACKSELECT);
 
m_List_2100.ModifyStyle(0, LVS_REPORT, NULL);
//m_List_2100.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP | LVS_EX_GRIDLINES | LVS_EX_ONECLICKACTIVATE);
m_List_2100.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);

On the NM_CLICK events:
void CForm2000::OnNMClickList2100(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<lpnmitemactivate>(pNMHDR);
	
	NMLISTVIEW *pNMListCtrl = (NMLISTVIEW*)pNMHDR;
	int nSelectIndex = pNMListCtrl->iItem;

	m_List_2100.SetItemState(nSelectIndex, LVIS_SELECTED, LVIS_SELECTED);
	m_List_2100.EnsureVisible(nSelectIndex, TRUE);	
	m_List_2100.SetFocus();
}


Спасибо.

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

Я кодировал столько же условий, сколько и выше, но все они потерпели неудачу.

1 Ответов

Рейтинг:
2

Jochen Arndt

В вашем OnNMClickList2100 обработчик вы выбираете элемент (строку)при нажатии на него. Но это не удалит выделение из других фактически выбранных строк, так что у вас может быть несколько выбранных строк.

Какова цель справиться с этим самостоятельно? Обработка по умолчанию будет выбирать щелкнутую строку и выбирать / отменять выбор других в зависимости от состояний клавиш Shift и Ctrl. Если вы не хотите множественного выбора, установите LVS_SINGLESEL стиль.

Вы говорите нам, что есть проблемы, когда вы просматриваете список. Но показанный вами код не связан с прокруткой (кроме того, вы нажимаете на строку во время прокрутки). Таким образом, проблема, вероятно, находится где-то еще в вашем коде. Проверьте, не меняете ли вы выделение и в других местах (особенно в функциях, связанных с прокруткой) и действительно ли это необходимо.