Рейтинг:
16
Jochen Arndt
Вы должны передать указатель на LVINSERTMARK
структура (которая является LPLVINSERTMARK
; LP указывает, что это указатель):
// Structure as local variable
LVINSERTMARK lvim;
// [EDIT]
// Must set the cbSize member
lvim.cbSize = sizeof(LVINSERTMARK);
// [/EDIT]
// Pass the address of the structure
if (m_probelist_ctl.GetInsertMark(&lvim))
{
// Access structure element
int nitem = lvim.iItem
}
Member 13089825
привет, спасибо, что его компиляция прошла успешно, но GetInsertMark (&lvim)возвращает ложные alwyas.
я делаю это, удаляя элемент в списке, и после этого я вызываю GetInsertMark(& lvim), но он возвращает false alwyas
Jochen Arndt
Смотрите мой обновленный ответ.
Структура должна быть инициализирована.
Я думал, что это делается с помощью GetInsertMark (), но это должно быть сделано.
Member 13089825
теперь также возвращая false и lvim имеют нижеприведенную valuse
cbSize = 16
dwFlags = 2147483648
пункт = -1
dwReserved = 3435973836
нужно ли мне позвонить в setinsertmark прежде чем позвонить getinsertmark?
Jochen Arndt
Значения элементов структуры не определены (случайны), если вызов не удался.
Возможные причины сбоев описаны по адресу https://msdn.microsoft.com/en-us/library/windows/desktop/bb774945 (v=vs.85). aspx (функция просто отправляет это сообщение в элемент управления списком)
"Точка вставки может появиться только в том случае, если элемент управления list-view находится в режиме icon view, small icon view или tile view, а не в режиме group-view."
и
"Примечание чтобы использовать это сообщение, вы должны предоставить манифест с указанием Comclt32.dll версия 6.0. дополнительные сведения о манифестах см. В разделе включение визуальных стилей."
Member 13089825
"Точка вставки может появиться только в том случае, если элемент управления list-view находится в режиме icon view, small icon view или tile view, а не в режиме group-view"
Привет, даже если я использую iconview также getinsertmark возвращается значение false.
Jochen Arndt
Может быть, на самом деле нет никакой точки вставки.
Попробуйте установить все остальные члены lvim равными нулю (dwFlags, iItem, dwReserved) и проверить iItem после вызова. Если это значение равно -1, то точка вставки отсутствует.
Member 13089825
я добавил Вот так
lvim. cbSize = sizeof (lvim); / / / / необходимо установить член cbSize
//memset(lvim. cbSize, 0, sizeof(LVINSERTMARK));
лвим.iItem = 0;
lvim. dwFlags = 0;
lvim. dwReserved = 0;
если (m_probelist_ctl.GetInsertMark (& lvim)) / / передать адрес структуры
{
// Элемент структуры доступа
int nitem = lvim.пункт;
}
но все равно он показывает -1
Jochen Arndt
Вы установили iItem в ноль, но теперь он равен -1. Это говорит вам о том, что на самом деле точка вставки не определена. Вы можете установить его с помощью SetInsertMark ().
Рейтинг:
1
Member 13089825
привет спасибо за ответ,
когда я даю ниже одну его ошибку затирания, как тип аргумента LPLVINSERTMARK * * несовместим с типом paramater LPLVINSERTMARK
если (m_probelist_ctl.GetInsertMark (lvim)
int nitem = = lvim->iItem //<-- what is this statement supposed to be?
сохранение текущего положения маркера вставки
Richard MacCutchan
Нет, это не так, у вас их два =
знаки, которые являются тестом на равенство. Вам действительно нужно более тщательно проверить свой код.