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

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

Жанры

Программирование. Принципы и практика использования 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*
— это имя типа указателя на объект, тип которого неизвестен.

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

Путь Шедара

Кораблев Родион
4. Другая сторона
Фантастика:
боевая фантастика
6.83
рейтинг книги
Путь Шедара

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Неудержимый. Книга XVIII

Боярский Андрей
18. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVIII

Сумеречный стрелок

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

Уязвимость

Рам Янка
Любовные романы:
современные любовные романы
7.44
рейтинг книги
Уязвимость

Путь (2 книга - 6 книга)

Игнатов Михаил Павлович
Путь
Фантастика:
фэнтези
6.40
рейтинг книги
Путь (2 книга - 6 книга)

Я – Орк. Том 5

Лисицин Евгений
5. Я — Орк
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Я – Орк. Том 5

Совок

Агарев Вадим
1. Совок
Фантастика:
фэнтези
детективная фантастика
попаданцы
8.13
рейтинг книги
Совок

Авиатор: назад в СССР

Дорин Михаил
1. Авиатор
Фантастика:
попаданцы
альтернативная история
5.25
рейтинг книги
Авиатор: назад в СССР

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Доктора вызывали? или Трудовые будни попаданки

Марей Соня
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Доктора вызывали? или Трудовые будни попаданки

Совершенный: пробуждение

Vector
1. Совершенный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Совершенный: пробуждение

Энфис 4

Кронос Александр
4. Эрра
Фантастика:
городское фэнтези
рпг
аниме
5.00
рейтинг книги
Энфис 4