Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

таблица для отображения статистики

18K
24 ноября 2007 года
af1x
31 / / 19.11.2007
как сделать таблицу для отображения статистики чего либо. Например в крайне левой вертикальной колонке фамилии, в последующих произвольные числовые данные (самая верхняя горизонтальная полоса - названия колонок)?? Может уже что-то готовое есть?:rolleyes: Пишу на с++
397
24 ноября 2007 года
SergPas
527 / / 03.02.2007
Для этой цели в WinAPI предусмотрен один элемент управления ListView, который в свою очередь состоит из 2-х элементов- "таблички" и заголовка. Последний может существовать как отдельный элемент.
ListView создаётся функцией CreateWindow, указав в качестве класса окна WC_LISTVIEW.Этот класс окна регистрируется, когда загружается динамически компонуемая библиотека (DLL) общих элементов управления (common controls). Чтобы гарантировать, что эта DLL загружена используется функция InitCommonControls(). Чтобы задать табличную форму отображения данных, окно должно быть создано со стилем LVS_REPORT. Если требуется расчертить в таблице линии, то используется макрос ListView_SetExtendedListViewStyle. Это насчёт создания таблицы. Теперь заполнение ячеек таблицы. Заполняем структуру LVCOLUMN:
Код:
typedef struct _LVCOLUMN {
    UINT mask;
    int fmt;
    int cx;
    LPTSTR pszText;
    int cchTextMax;
    int iSubItem;
#if (_WIN32_IE >= 0x0300)
    int iImage;
    int iOrder;
#endif
} LVCOLUMN, FAR *LPLVCOLUMN;

Описание полей:
mask- это поле определяет, какие поля в структуре определены;
cx- задаёт ширину колонки таблицы;
pszText- задаёт текст колонки.
Для добавления колонки в ListViewer используется макрос ListView_InsertColumn:
 
Код:
int ListView_InsertColumn(
    HWND hwnd,  
    int iCol,  
    const LV_COLUMN FAR *pcol  
   );

где hwnd- дескриптор ListView
iCol- порядковый номер столбца
pcol- указатель на структуру данных LVCOLUMN

Структура LV_ITEM используется для заполнения ячеек татлицы.
Код:
typedef struct _LVITEM {
    UINT mask;
    int iItem;
    int iSubItem;
    UINT state;
    UINT stateMask;
    LPTSTR pszText;
    int cchTextMax;
    int iImage;
    LPARAM lParam;
#if (_WIN32_IE >= 0x0300)
    int iIndent;
#endif
#if (_WIN32_IE >= 0x560)
    int iGroupId;
    UINT cColumns; // tile view columns
    PUINT puColumns;
#endif

} LVITEM, FAR *LPLVITEM;

Поля структуры:
mask- набор битовых флагов, состав которых определяет, какие поля в структуре заполнены;
iItem- фактически обозначает порядковый номер строки "таблицы";
iSubItem- порядковый номер столбца "таблицы";
pszText- текст.
Добавление новой "строки" в "таблицу" осуществляется макросом ListView_InsertItem:
 
Код:
int ListView_InsertItem(
    HWND hwnd,
    const LPLVITEM pitem
);

Макрос ListView_SetitemText позволяет изменить текст ячейки в таблице.
Единственный недостаток такой "таблицы" состоит в невозможности её "динамического" редактирования, но для отображения табличных данных сгодится.
534
25 ноября 2007 года
HarryAxe
448 / / 19.01.2006
Цитата:
Единственный недостаток такой "таблицы" состоит в невозможности её "динамического" редактирования, но для отображения табличных данных сгодится.

Как это низзя? Задаём флаг стиля LVS_EDITLABELS при создании или посредством SetWindowLong() и реагируем на LVN_ENDLABELEDIT - всего-то делов.

397
25 ноября 2007 года
SergPas
527 / / 03.02.2007
Цитата:
Как это низзя? Задаём флаг стиля LVS_EDITLABELS при создании или посредством SetWindowLong() и реагируем на LVN_ENDLABELEDIT - всего-то делов.

В своё время я тоже задавался вопросом "динамического" (посредствои ввода с клавиатуры) редактирования табличных данных элемента управления ListViewer'a. Действительно, при создании такой "таблицы" со стилем LVS_EDITLABELS можно редактировать, но... но только первый "столбец"...

18K
02 декабря 2007 года
af1x
31 / / 19.11.2007
Цитата: SergPas
Для этой цели в WinAPI предусмотрен один элемент управления ListView, который в свою очередь состоит из 2-х элементов- "таблички" и заголовка. Последний может существовать как отдельный элемент.
ListView создаётся функцией CreateWindow, указав в качестве класса окна WC_LISTVIEW.Этот класс окна регистрируется, когда загружается динамически компонуемая библиотека (DLL) общих элементов управления (common controls). Чтобы гарантировать, что эта DLL загружена используется функция InitCommonControls(). Чтобы задать табличную форму отображения данных, окно должно быть создано со стилем LVS_REPORT. Если требуется расчертить в таблице линии, то используется макрос ListView_SetExtendedListViewStyle. Это насчёт создания таблицы. Теперь заполнение ячеек таблицы. Заполняем структуру LVCOLUMN:
Код:
typedef struct _LVCOLUMN {
    UINT mask;
    int fmt;
    int cx;
    LPTSTR pszText;
    int cchTextMax;
    int iSubItem;
#if (_WIN32_IE >= 0x0300)
    int iImage;
    int iOrder;
#endif
} LVCOLUMN, FAR *LPLVCOLUMN;

Описание полей:
mask- это поле определяет, какие поля в структуре определены;
cx- задаёт ширину колонки таблицы;
pszText- задаёт текст колонки.
Для добавления колонки в ListViewer используется макрос ListView_InsertColumn:
 
Код:
int ListView_InsertColumn(
    HWND hwnd,  
    int iCol,  
    const LV_COLUMN FAR *pcol  
   );

где hwnd- дескриптор ListView
iCol- порядковый номер столбца
pcol- указатель на структуру данных LVCOLUMN

Структура LV_ITEM используется для заполнения ячеек татлицы.
Код:
typedef struct _LVITEM {
    UINT mask;
    int iItem;
    int iSubItem;
    UINT state;
    UINT stateMask;
    LPTSTR pszText;
    int cchTextMax;
    int iImage;
    LPARAM lParam;
#if (_WIN32_IE >= 0x0300)
    int iIndent;
#endif
#if (_WIN32_IE >= 0x560)
    int iGroupId;
    UINT cColumns; // tile view columns
    PUINT puColumns;
#endif

} LVITEM, FAR *LPLVITEM;

Поля структуры:
mask- набор битовых флагов, состав которых определяет, какие поля в структуре заполнены;
iItem- фактически обозначает порядковый номер строки "таблицы";
iSubItem- порядковый номер столбца "таблицы";
pszText- текст.
Добавление новой "строки" в "таблицу" осуществляется макросом ListView_InsertItem:
 
Код:
int ListView_InsertItem(
    HWND hwnd,
    const LPLVITEM pitem
);

Макрос ListView_SetitemText позволяет изменить текст ячейки в таблице.
Единственный недостаток такой "таблицы" состоит в невозможности её "динамического" редактирования, но для отображения табличных данных сгодится.




Можно пл. какой-нибудь исходник (с++), где данная таблица используется:) А то что то уменя не пашет

534
03 декабря 2007 года
HarryAxe
448 / / 19.01.2006
Да ё-моё... MSDN-то надо смотреть. Хоть иногда...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог