Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.

Дерево и кнопки для MFC Grid Control


Автор: Ken Bertelson

Grid w/ Tree + Buttons

Implement IE-Style Option Dialog

Описание

Этот пример показывает, как добавить в MFC Grid control (наследованный от CWnd) такие элементы управления как дерево и кнопки.

Пример наследует классы от CGridCellBase, который содержит в себе описание различных типов ячеек. Теперь добавлены следующие типы ячеек:

  • Ячейки которые рисуют дерево
  • Ячейки, которые рисуют один или несколько элементов управления
  • Ячейки, которые рисуют дерево + элементы управления
  • Виртуальные ячейки - не содержащие данных

Работая с CGridCellBase, Вы можете создавать различные виды эффектов не изменяя исходные файлы MFC Grid. Пример позволяет наследовать новый grid класс.

Как установить ячейки, отображающие дерево

Добавьте в заголовочный файл CDialog или CView: 

// (файл .h)
 
     CGridCtrl m_Grid;           // сам грид
     CTreeColumn m_TreeColumn;   // поддержка колонок дерева
 

В CDialog или CView добавьте массив UCHAR-ов, который определяет стандартные уровни дерева. 1=корень, 2=первая ветвь корня и т.д.

// (файл .cpp file)
 
     unsigned char ucPatternAry[] = { 1,2,3,4,4,5,5,3,3,4,2,3,4};
 

В CDialog или CView укажите информацию о колонках, а затем используйте CTreeColumn::TreeSetup() для определения расположений строчек. Для CDialog, это можно сделать в функции OnInitDialog().

// (файл .cpp)
 
     m_Grid.SetColumnCount( 4);
     m_Grid.SetFixedColumnCount( 1);
 
     m_TreeColumn.TreeSetup( &m_Grid, // grid
                       2,           // колонка в которой дерево
                       sizeof( ucPatternAry), // кол-во строк в дереве
                       1,           // Счётчик строк
                       ucPatternAry,// Массив уровней
                       TRUE,        //показываем линии дерева(не grid)
 		        	   // F=не показываем
                       TRUE);       // используем первые 3 картинки из
 			          // существующего списка картинок
 

Вы так же можете изменить существующую структуру дерева, путём вызова из CTreeColumn функции InsertTreeBranch() и DeleteTreeBranch().

Установка ячеек, которые рисуют кнопки

Добавьте в заголовочный файл CDialog или CView следующие строки:

// (файл .h)
 
     CGridCtrl m_Grid;           // сам
     CBtnDataBase m_BtnDataBase; // берём общие свойства для кнопок
 

В .cpp файлы CDialog или CView.

// (файл .cpp)
 
     m_BtnDataBase.SetGrid( &m_Grid);
 

Возможно Вам захочется использовать свойства ячейки с кнопкой для всех кнопочных ячеек.
Это можно сделать только однажды.

// (файл .cpp)
 
   // Сохраняем старые свойства ячейки
   CGridBtnCell GridCellCopy;
   GridCellCopy.SetBtnDataBase( &m_BtnDataBase);
   CGridCellBase* pCurrCell = m_Grid.GetCell( row, col);
   if (pCurrCell)
       GridCellCopy = *pCurrCell;  //данные сохранятся в m_BtnDataBase
 

После того, как окно грида создано, замените стандартные ячейки ячейками с кнопками по Вашему усмотрению. Следующий код вызывается в CDialog::OnInitDialog().

// (файл .cpp)
 
  m_Grid.SetCellType( row, col, RUNTIME_CLASS(CGridBtnCell) );
  CGridBtnCell* pGridBtnCell = (CGridBtnCell*)m_Grid.GetCell(row,col);
 
  // сообщаем новой ячейке - где лежат её свойства
  pGridBtnCell->SetBtnDataBase( &m_BtnDataBase);
 

Пример показывает - как добавить в ячейку до 4-х кнопок.

// (файл .cpp)
 
     pGridBtnCell->SetupBtns(
         0,                  // индекс картинки для рисования
         DFC_BUTTON,         // тип кнопки
         DFCS_BUTTONPUSH,    // на подобие nState в DrawFrameControl()
         CGridBtnCellBase::CTL_ALIGN_CENTER,
                             // горизонтальное выравнивание картинки
         0,                  // ширина, либо 0 для подстраивания под
 			    // размер ячейки
         FALSE,              // T=кнопка входит в группу радиокнопок
         "Btn Text" );       // Текст в кнопке; NULL - текста нет
 

 



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS