15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту

Создание таблицы на лету.

Автор: Rajiv Ramachandran

  • Скачать исходники - 14 Kb
  • Скачать демонстрационный проект - 22 Kb

    Скриншот примера - SizeDemo.gif

    Описание

    Одно из моих приложениий требовало, чтобы пользователь мог изменять видимую область на лету. Нечто похожее есть в MS-Word в виде выпадающего окна для создания таблицы. Так вот этот пример тоже самое :).

    Совместимость: Visual C++5, 6, MFC

    Это окно имеет следующие возможности :

    1. Требует добавления в Ваш проект всего пары строк
    2. Выпадает где угодно с заданным начальным размером
    3. Позволяет пользователю выбрать нужное количество строк и колонок
    4. Позволяет расширять отображаемые строки и колонки динамически

    Использование данного элемента управления

    1. Добавьте TableWnd.cpp в Ваш проект
    2. Создайте в родительском классе переменную-член типа CTableWnd
    3. Конструктору требуется 5 аргументов. CTableWnd::CTableWnd(int maxx,int maxy,int nX,int nY,UINT nID) maxx и maxy максимальное количество строк и колонок, которые будут отображаться в окне.nX и nY начальное количество строк и колонок, которые будут отображаться в окне.nID - это номер (id) сообщения, которое будет передаваться родительскому окну, после того, как пользователь сделает свой выбор. По умолчанию эти параметры определены как TW_SETPARAMS.
    4. Чтобы окно "выпало" - достаточно вызвать создающую функцию-член: m_TableWnd.Create(parentWnd,nPosX,nPosY); где parentWnd - родительское окно, а nPosX и nPosY - это X и Y координаты экрана, где будет отображено выпадающее окно
    5. В DefWindowProc вашего родительского окна, обработайте сообщение TW_SETPARAMS. Новое количество строк и колонок посылается как LOWORD и HIWORD соответственно в параметре wParam.

      Вот вроде и всё.

    Весь процесс выглядит следующим образом. CTableWnd создаёт себя и вычисляет свои размеры исходя из количества строк и колонок заданных для отображения. Также он создаёт статический элемент управления, который используется для отображения текущего количества строк и колонок. Изначально все квадратики белые. Если двигать мышкой по окну, то пространство квадратов выше и левее курсора мышки будет выделяться и окрашиваться в синий цвет. Если пользователь будет перемещать курсор мышки удеживая нажатой левую кнопку, то окно автоматически будет расширяться до тех пор, пока не превысит значения maxx и maxy , заданные в конструкторе.

    И напоследок, когда окно будет закрыто, то класс не будет уничтожен. Чтобы не использовать многократно тот же самый объект. Поэтому для безопасности лучше использовать статическую или локальную переменную.