Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как получить информацию о колонке в контроле List View / 12 сообщений из 12, страница 1 из 1
23.12.2005, 19:22
    #33455301
Eugene7
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию о колонке в контроле List View
Я делаю так:

Код: plaintext
1.
2.
3.
4.
5.
LV_COLUMN LvCol;
memset(&LvCol,  0 , sizeof(LvCol));
LvCol.mask = LVCF_WIDTH;
ListView_GetColumn(hLV,  1 , &LvCol);
char buf[ 30 ];
MessageBox(NULL, itoa(LvCol.cx, buf,  10 ), NULL, MB_OK);

Везде показывает 0. Почему не возвращаеться размер?
...
Рейтинг: 0 / 0
23.12.2005, 20:51
    #33455377
SnowMan2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию о колонке в контроле List View
Номера столбцов начинаются с 0. Если у тебя 1 столбец, то твой код даст 0, т.к. ты пытаешся определить ширину второго столбца.
...
Рейтинг: 0 / 0
23.12.2005, 21:09
    #33455399
Eugene7
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию о колонке в контроле List View
Нет, у меня 6 столбцов. Я вводил я разные числа. Одно и тоже.
...
Рейтинг: 0 / 0
23.12.2005, 21:45
    #33455426
SnowMan2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию о колонке в контроле List View
Странно. Я проверял твой текст все нормально. Проверь hLV.
...
Рейтинг: 0 / 0
23.12.2005, 22:31
    #33455471
Eugene7
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию о колонке в контроле List View
Еще раз перепроверил hLV, с ним все в порядке. Может как то не так обьявляю или передаю структуру?
...
Рейтинг: 0 / 0
24.12.2005, 08:24
    #33455624
Eugene7
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию о колонке в контроле List View
Проблемму разрешил с помошью использования ListView_GetColumnWidth. Спасибо за ответы
...
Рейтинг: 0 / 0
24.12.2005, 15:04
    #33455833
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию о колонке в контроле List View
Ну вот, а поскольку то, что ты использовал - макра, которая примерно в то же что у тебя раскрывается, то ты можешь посмотреть в ее код и увидеть, как это делать правильно, и что у тебя не так.
...
Рейтинг: 0 / 0
24.12.2005, 17:37
    #33455939
Eugene7
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию о колонке в контроле List View
MasterZivНу вот, а поскольку то, что ты использовал - макра, которая примерно в то же что у тебя раскрывается, то ты можешь посмотреть в ее код и увидеть, как это делать правильно, и что у тебя не так.

Нет, и то и другое - макры, и они разные(они первая представляет из себя примерно вот это:

SendMessage(hLV, LVM_GETCOLUMN, 1, &LvCol)

а вторая вот это:

SendMessage(hLV, LVM_GETCOLUMNWIDTH, 1, 0)

Просто первая возвращает всю информацию о столбце(пишет ее в структуру),
а вторая возвращает только размер.

А проблемма была в том, что надо было в структуре в LvCol.cx положить адрес переменной, в которую будет записан размер.
...
Рейтинг: 0 / 0
25.12.2005, 10:08
    #33456190
SnowMan2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию о колонке в контроле List View
Странно однако! Создал на форме ListBox с двумя столбцами, создал кнопку, в функцию кнопки скопировал указанный текст программы, в начало добавил строки:

Код: plaintext
1.
HWND hLV;
hLV = ListBox1->Handle;

Все отлично работает, навернека причина не в указанном фрагменте, делалось на C++Builder.

P.S. Так много не напрограммируешь. Переходи на Builder или на худой конец на VC.
...
Рейтинг: 0 / 0
25.12.2005, 11:42
    #33456207
Eugene7
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию о колонке в контроле List View
SnowMan2Странно однако! Создал на форме ListBox с двумя столбцами, создал кнопку, в функцию кнопки скопировал указанный текст программы, в начало добавил строки:

Код: plaintext
1.
HWND hLV;
hLV = ListBox1->Handle;

Все отлично работает, навернека причина не в указанном фрагменте, делалось на C++Builder.

P.S. Так много не напрограммируешь. Переходи на Builder или на худой конец на VC.

У тебя все обернуто в классы, я же программирую на чистом WinApi. Причина именно в этом фрагменте, я в msdn ответ на этот вопрос выискал(в msdn есть почти все, но как же там тяжело что то выискивать из такой кучи информации...)

ps. Вообще то я на VC программирую(WinApi). А на счет много не напрограммирую - спорный вопрос, очень спорный. Если не сложно, расскажи чем быстрее программировать на VCL(builder) ?
...
Рейтинг: 0 / 0
25.12.2005, 16:10
    #33456303
SnowMan2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию о колонке в контроле List View
авторрасскажи чем быстрее программировать на VCL(builder) ?
Тут www.sql.ru/forum/actualthread.aspx?tid=24878 был большой спор о том что лучше BC++Builder или VC++.
Для примера скажу, что для проверки твоего примера потребовалось написать две строчки (приведенные ранее) и меньше минуты времени.

Если использовать VCL, то для решения этой задачи потребуеся одна строка:

Код: plaintext
int w=ListView1->Columns->Items[ 1 ]->Width;


P.S. WinApi знать очень полезно, но писать быстрее с классами.
...
Рейтинг: 0 / 0
26.12.2005, 08:20
    #33456652
Eugene7
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию о колонке в контроле List View
SnowMan2 авторрасскажи чем быстрее программировать на VCL(builder) ?
Тут www.sql.ru/forum/actualthread.aspx?tid=24878 был большой спор о том что лучше BC++Builder или VC++.
Для примера скажу, что для проверки твоего примера потребовалось написать две строчки (приведенные ранее) и меньше минуты времени.

Если использовать VCL, то для решения этой задачи потребуеся одна строка:

Код: plaintext
int w=ListView1->Columns->Items[ 1 ]->Width;


P.S. WinApi знать очень полезно, но писать быстрее с классами.

Аналог той строки, что ты написал:
int w = ListView_GetColumnWidth(hLV, 1);

ps. Вообщем кому как нравиться, тот так и программирует. Сейчас уже спора builder vs vc нету, теперь .NET и JAVA правят повсеместно.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как получить информацию о колонке в контроле List View / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]