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

Ваш аккаунт

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

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

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

Таблицы в Vc++

501
21 апреля 2005 года
hell_admin
110 / / 02.10.2004
Здрасте,
такой вопрос: Каким образом можно в VC++ отображать данные в виде таблицы, раньше делал это с MSFlexGrid'oм, но он очень органичен и хочется чегонить более гибкое и ваще у него куча недостатков... В нете конечно есть куча всяких ActiveX таблиц, но я думаю неужели нет в самом VC++ таблицы и единственный вариант использовать ActiveX элементы?
Если да, то какую лучше использовать(из бесплатных), и если писать свою то с чего начать, ведь это не C++ Builder где можно написать компанент?
6.6K
22 апреля 2005 года
hunter
46 / / 22.09.2004
Цитата:
Originally posted by hell_admin
Здрасте,
такой вопрос: Каким образом можно в VC++ отображать данные в виде таблицы, раньше делал это с MSFlexGrid'oм, но он очень органичен и хочется чегонить более гибкое и ваще у него куча недостатков... В нете конечно есть куча всяких ActiveX таблиц, но я думаю неужели нет в самом VC++ таблицы и единственный вариант использовать ActiveX элементы?
Если да, то какую лучше использовать(из бесплатных), и если писать свою то с чего начать, ведь это не C++ Builder где можно написать компанент?



ListView одним словом! Тем более он стандартный

488
22 апреля 2005 года
Mоngооsе
465 / / 01.04.2005
На codeproject.com есть очень хороший класс CGridCtrl. Я его использоваль уже во многих программах.
262
22 апреля 2005 года
Iktomy
1.2K / / 11.10.2004
Цитата:
Originally posted by hell_admin
Здрасте,
такой вопрос: Каким образом можно в VC++ отображать данные в виде таблицы, раньше делал это с MSFlexGrid'oм, но он очень органичен и хочется чегонить более гибкое и ваще у него куча недостатков... В нете конечно есть куча всяких ActiveX таблиц, но я думаю неужели нет в самом VC++ таблицы и единственный вариант использовать ActiveX элементы?
Если да, то какую лучше использовать(из бесплатных), и если писать свою то с чего начать, ведь это не C++ Builder где можно написать компанент?


Для Visual C++ существует множество классов сторонних разработчиков, есть и хорошие бесплатные варианты. Просто поройся по нужным сайтам и все найдешь. Я бы тебе посоветовал хорошодокументированный и бесплатный класс таблиц - но боюсь сочтут за рекламу (хоть и не я его писал, но просто общался с автором) или флуд (просто и раньше я о нем упоминал)

11K
28 апреля 2005 года
ysbp
2 / / 28.04.2005
Цитата:
Originally posted by Mоngооsе
На codeproject.com есть очень хороший класс CGridCtrl. Я его использоваль уже во многих программах.



Не могли бы вы подсказать как подключить этот грид (gridctrl) к проекту?

488
28 апреля 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by ysbp
Не могли бы вы подсказать как подключить этот грид (gridctrl) к проекту?


1. Нужно добавить к проекту *.h и *.cpp файлы из каталогов NewCellTypes и GridCtrl_src.

2. К .h файлу модуля, где будет использоваться этот класс подключить GridCtrl.h.
И объявить переменную, напр.

CGridCtrl *m_Grid;

3.В срр написать ф-ию создания и напр. вызвать в InitDialog()

