Вопрос 1 — как в СListCtrl (даже ClistCtrlEx) сделать так, чтобы выбирался не только крайний левый элемент, а вся строка?
(на codeproject есть, но там так закручено......=(( )
Вопрос 2 — получение значения выбранного элемента:
у меня под ХР прекрасно работает int zxcv = List.GetHotItem();
m_Result = List.GetItemText(zxcv,0);
но по неизвестной мне причине ни на 1 компе кроме моего это не идет (видимо все дружно отключили HOVER) хотя по MSDN должно пахать на любом PC с IE 3.x и выше.
Приходится использовать нарытое здесь в архивах:
POSITION pos = List.GetFirstSelectedItemPosition();
int zxcv = List.GetNextSelectedItem(pos);
m_Result = List.GetItemText(zxcv,0);
что совсем неудобно для юзера, так как для правильной работы ему приходится кликать сначала правой, потом левой или 2 раза левой, криво одним словом.
Может есть какой способ хитрый как-то с программой включать опцию Ховер и соотв. выключать при завершении?
Здравствуйте, Korrh, Вы писали:
K>Вопрос 1 — как в СListCtrl (даже ClistCtrlEx) сделать так, чтобы выбирался не только крайний левый элемент, а вся строка? K>(на codeproject есть, но там так закручено......=(( )
Здравствуйте, Korrh, Вы писали:
K>Вопрос 2 — получение значения выбранного элемента:
//single/single select
int iCurSel = List.GetNextItem(-1, LVNI_FOCUSED|LVNI_SELECTED);
// multy select
POSITION pos = pList->GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!\n");
else
{
while (pos)
{
int nItem = pList->GetNextSelectedItem(pos);
TRACE1("Item %d was selected!\n", nItem);
// you could do your own processing on nItem here
}
}
[покоцано...] K>Вопрос 2 — получение значения выбранного элемента:
K>у меня под ХР прекрасно работает int zxcv = List.GetHotItem(); K> m_Result = List.GetItemText(zxcv,0);
K>но по неизвестной мне причине ни на 1 компе кроме моего это не идет (видимо все дружно отключили HOVER) хотя по MSDN должно пахать на любом PC с IE 3.x и выше.
K>Приходится использовать нарытое здесь в архивах:
K>POSITION pos = List.GetFirstSelectedItemPosition(); K> int zxcv = List.GetNextSelectedItem(pos); K> m_Result = List.GetItemText(zxcv,0);
K>что совсем неудобно для юзера, так как для правильной работы ему приходится кликать сначала правой, потом левой или 2 раза левой, криво одним словом.
K>Может есть какой способ хитрый как-то с программой включать опцию Ховер и соотв. выключать при завершении?
Если под "опцию Ховер" понимается автоматическое выделение строки над которой находися мыша,
то
Здравствуйте, Korrh, Вы писали:
K>Вопрос 1 — как в СListCtrl (даже ClistCtrlEx) сделать так, чтобы выбирался не только крайний левый элемент, а вся строка?
List.SetExtendedStyle(LVS_EX_FULLROWSELECT);
K>Вопрос 2 — получение значения выбранного элемента:
CString sText;
int n = List.GetSelectionMark();
sText = List.GetItemText(n, 0);
Уважаемые, спасибо за ответы, строка выделяется без проблем, но вот с получением значения — та же херня, что и раньше, какой бы способ из здесь перечисленных я не выбирал, в Едите появляется значение только после 2 кликов левой или по одному левой и правой на выбранном элементе. просто уже не знаю что делать
[]
K>не надо редактировать лист. можно кликнуть на строке в листе и в едите появится код МФО, а можно не искать его и сразу ввести руками.
Абаждите. Ты какой едит имеешь в виду? Некий "внешний" едит? Если да, то тогда вообще проблемы не вижу — тотже NM_CLICK и у тебя уже есть item, т.е. позиция элемента в листе. Тебе же вроде именно это и надо? Т.е.
const NMITEMACTIVATE* item_activate = reinterpret_cast<NMITEMACTIVATE *>(lParam);
const int item = item_activate->iItem;
CString text = List.GetItemText(item, 0);
P> у тебя уже есть item, т.е. позиция элемента в листе. P>[/ccode] P>const NMITEMACTIVATE* item_activate = reinterpret_cast<NMITEMACTIVATE *>(lParam); P>[/ccode]
ну да, элемент CEdit. сорри за неправильную формулировку =(
подожди, item — тот что нужен, откуда он берется???? на lParam ругается =( ничего не понимаю =(