Помощь в написании студенческих работ
Антистрессовый сервис

Разработка интерфейса пользователя на С++

Реферат Купить готовую Узнать стоимостьмоей работы

Виджеты Qt генерируют сигналы в ответ на выполнение пользователем какого-то действия или изменение состояния. Например, QPushButton генерируют сигнал clicked () при нажатии пользователем кнопки. Сигнал может быть связан с функцией (называемой слотом в данном контексте) для автоматического ее выполнения при получении данного сигнала. В примере связываем сигнал кнопки clicked () со слотом quit… Читать ещё >

Разработка интерфейса пользователя на С++ (реферат, курсовая, диплом, контрольная)

Содержание

  • Win32 Application
  • Разработка интерфейса пользователя с использованием WinApp
  • Создание простого Win32 Application
  • Создание диалогового окна Создание меню Создание кнопки Создание поля редактирования Работа с Сheckbox
  • Разработка интерфейса пользователя с использованием MFC
  • Создание
  • приложение Windows Application
  • Работа с окнами Создание диалога с вкладками Создание меню Создание элементов управления Создание кнопки Создание поля редактирования Работа со списками Создание списка CCheckListBox
  • Стандартный диалог открытия файлов Разработка интерфейса пользователя с использованием Qt
  • Работа с окнами Создание кнопки
  • Заключение
  • Список литературы

Параметр IpCompareltemStrudl является указателем на структуру COMPAREITEMSTRUCT, в которой определяется относительное положение двух сравниваемых элементов списка. Функция возвращает следующие значения:

— 1 Первый элемент меньше второго

0 Первый элемент равен второму

1 Первый элемент больше второго Пример создания CListBox.

Сначала определяется в оконном классе указатель на переменную типа CListBox:

CButton* m_btn1;

CButton* m_btn2;

CListBox* m_lbListBox;

Далее создается соответствующий объект:

int CMyMainWnd: OnCreate (LPCREATESTRUCT lpCreateStruct){

m_btn1 = new CButton;

m_btn2 = new CButton;

m_lbListBox = new CListBox;

m_lbListBox->Create (WS_VISIBLE-WS_CHILD;

LBS_STANDARD-WS_HSCROLL-LBS_STANDARD, CRect (130,0,230,180),

this, 1202);

return 0;

}

Параметры у функции Create аналогичны параметрам одноимённой функции для кнопки. В первом из них присутствуют некоторые стили, специфичные для ListBox’а (с префиксом LBS_). Последний параметр, как всегда, надо выбрать уникальным.

Так как ListBox создан динамически, то его надо уничтожить в деструкторе класса:

~CMyMainWnd (){

delete m_btn2;

delete m_lbListBox;

}

Запускаем программу. На форме должен появится список.

Естественно он пустой. Добавим в функции OnCreate несколько элементов для него:

int CMyMainWnd: OnCreate (LPCREATESTRUCT lpCreateStruct){

m_lbListBox->Create (WS_VISIBLE-WS_CHILD-LBS_STANDARD;

WS_HSCROLL-LBS_STANDARD, CRect (130,0,230,180), this, 1202);

m_lbListBox->AddString («Igor»);

m_lbListBox->AddString («Otto»);

m_lbListBox->AddString («Victor»);

return 0;

}

Рис.21

Создание списка CCheckListBox

Класс CCheckListBox позволяет создать элемент управления, сочетающий свойства списка и флажков (кнопок выбора): он представляет собой обычный список (LIST BOX), в котором к каждой строке добавлен слева флажок (CHECK BOX), устанавливая или снимая который пользователь может выбирать строки (элементы) списка.

Для получения и установления стиля флажков списка предназначены функции:

UINT CCheckListBox: GetCheckStyle ()

Возвращает стиль флажков.

void CCheckListBox: SetCheckStyle (UINT nStyle)

