Чтение онлайн

на главную - закладки

Жанры

Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:

4. Вернитесь в основной каталог библиотеки FLTK и скопируйте подкаталог FL в каталог C:\Program Files\Microsoft Visual Studio\Vc\include.

Эксперты скажут вам, что было бы лучше инсталлировать библиотеку, а не копировать файлы в каталоги C:\Program Files\Microsoft Visual Studio\Vc\lib и C:\Program Files\Microsoft Visual Studio\Vc\include. Они правы, но мы не стремимся быть экспертами по среде Visual Studio. Если эксперты будут настаивать, попросите их продемонстрировать лучшую альтернативу.

Г.4.

Использование библиотеки FLTK в среде Visual Studio

1. Создайте новый проект в среде Visual Studio, внеся одно изменение в обычной процедуре: выбирая тип проекта, выберите опцию “Win32 project”, а не “Console application”. Убедитесь, что вы создаете “Empty project”; в противном случае мастер добавит в ваш проект много лишнего кода, который вы не поймете и вряд ли будете использовать.

2. Находясь в среде Visual Studio, выберите команду Project в главном меню, а в выпадающем меню выполните команду Properties.

3. В левом меню окна Properties щелкните на пиктограмме Linker. В открывающемся подменю выберите команду Input. В поле редактирования Dependencies, находящемся справа, введите следующий текст:

fltkd.lib wsock32.lib comctl32.lib fltkjpegd.lib fltkimagesd.lib

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

В поле редактирования Ignore Specific Library введите следующий текст:

libcd.lib

4. Этот шаг может оказаться ненужным, так как в настоящее время опция /MDd включается по умолчанию. В левом меню того же самого окна Properties выберите команду C/C++, чтобы открыть другое подменю. Открыв подменю, выберите команду Code Generation. В правом меню измените опцию Runtime Library на Multi-threaded Debug DLL (/MDd). Щелкните на кнопке OK, чтобы закрыть окно Properties.

Г.5. Как тестировать, если не все работает

Создайте новый файл с расширением

.cpp
в новом проекте и введите следующий код. Он должен скомпилироваться без проблем.

#include <FL/Fl.h>

#include <FL/Fl_Box.h>

#include <FL/Fl_Window.h>

int main

{

Fl_Window window(200, 200, "Window title");

Fl_Box box(0,0,200,200,"Hey, I mean, Hello, World!");

window.show;

return Fl::run;

}

Если что-то не работает, выполните следующее.

• Если вы получили сообщение компилятора, утверждающее, что файл с расширением

.lib
невозможно
найти, то, возможно, вы сделали что-то не так при инсталлировании библиотеки. Внимательно проверьте п. 3, в котором указан путь для сохранения библиотечных файлов
(.lib
) на вашем компьютере.

• Если вы получили сообщение компилятора, утверждающее, что файл с расширением

.h
невозможно открыть, значит, скорее всего, вы ошиблись при инсталлировании. Внимательно проверьте п. 3, в котором указан путь для сохранения заголовочных файлов (
.h
) на вашем компьютере.

• Если вы получили сообщение редактора связей, упоминающее о неразрешенных внешних ссылках, то проблема таится в свойствах проекта.

Если наши советы вам не помогли, зовите друга.

Приложение Д

Реализация графического пользовательского интерфейса

“Когда вы наконец поймете, что делаете,

то все пойдет правильно”

Билл Фэйрбэнк (Bill Fairbank)

В этом приложении представлена реализация обратных вызовов, а также классов

Window
,
Widget
и
Vector_ref
. В главе 16 мы не требовали от читателей знать об указателях и операторах приведения типа, поэтому вынесли подробные объяснения в приложение.

Д.1. Реализация обратных вызовов

Обратные вызовы реализованы следующим образом:

void Simple_window::cb_next(Address, Address addr)

// вызов функции Simple_window::next для окна,

// расположенного по адресу addr

{

reference_to<Simple_window>(addr).next;

}

Поскольку вы уже прочитали главу 17, то вам должно быть очевидно, что аргумент

Address
должен иметь тип
void*
. И, разумеется, функция
reference_to<Simple_window>(addr)
должна каким-то образом создавать ссылку на объект класса
Simple_window
из указателя
addr
, имеющего тип
void*
. Однако, если у вас нет опыта программирования, то ничто для вас не “очевидно” и не “разумеется”, пока вы не прочтете главу 17, поэтому рассмотрим и использование адресов подробнее.

Как описано в разделе A.17, язык C++ предлагает способ для указания имени типа. Рассмотрим пример.

typedef void* Address; // Address — это синоним типа void*

Это значит, что мы можем использовать имя

Address
вместо
void*
. В данном случае, используя имя
Address
, мы хотим подчеркнуть, что передаем адрес, и скрыть тот факт, что
void*
— это имя типа указателя на объект, тип которого неизвестен.

Поделиться:
Популярные книги

Адвокат Империи 3

Карелин Сергей Витальевич
3. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 3

Кротовский, может, хватит?

Парсиев Дмитрий
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Кротовский, может, хватит?

Дурная жена неверного дракона

Ганова Алиса
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Дурная жена неверного дракона

Вонгозеро

Вагнер Яна
1. Вонгозеро
Детективы:
триллеры
9.19
рейтинг книги
Вонгозеро

Ведьма Вильхельма

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
8.67
рейтинг книги
Ведьма Вильхельма

Папина дочка

Рам Янка
4. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Папина дочка

Законы Рода. Том 6

Flow Ascold
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6

Как я строил магическую империю 7

Зубов Константин
7. Как я строил магическую империю
Фантастика:
попаданцы
постапокалипсис
аниме
фантастика: прочее
5.00
рейтинг книги
Как я строил магическую империю 7

Лучший из худший 3

Дашко Дмитрий
3. Лучший из худших
Фантастика:
городское фэнтези
попаданцы
аниме
6.00
рейтинг книги
Лучший из худший 3

Штурмовик из будущего 3

Политов Дмитрий Валерьевич
3. Небо в огне
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Штурмовик из будущего 3

Последний попаданец 2

Зубов Константин
2. Последний попаданец
Фантастика:
юмористическая фантастика
попаданцы
рпг
7.50
рейтинг книги
Последний попаданец 2

Идеальный мир для Лекаря 14

Сапфир Олег
14. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 14

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Вдова на выданье

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Вдова на выданье