Код:
CRect r = CRect(32,19,696,103);
  m_Grid = new CGridCtrl;
  m_Grid->Create(r, this, 1000);   
  m_Grid->SetDlgCtrlID(IDC_GRID);
  m_Grid->SetGridBkColor(RGB(252,252,252));
  m_Grid->EnableDragAndDrop(FALSE);
  m_Grid->GetDefaultCell(FALSE, FALSE)->SetBackClr(RGB(248, 248, 248));
  m_Grid->SetEditable(FALSE);
  m_Grid->SetVirtualMode(FALSE);
  m_Grid->SetListMode(TRUE);
  m_Grid->SetSingleRowSelection(TRUE);
  m_Grid->SetDefCellHeight(19);
  TRY
  {
    m_Grid->SetRowCount(1);            
    m_Grid->SetColumnCount(7);  
    m_Grid->SetFixedRowCount(1);
    m_Grid->SetFixedColumnCount(1);
    m_Grid->SetHeaderSort();
    m_Grid->SetFixedColumnSelection(FALSE);
    m_Grid->SetFixedRowSelection(FALSE);
    m_Grid->SetTrackFocusCell(FALSE);
    m_Grid->SetHeaderSort(FALSE);
  }
  CATCH (CMemoryException, e)
  {
    e->ReportError();
    return;
  }
  END_CATCH
  m_Grid->SetRowHeight(0,24);
 
  GV_ITEM Item;
  Item.mask = GVIF_TEXT|GVIF_BKCLR|GVIF_FGCLR|GVIF_PARAM;
  Item.row = 0;
  Item.crBkClr = RGB(212,208,200);
  Item.crFgClr = RGB(0, 0, 0);
  Item.lParam = 0;
  Item.col = 0;
  str = _T("##");
  Item.strText = str;
  m_Grid->SetItem(&Item);
  Item.col = 1;
  str = _T("Oper");
  Item.strText = str;
  m_Grid->SetItem(&Item);
  Item.col = 2;
  str = _T("Name ID");
  Item.strText = str;
  m_Grid->SetItem(&Item);
  ...
  UINT uFormat;
  int col;
  for(col=0;col<7;col++)
  {
    m_Grid->SetColumnResize(FALSE);
    uFormat = m_Grid->GetItemFormat(0, col);
    uFormat |= DT_VCENTER|DT_CENTER;
    m_Grid->SetItemFormat(0,col, uFormat);
    m_Grid->SetItemFgColour(0, col, RGB(0,0,128));
  }
  m_Grid->SetRowResize(FALSE);
  m_Grid->EnableColumnHide(FALSE);
  m_Grid->AutoSize(FALSE);
   
  m_Grid->SetCompareFunction (CGridCtrl::pfnCellTextCompare);
  m_Grid->SetColumnWidth(0, 48);
  m_Grid->SetColumnWidth(1, 34);
  ...
11K
29 апреля 2005 года
ysbp
2 / / 28.04.2005
Цитата:
Originally posted by Mоngооsе
1. Нужно добавить к проекту *.h и *.cpp файлы из каталогов NewCellTypes и GridCtrl_src.

2. К .h файлу модуля, где будет использоваться этот класс подключить GridCtrl.h.
И объявить переменную, напр.

CGridCtrl *m_Grid;

3.В срр написать ф-ию создания и напр. вызвать в InitDialog()
Код:
CRect r = CRect(32,19,696,103);
  m_Grid = new CGridCtrl;
  m_Grid->Create(r, this, 1000);   
  m_Grid->SetDlgCtrlID(IDC_GRID);
  m_Grid->SetGridBkColor(RGB(252,252,252));
  m_Grid->EnableDragAndDrop(FALSE);
  m_Grid->GetDefaultCell(FALSE, FALSE)->SetBackClr(RGB(248, 248, 248));
  m_Grid->SetEditable(FALSE);
  m_Grid->SetVirtualMode(FALSE);
  m_Grid->SetListMode(TRUE);
  m_Grid->SetSingleRowSelection(TRUE);
  m_Grid->SetDefCellHeight(19);
  TRY
  {
    m_Grid->SetRowCount(1);            
    m_Grid->SetColumnCount(7);  
    m_Grid->SetFixedRowCount(1);
    m_Grid->SetFixedColumnCount(1);
    m_Grid->SetHeaderSort();
    m_Grid->SetFixedColumnSelection(FALSE);
    m_Grid->SetFixedRowSelection(FALSE);
    m_Grid->SetTrackFocusCell(FALSE);
    m_Grid->SetHeaderSort(FALSE);
  }
  CATCH (CMemoryException, e)
  {
    e->ReportError();
    return;
  }
  END_CATCH
  m_Grid->SetRowHeight(0,24);
 
  GV_ITEM Item;
  Item.mask = GVIF_TEXT|GVIF_BKCLR|GVIF_FGCLR|GVIF_PARAM;
  Item.row = 0;
  Item.crBkClr = RGB(212,208,200);
  Item.crFgClr = RGB(0, 0, 0);
  Item.lParam = 0;
  Item.col = 0;
  str = _T("##");
  Item.strText = str;
  m_Grid->SetItem(&Item);
  Item.col = 1;
  str = _T("Oper");
  Item.strText = str;
  m_Grid->SetItem(&Item);
  Item.col = 2;
  str = _T("Name ID");
  Item.strText = str;
  m_Grid->SetItem(&Item);
  ...
  UINT uFormat;
  int col;
  for(col=0;col<7;col++)
  {
    m_Grid->SetColumnResize(FALSE);
    uFormat = m_Grid->GetItemFormat(0, col);
    uFormat |= DT_VCENTER|DT_CENTER;
    m_Grid->SetItemFormat(0,col, uFormat);
    m_Grid->SetItemFgColour(0, col, RGB(0,0,128));
  }
  m_Grid->SetRowResize(FALSE);
  m_Grid->EnableColumnHide(FALSE);
  m_Grid->AutoSize(FALSE);
   
  m_Grid->SetCompareFunction (CGridCtrl::pfnCellTextCompare);
  m_Grid->SetColumnWidth(0, 48);
  m_Grid->SetColumnWidth(1, 34);
  ...