Параметр nStyle задает стиль флажков и может принимать следующие значения: BS_CHECKBOX, BS_AUTOCHECKBOX, BS_AUTO3STATE или BS_3STATE. Рассмотрим каждое немного подробнее. BS_AUTOCHECKBOX — CheckBox имеет два состояния: флажок либо установлен, либо сброшен. BS_AUTO3STATE — CheckBox имеет три состояния: первые два, как у BS_AUTOCHECKBOX, и третье (назовем его неопределенным), когда флажок установлен, но фон окрашен серым цветом вместо белого. BS_CHECKBOX — аналогичен BS_AUTOCHECKBOX за тем исключением, что задача по установке и сбросу флажка ложится на программиста (при клике по BS_AUTOCHECKBOX и BS_AUTO3STATE, их состояние меняется автоматически).

Стандартный диалог открытия файлов В качестве примера создадим пункт меню Open в меню File с идентификатором ID_OPEN.

Рис.22

Реакция на событие выбора меню.

BEGIN_MESSAGE_MAP (CMainWnd, CFrameWnd) // таблица откликов на сообщения

ON_WM_PAINT ()

ON_COMMAND (ID_OPEN, OnOpen) // Реакция на выбор меню Open

ON_COMMAND (ID_FILE_EXIT, MenuExit) // Обработка реакции на выбор меню

END_MESSAGE_MAP ()

Описание функции реакции:

class CMainWnd: public CFrameWnd

{

public:

CMainWnd (); // Конструктор по умолчанию

void OnOpen (); // эта функция вызовется при выборе меню Open

afx_msg void OnLButtonDblClk (UINT, CPoint);

}

И реализация:

void CMainWnd: OnOpen ()

{

CFileDialog fileDialog (TRUE, NULL," *.cpp"); //объект класса выбора файла

int result = fileDialog. DoModal (); //запустить диалоговое окно

if (result==IDOK) //если файл выбран

{

AfxMessageBox (fileDialog.GetPathName ()); // показать полный путь

}

}

Диалоговое окно появится при выборе пункта меню File -> Open.

Рис. 23 Диалоговое окно открытия файла Описание В MFC есть стандартный класс для открытия и сохранения файлов CFileDialog. Смотрите, в функции OnOpen () объявляем класс, первый параметр простой TRUE — диалог открытия, FALSE диалог сохранения. Следующий параметр сейчас пока не нужен, он есть ниже. И расширения для открытия. Функция DoModal (), если она возвращает код кнопки OK, то получаем имя.

Диалог сохранения файла:

CFileDialog fileDialog (FALSE, NULL," *.cpp");

Выбор нескольких файлов в диалоговом окне:

CFileDialog fileDialog (TRUE, NULL," *.*", OFN_ALLOWMULTISELECT);

int result = fileDialog. DoModal ();

if (result==IDOK)

{

POSITION ps=fileDialog.GetStartPosition (); // получить начальную позицию

while (ps) AfxMessageBox (fileDialog.GetNextPathName (ps));// пока есть выбранные файлы

}

Так выглядит диалог в режиме выбора нескольких файлов.

Рис.24

При выборе нескольких файлов может возникнуть ситуация, что не возможно выбрать файлов больше некоторого количества. Выход в увеличении внутреннего буфера, вот так это можно сделать.

int iBufferSize = 100 000;

CFileDialog fileDialog (TRUE, NULL," *.*", OFN_ALLOWMULTISELECT ;

OFN_NOVALIDATE); // выбор нескольких файлов

fileDialog.m_ofn.nMaxFile = iBufferSize; // устанавливаем размер буфера

char* cNewBuffer = new char[iBufferSize]; // выделяем место

fileDialog.m_ofn.lpstrFile = cNewBuffer; // даем указатель на новое место

fileDialog.m_ofn.lpstrFile[0] = NULL; // ничего нет

int result = fileDialog. DoModal ();

if (result==IDOK)

{

POSITION ps=fileDialog.GetStartPosition (); // получить начальную позицию

while (ps) AfxMessageBox (fileDialog.GetNextPathName (ps));// пока есть выбранные файлы

}

delete []cNewBuffer;// освобождаем выделенную память Дальше необходимо получить позицию в переменную типа POSITION, эта переменная передается как указатель в функцию GetNextPathName (), а она выдает строку по этой позиции, и заодно уменьшает позицию. Когда файлов нет позиция станет равной 0.

Фильтр на несколько файлов:

CFileDialog fileDialog (TRUE, NULL," *.mak;*.rc");

Через точку с запятой можно передавать несколько расширений. В Windows функция открытия файлов уже есть, и эта возможность взята из Win32 описания.

Выбор типа. За типом указан фильтр. Расширения для открытия ограничены скобками -*.mak-.

CFileDialog fileDialog (TRUE, NULL," *.mak", NULL," File Mak (*.mak)-*.mak-Resouce Files (*.res)-*.res-");

int result = fileDialog. DoModal ();

Вот так это выглядит:

Рис.25

Для добавление расширения для сохранения файлов установлена 2-я переменная. Это расширение, которое будет добавляться в конец файла.

CFileDialog fileDialog (FALSE," obj" ," *.obj");

Таким образом получаем:

Создается класс и настраиваются параметры: CFileDialog fileDialog (TRUE, NULL," *.cpp");

Запускается окно диалога: int result = fileDialog. DoModal ();

Получается имя файла:

if (result==IDOK)

{

AfxMessageBox (fileDialog.GetPathName ()); // показать полный путь

}

Разработка интерфейса пользователя с использованием Qt

Цель данного раздела — дать в общих чертах основную идею современного метода программирования в частности разработки пользовательского интерфейса.

Qt представляет собой комплексную рабочую среду, предназначенную для разработки на С++ межплатформенных приложений с графическим пользовательским интерфейсом по принципу «написал программу — компилируй ее в любом месте». Qt позволяет программистам использовать дерево классов с одним источником в приложениях, которые будут работать в системах Windows, Mac OS, Linux, Solaris, HP-UX и во многих других версиях Unix с X11. Библиотеки и утилиты Qt входят также в состав Qtopia Core — программного продукта, обеспечивающего собственную оконную систему для Embedded Linux.

Для сравнения кода написания программ приведем несколько примеров.

Работа с окнами Пример простой Qt-программы:

#include

#include

int main (int argc, char *argv[])

{

QApplication app (argc, argv);

QLabel *label = new QLabel («Hello Qt!»);

label->show ();

return app. exec ();

}

В строках 1 и 2 в программу включаются определения классов QApplication и QLabel. Для каждого Qt-класса имеется заголовочный файл с тем же именем (с учетом регистра), содержащий определение этого класса.

В строке 5 создается объект QApplication для управления всеми ресурсами приложения. Для конструктора QApplication необходимо указывать параметры argc и argv, поскольку Qt сама обрабатывает некоторые из аргументов командной строки.

В строке 7 создается «виджет» текстовая метка QLabel, который выводит на экран сообщение «Hello Qt!» (здравствуй, Qt). По терминологии Qt и Unix виджетом (widget) называется любой визуальный элемент графического интерфейса пользователя. Кнопки, меню, полосы прокрутки и фреймы являются примерами виджетов. В данном примере QLabel является окном приложения.

Строка 7 делает текстовую метку видимой. Виджеты всегда создаются сначала невидимыми, и поэтому до непосредственного вывода на экран вы можете настроить их и тем самым не допустить мерцания экрана.

Строка 8 обеспечивает передачу управления приложением Qt. В этом месте программа переходит в цикл обработки событий, т. е. в своего рода режим «простоя», ожидая со стороны пользователя таких действий, как щелчок мышки или нажатие клавиши на клавиатуре.

Для простоты не делаем вызов оператора delete для объекта QLabel в конце функции main (). Подобная утечка памяти в такой небольшой программе безвредна, поскольку после завершения программы эта память будет возвращена операционной системой.

Результат:

Рис.26

Создание кнопки В примере используется QPushButton в качестве главного виджета и добавляется код, обеспечивающий реакцию программы на действие пользователя (нажатие кнопки).

#include

#include

int main (int argc, char *argv[])

{

QApplication app (argc, argv);

QPushButton *button = new QPushButton («Quit»);

QObject:connect (button, SIGNAL (clicked ()),

&app, SL0T (quit ()));

button->show ();

return app. exec ();

}

Виджеты Qt генерируют сигналы в ответ на выполнение пользователем какого-то действия или изменение состояния. Например, QPushButton генерируют сигнал clicked () при нажатии пользователем кнопки. Сигнал может быть связан с функцией (называемой слотом в данном контексте) для автоматического ее выполнения при получении данного сигнала. В примере связываем сигнал кнопки clicked () со слотом quit () объекта приложения QApplication. Макросы SIGNAL () и SLOT () являются частью синтаксиса.

Результат:

Рис.27

Заключение

В работе была рассмотрена основная идеология разработки пользовательского интерфейса, способы разработки (WinApp, MFC). Продемонстрированы коды программ для создания основных элементов пользовательского интерфейса.

В заключении следует отметить следующие основные моменты касающиеся разработки пользовательского интерфейса:

Главное качество интерфейса — это его удобство, поэтому разрабатывать интерфейс следует прежде всего с ориентацией на конкретного пользователя.

Сложность разрабатываемых приложений с каждым годом растет и разработчику приходится выполнять довольно трудоемкую и время затратную работу по разработке пользовательского интерфейса. В связи с чем для эффективности в работе следует использовать современные технологии ООП (объектно-ориентированного программирования), такие как своего рода классовые оболочками над WinAPI — MFC, VCL которые призваны упростить создание окон.

При разработке приложения необходимо учитывать базовое программное обеспечение на котором работает конечный пользователь. На сегодняшний день существует инструментарий для создания кросс платформенных приложений таким инструментом является Qt. Применение самой современной кросс платформенной технологии для разработки пользовательского интерфейса позволяет разработать интерфейсы одинаково корректно функционирующий для различных операционных систем.

Список литературы

Тео Мандел Разработка пользовательского интерфейса. М.:ДМК пресс, 2001. 416 с.

Баженова И.Ю. С++ &Visual Studio .NET Самоучитель программирования. М.: КУДИЦ-ОБРАЗ, 2003. 448 с.

Жасмин Бланшет, Марк Саммерфилд Qt 4. Программирование GUI на C++. М.:КУДИЦ-Пресс, 2007. 648 с.

http://www.excode.ru/art7896p2.html

http://www.realcoding.net/articles/cs/mfc

http://www.ucancode.net/faq/MFC-Tab-Control-CTabCtrl.htm

http://www.firststeps.ru/mfc/steps/

http://abc-it.narod.ru/PROGCPPznakom.htm

http://therat.msk.ru/article.php?go=menu1.htm

http://msdn.microsoft.com/ru-ru/library/89c2aa4b.aspx#Y1596

http://www.progs.biz/winapi/winapi/lessons/020.aspx

http://abc-it.narod.ru/PROGCPPznakom.htm

http://www.excode.ru/art7896p2.html

http://therat.msk.ru/article.php?go=menu1.htm

http://msdn.microsoft.com/ru-ru/library/89c2aa4b.aspx#Y1596

http://www.progs.biz/vc/mfc/lessons/010.aspx

http://www.realcoding.net/articles/glava-16-eti-raznoobraznye-elementy-upravleniya.html

http://www.progs.biz/vc/mfc/lessons/012.aspx

http://www.firststeps.ru/mfc/steps/

Жасмин Бланшет, Марк Саммерфилд Qt 4. Программирование GUI на C++. М.:КУДИЦ-Пресс, 2007. 648 с.

Показать весь текст

Список литературы

  1. Тео Мандел Разработка пользовательского интерфейса. М.:ДМК пресс, 2001. 416 с.
  2. И.Ю. С++ &Visual Studio .NET Самоучитель программирования. М.: КУДИЦ-ОБРАЗ, 2003. 448 с.
  3. Жасмин Бланшет, Марк Саммерфилд Qt 4. Программирование GUI на C++. М.:КУДИЦ-Пресс, 2007. 648 с.
  4. http://www.excode.ru/art7896p2.html
  5. http://www.realcoding.net/articles/cs/mfc
  6. http://www.ucancode.net/faq/MFC-Tab-Control-CTabCtrl.htm
  7. http://www.firststeps.ru/mfc/steps/
  8. http://abc-it.narod.ru/PROGCPPznakom.htm
  9. http://therat.msk.ru/article.php?go=menu1.htm
  10. http://msdn.microsoft.com/ru-ru/library/89c2aa4b.aspx#Y1596
  11. http://www.progs.biz/winapi/winapi/lessons/020.aspx
Заполнить форму текущей работой
Купить готовую работу

ИЛИ