IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Вывод данных в таблицу (https://www.imho.ws/showthread.php?t=73397)

Merlyel 12.11.2004 17:03

Вывод данных в таблицу
 
Visual C++:
Есть небольшой блок данных, который вычисляется в программе.
Его необходимо занести в простенькую таблицу :) Подскажите, плз, где можно найти такой элемент:( может он встроен, просто я не знаю его названия? :(

Al-x 13.11.2004 13:45

В .NET есть DataGrid - создаёшь DataTable, а потом делаешь её DataSource у DataGrid

Merlyel 14.11.2004 04:26

А если не .NET?

BC Scout 14.11.2004 09:38

Может это поможет?
http://www.codeproject.com/miscctrl/gridctrl.asp

Merlyel 15.11.2004 03:22

Похоже на то, что нужно, щас будем проверять :)
ЗЫ. А встроенной такой вещи в Vis C++ нету (интересует MFC)

Duch 17.11.2004 16:39

CListCtrl в MFC - стандартный управляющий элемент Windows.
В режиме report как раз отображает таблицу.

Merlyel 21.11.2004 03:17

Спасибо, я уже сам набрел на CListCtrl. Ток насчет него 1 (пока) вопрос: почему в конструкторе не получается выполнить функцию InsertColumn (например), а в OnInitDialog получается? Или по-другому (гораздо полезнее :) ) как заставить это выполниться в конструкторе?

Duch 22.11.2004 10:53

Вообще все изменения ListCtrl возможны после его создания (когда определен HWND), т.к. все модификации идут через передачу сообщений ему.
Добавление колонки означает добавление нового подэлемента в каждом элементе.
Я добавляю элементы так и все работает:

Добавить эл-т N (2 колонки)

LVITEM li;
li.mask = LVIF_TEXT;
li.iItem = N;
li.iSubItem = 0;
li.pszText = "Text1";
LC.InsertItem( &li );

li.iSubItem = 1;
li.pszText = "Text1";
LC.SetItem( &li );

Когда вызывается конструктор, то интерфейсные элементы Windows еще не созданы, т.е. для твоего ListCtrl еще не создно окно (HWND).
А ф-ия OnInitDialog вызывается после создания окон всех элементов.

Merlyel 22.11.2004 20:02

Лады, с этим разобрались (пасибо :) )
Вот этой надписи хватило:
Цитата:

Вообще все изменения ListCtrl возможны после его создания (когда определен HWND), т.к. все модификации идут через передачу сообщений ему.
Тогда еще пара вопросиков:
Можно сделать так, чтобы получилось как бы две колонки под одним заголовком?
Можно ли разбить элемент на 2 строки (т.е. что-то типа вставить \n)?
И что такое группы (например в функции InsertGroup)?

Duch 22.11.2004 21:46

Рисовать в CCtrlList можно как угодно, если задать стиль OwnerDraw и переопределить ф-ю DrawItem. Но это придется самому отрисовывать все ячейки. Аналогично для заголовков - там есть встроенный HeaderCtrl. Не думаю, что тебе захочется заниматься этим геморроем.
Насчет групп - то я не знаю, что это. В VC++ 6.0 их не было. Посмотрел в MSDN - там написано, что группы для ListCtrl есть только WindowsXP.

Merlyel 22.11.2004 22:37

А все-таки вставить \n или другой разделитель строки !в неизмененный ClistCtrl! никак нельзя?
А пример ты не мог бы привести, как
Цитата:

задать стиль OwnerDraw и переопределить ф-ю DrawItem


Часовой пояс GMT +4, время: 22:14.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.