Спасибо, буду пробовать.

12K
20 мая 2005 года
gpl2c
1 / / 20.05.2005
2Mongoose
Цитата:
На codeproject.com есть очень хороший класс CGridCtrl. Я его использоваль уже во многих программах.



А в виртуальном режиме использовал? Можно ли его заставить работать в виртуальном режиме с объединением ячеек?

488
20 мая 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by gpl2c
2Mongoose
А в виртуальном режиме использовал? Можно ли его заставить работать в виртуальном режиме с объединением ячеек?

В виртуальном нет, но пример на codeproject.com работает в виртуальном режиме. Как установить описано с прмерами на html странице компонента. (Или callback ф-я или обработка сообщения GVN_GETDISPINFO.)

284
23 мая 2005 года
michael_is_98
587 / / 25.02.2005
Чем отличается TRY-CATCH-END CATCH от стандартного сишного try-catch
425
23 мая 2005 года
sq_deep
498 / / 18.02.2005
Цитата:
Originally posted by michael_is_98
Чем отличается TRY-CATCH-END CATCH от стандартного сишного try-catch

TRY-CATCH-END CATCH используются а архитектуре MFC. Поэтому, если вы пишете с MFC, есть смысл их использовать, чтобы код был как-то более единообразным по отношению к используемым средствам. Однако, в своих частях кода можно писать и C++-ные try-catch-...

Если же проект не содержит MFC, можно пользоваться только стандартными try-catch-...

284
23 мая 2005 года
michael_is_98
587 / / 25.02.2005
Цитата:
Originally posted by sq_deep
TRY-CATCH-END CATCH используются а архитектуре MFC. Поэтому, если вы пишете с MFC, есть смысл их использовать, чтобы код был как-то более единообразным по отношению к используемым средствам. Однако, в своих частях кода можно писать и C++-ные try-catch-...

Если же проект не содержит MFC, можно пользоваться только стандартными try-catch-...


А чем все-таки они отличаются...
Развивается ли MFC или ему на смену идет более современная технология?

488
23 мая 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by michael_is_98
А чем все-таки они отличаются...
Развивается ли MFC или ему на смену идет более современная технология?

Немношко отличаются. Напр. CATCH макрос автоматически удаляет исключение, а при catch нужно его самому удалить, если оно обработано. Но c++ обработчики исключений генерируются в меньший код и они более универсальны. Макросы считаются устаревшими хоть и поддерживаются в MFC. Если ты имел в виду TRY-CATCH в коде, что я привел, то я думал, что эти макросы определил автор CGridCtrl. Раньше с такими макросами не встречался.

MFC вроде не развивается начиная с VC 4. Теперь некоторые кодеры сильно хвалят WTL, она похожа на MFC, но использует ATL.

425
25 мая 2005 года
sq_deep
498 / / 18.02.2005
Цитата:
Originally posted by michael_is_98
А чем все-таки они отличаются...
Развивается ли MFC или ему на смену идет более современная технология?

1. Отличаются они тем, что TRY/CATCH предназначены для использования с CException и выведенными из него классами. MFC активно использует эти классы для обработки своих исключений. Например, CDatabase генерирует CDBException. При получении такого исключения у нас сразу есть возможность получить не только некий код ошибки, но и описание, предоставленное классом CDatabase, а также строку, возвращаемую драйвером базы данных. Это сильно упрощает обработку ошибок при обращении к БД. Обычно бывает достаточно показать эти две строки, чтобы понять, что именно надо сделать.

2. Сейчас Microsoft продвигает свою платформу .NET, а в ней используется более мощная вешь: .NET Framework. MFC по-прежнему есть, и некоторые части её реализации изменились по сравнению с предыдущей версией, но в общем она осталась та же. Думаю, MFC ждёт судьба STL и подобных библиотек: Microsoft будет её поддерживать, но развивать не будет. И ссылки на неё постепенно пропадут из документации, потому что Билл Гейтс будет заставлять людей пользоваться .NET Framework. Симптоматично в этом смысле то, что в списке фильтров для хелпа MFC вовсе нет, а .NET Framework занимает первую позицию.

Однако, это лишь мои предположения. Утверждать ничего не берусь. Как говаривал Кот Бегемот, история нас рассудит.

23K
06 января 2007 года
kolya_nn
4 / / 06.01.2007
Добрый вечер!
Помогите добрым советом как все-таки объединять ячейки в таблице, созаддной на основе CGridCtrl. Или может посоветуете другой способ отображения таблицы, но чтобы можно было объединять ячейки.
Заранее благодарен.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог