Fltk — FLTK , проблема с #ifdef


Содержание

Проблемы с компиляцией с флиткой FLTK

Кажется, у меня проблемы с компиляцией программ FLTK с использованием чего-либо, кроме fltk-config script.

Я скопировал источник из программы Hello world в учебнике. Когда я запускаю fltk-config —compile hello.cpp, он выводит

и компилируется просто отлично. Но когда я сам печатаю то же самое, он говорит, что ld.exe не может найти -lcomct132.

Я использую FLTK 1.3.0, скомпилированный в MinGW под WinXP.

Я уверен, что fltk-config script устанавливает переменные среды, которые вы не настроили. Проверьте документацию FLTK и посмотрите необходимые переменные среды, которые необходимо настроить для компиляции без вспомогательного script.

Изменить: Проведено некоторое исследование

По-видимому, вы не единственный, у кого есть проблемы с привязкой. Я нашел аналогичную проблему на форуме здесь и на fltk.general группа новостей. Похоже, что консенсус состоит в том, что порядок аргументов связи важен, а использование fltk-config script — это самый простой способ продолжения.

Я не получил эту конкретную ошибку, но у меня была проблема с «lcomct132». Возможно, ваша ошибка связана с этим. Итак, в моем случае здесь было РЕШЕНИЕ:

  • «132» на самом деле только «32». «1» — это не число, а маленькая буква L. Так что это «lcomctl32»!

Проблема при компиляции программы FLTK

У меня действительно тяжелые времена, когда я запускаю первый простой проект с FLTK. На данный момент я следовал за шагами на этом страница

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

LNK 1104 невозможно открыть файл ‘fltkjpegd.lib’.

Есть идеи, как решить эту проблему?

Решение

добавлять fltk зависимости библиотек от вашего проекта Visual Studio, как описано Вот

LXF115:FLTK

Подписка на печатную версию Весь 2015 год (12 номеров) Первое полугодие (6 номеров) Второе полугодие (6 номеров) Подписка на электронную версию Весь 2015 год (12 номеров) Первое полугодие (6 номеров) Второе полугодие (6 номеров) Подшивки старых номеров журнала (печатные версии) Весь 2014 год (12 номеров) Первое полугодие (6 номеров) Второе полугодие (6 номеров)
FLTK
  • Старый конь борозды не испортит
  • Сверхскоростная графика

Содержание

Сверхскоростная графика

Какое звено является ведущим в связке потребностей и технологий? Я думаю, что все-таки потребности. Развитие графических адаптеров с миллионами поддерживаемых цветов и пикселей стимулировалось парадигмой WYSIWYG, а не наоборот, а ускорители 3D-графики для ПК появились благодаря трехмерным играм (первые из которых обходились вовсе без ускорителей). А вот внедрение в работающую схему новых технологий по принципу «зачем добру пропадать» редко приносит хорошие результаты. Вот, например, все современные рабочие столы обзавелись трехмерными «примочками» – а часто ли мы ими пользуемся? Тем не менее, раз уж OpenGL распространяется повсюду, то и обзор библиотеки виджетов не может без него обойтись.

OpenGL в FLTK

Как уже отмечалось, поддержка OpenGL была в свое время уникальной и крайне привлекательной чертой FLTK, и даже сейчас с некоторыми проблемами вывода трехмерной графики эта библиотека справляется лучше, нежели другие наборы виджетов. Для работы с OpenGL FLTK предлагает нам два класса: GlWindow и GlutWindow. Как нетрудно догадаться, они наследуют Window и реализуют специальные типы окон, у которых рабочая поверхность подготовлена для вывода графики OpenGL. В остальном, окна GlWindow и GlutWindow подобны окну Window – они могут содержать дочерние виджеты и обрабатывать сообщения, адресованные главному окну программы. Окно GlWindow предоставляет базовую функциональность, необходимую для работы с OpenGL, а окно GlutWindow вдобавок эмулирует функции библиотеки GLUT.

Если вы интересуетесь программированием с OpenGL, то наверняка уже знаете, что такое GLUT, и тем не менее я это поясню. Интерфейс OpenGL разрабатывался как максимально платформо-независимый. Выразилось это, например, в том, что в OpenGL не были включены функции для обработки сообщений системы и взаимодействия с окнами. Вместе с тем, на практике OpenGL-программы разрабатываются, в основном, в графических многооконных средах, а значит, всем программистам нужен некий минимум средств для взаимодействия между OpenGL и оконной системой. Конечно, разработчики последних тоже не остались в стороне. Для X Window была разработана система GLX, а для Windows GDI – WGL (Wiggle), но эти расширения были довольно сложны и несовместимы друг с другом. Свободную нишу заполнила разработанная Марком Килгардом [Mark J. Kilgard] библиотека GLUT, которая отличалась от GLX/WGL простотой использования и кроссплатформенностью (фактически, GLUT на каждой платформе представляет собой надстройку над расширениями конкретной системы). Неудивительно, что в то время многие программисты предпочитали GLUT для разработки надежным кроссплатформенных программ.

Учитывая популярность GLUT, разработчик FLTK Билл Спитцак [Bill Spitzak] принял мудрое решение – добавить поддержку интерфейса GLUT в свой набор виджетов. В результате авторы программ, использовавшие GLUT, смогли без труда портировать свой код на FLTK (отметим в скобках, что если вы начинаете писать новую программу, нет никакого смысла использовать класс GlutWindow, так как все то хорошее, что может дать вам библиотека GLUT, реализовано в классе GlWindow). Поскольку библиотека GLUT не является открытым ПО (хотя исходные тексты доступны), Спитцак создал модуль поддержки GLUT с нуля, сохранив совместимость на уровне интерфейса. Но так как особенности GLUT нас не интересуют, мы остановимся на работе с окном GlWindow.

Мы напишем минимальную программу, использующую OpenGL и FLTK, в которой окно-потомок GlWindow будет главным и единственным окном приложения (исходный текст программы вы найдете на диске в архиве ogldemo1).

В объявлении класса окна мы переопределяем конструктор и виртуальный метод draw(). Не спрашивайте меня, что он делает, я сам скажу: draw() выполняет отрисовку сцены. Давайте посмотрим на реализацию методов:

Как уже отмечалось, одной из проблем вывода графики OpenGL является необходимость изменять параметры матрицы проектирования при изменении размеров окна. В GlWindow вы можете совместить настройку матрицы проектирования и код, формирующий изображение, в одном методе draw(), благодаря свойству valid() класса GlWindow (о понятии свойства в FLTK говорилось в LXF113/114). Свойство valid() принимает значение , если окно только что создано, если его размеры были изменены или произошло переключение графических контекстов. После завершения вызова метода draw() свойство valid() принимает ненулевое значение. Таким образом, мы можем организовать проверку значения valid() в начале метода draw(). Если свойство равно , значит, требуется перенастроить матрицу проектирования, в противном случае мы можем сразу приступить к выводу изображения.

У класса GlWindow есть метод resize(), объявленный в разделе protected, который вызывается при их изменении размеров окна, так что у вас может возникнуть соблазн переопределить его и разместить в нем код перенастройки проектирования. Не делайте этого! В результате вы получите совсем не то, чего ожидали. Переопределение метода resize() может понадобиться только в том случае, если окну GlWindow приходится иметь дело с не-OpenGL элементами, например, с дочерними виджетами. Не могу не отметить, что в наборе примеров FLTK Cheats (http://seriss.com/people/erco/fltk#OpenGlSimpleWidgets), которыми часто пользуются для изучения FLTK, допущена ошибка – код перенастройки проектирования вызывается и в методе draw(), и в методе resize() (и, кроме того, добавлен в конструктор окна). Ошибка незаметна, так как «правильный» код в методе draw() перекрывает неправильный, но повторять эту небрежность не следует.

Рис. 1. OpenGL в программе FLTK.

Для компиляции программы воспользуемся командой

Обратите внимание, что кроме стандартной библиотеки OpenGL нам требуется подключить к файлу программы библиотеку libfltk2_gl. Теперь мы можем наслаждаться зрелищем радужного треугольника (рис. 1), который вы, конечно, уже видели бессчетное количество раз.

В заключение перечислим несколько полезных функций класса GlWindow. Свойство context() позволяет управлять контекстами OpenGL. Оно имеет тип GLContext, который на платформе X соответствует типу GLXContext, а в среде GDI – HGLRC. Благодаря context() вы можете вызывать напрямую функции оконных расширений OpenGL для данной платформы. С помощью метода mode() можно указать ряд параметров OpenGL, таких как использование альфа-канала, двойной буферизации, буфера трафарета и т.п. Метод ortho() настраивает матрицу проектирования таким образом, что начало системы координат OpenGL совпадает с нижним левым углом окна, а точка в координатах OpenGL соответствует одному пикселю экрана. Этот режим особенно удобен, когда OpenGL используется для работы с двумерными изображениями. Метод swap_buffers () управляет переключением буферов OpenGL.

Обработка событий

Вы помните времена, когда программист MS-DOS, желающий добавить в свою программу такой простой элемент интерфейса, как кнопку, должен был выполнять все операции по ее отрисовке, используя единый цикл обработки сообщений программы? Прелесть концепции виджетов заключается в разделении обязанностей. Большую часть времени виджеты сами заботятся о себе (поддерживают свой внешний вид, изменяют размеры и положение в зависимости от геометрии окна) и беспокоят вашу программу только тогда, когда им действительно «есть, что сказать». Сообщения, которые виджеты посылают программе, можно разделить на две категории, или, точнее, на два уровня. Сообщения низкого уровня обычно связаны с действиями устройств ввода (нажата клавиша на клавиатуре, переместился указатель мыши); высокоуровневые же сообщения, как правило, отражают логику работы виджета. Сообщения высокого уровня часто основаны на событиях низкого уровня, но могут и не зависеть от них (виджет может сообщать о событии, связанном с внутренней работой программы, а не с внешним действием).

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

Для обработки событий FLTK классы-потомки fltk::Widget используют метод handle(), объявленный как

В параметре этого метода передается численный идентификатор события. Метод должен вернуть ненулевое значение, если событие было обработано корректно, и в противном случае. Хотя метод handle() вызывается для обработки всех событий, связанных с виджетом, мы, как правило, хотим обрабатывать самостоятельно только некоторые события, возложив все прочее на систему. Шаблон перегруженного метода handle() можно представить так:


Интересующие нас события перехватываются в теле оператора switch(), а для обработки остальных событий мы вызываем метод handle() базового класса. Каким образом с помощью одного числового параметра метода handle() программе передается информация обо всем многообразии событий, на которые должен реагировать виджет? На самом деле параметр event содержит информацию только о типе события – остальные сведения обработчик получает с помощью вспомогательных функций. Объявления различных констант и функций, необходимых для обработки событий, содержатся в заголовочном файле fltk/events.h. Давайте рассмотрим механизмы обработки некоторых распространенных типов событий более подробно.

Манипуляции с мышью порождают одно из пяти событий: ENTER – указатель мыши вошел в область виджета, LEAVE – указатель покинул область виджета, PUSH – нажата одна из кнопок мыши, DRAG – указатель мыши перетаскивается при нажатой кнопке (это событие генерируется периодически, до тех пор, пока кнопка не будет отпущена), RELEASE – кнопка отпущена. Код кнопки мыши, вызвавшей событие, можно получить с помощью функции event_key(): значения 1, 2, 3 обозначают левую, среднюю и правую кнопки, соответственно. Положение указателя в момент возникновения события можно выяснить с помощью функций event_x() и event_y(). Любопытно отметить, как FLTK сигнализирует о прокрутке колесика мыши. Прокрутка колесика порождает серию событий MOUSEWHEEL. Функция event_dy() возвращает количество единиц прокрутки (положительное значение для прокрутки вверх и отрицательное – для прокрутки вниз). Если прокрутка сопровождается удерживанием средней кнопки мыши, помимо события MOUSEWHEEL генерируется серия событий RELEASE (без парных им сообщений PUSH). Функция event_key() при этом возвращает значение 4 (прокрутка вверх) или 5 (прокрутка вниз).

Нажатие клавиши на клавиатуре порождает события KEY (клавиша нажата) и KEYUP (клавиша отпущена). Функция event_key() позволяет получить код клавиши (она работает для любой клавиши клавиатуры), а функция event_text() – код символа (для символьной клавиши). Значение, возвращаемое event_text(), зависит от настроек локали и выбранной раскладки клавиатуры. С помощью функции event_key() можно связывать специальные действия с несимвольными клавишами. Кроме того, эта функция удобна, когда некоторое действие должно выполняться при нажатии на символьную клавишу независимо от выбранной раскладки клавиатуры (меня, например, бесят программы, в которых сочетания клавиш Ctrl+C, Ctrl+V и Ctrl+Z перестают работать при переключении на русскую раскладку). Для многих кодов клавиш, возвращаемых функцией event_key(), определены константымнемоники, например, EscapeKey, HomeKey, LeftKey, UpKey, RightKey, DownKey, PageUpKey, PageDownKey, EndKey, PrintKey.

Если нажать и удерживать клавишу на клавиатуре, генерируется серия событий KEY без соответствующих им событий KEYUP. В ходе своих экспериментов с обработкой событий FLTK я обнаружил одну странность: событие KEYUP генерируется не тогда, когда ранее нажатая клавиша отпущена, а в момент нажатия следующей клавиши (сразу за событием KEYUP генерируется событие KEY, соответствующее нажатию новой клавиши). Не думаю, что разработчикам следует полагаться на своевременность события KEYUP в FLTK (в некоторых ситуациях это событие вообще может не случиться).

Любопытно отметить, что функции event_key(), event_x() и им подобные не являются методами классов виджетов. Это самостоятельные функции, которые получают информацию о параметрах события из статических переменных, спрятанных в недрах FLTK. Такой подход нельзя назвать особо элегантным с точки зрения объектно-ориентированного программирования. Кроме того, поскольку функции «не знают», для какого события они вызваны, обработка событий возможна строго в порядке их поступления.

Хотя обычно источником событий являются устройства ввода, их можно генерировать и программно. Для этого служит метод send() класса fltk::Widget. Единственным аргументом метода должен быть численный идентификатор события. Метод send() представляет собой, по сути, обертку вокруг метода handle(), однако перед тем как вызвать обработчик событий, send() выполняет некоторые полезные действия, например, сохраняет координаты x и y для событий, связанных с мышью. А что делать, если вы хотите эмулировать не только событие, но и его параметры, например, указать собственные координаты мыши? Для этого придется воспользоваться недокументированной возможностью – напрямую обратиться к тем самым статическим переменным, в которых сохраняются параметры события. Имена переменных начинаются с префикса e_, и их можно найти в файле fltk/events.h. Например, координаты указателя мыши хранятся в переменных e_x и e_y.

Вы можете установить глобальный обработчик для всех событий, которые не смогли обработать виджеты FLTK (необработанными считаются события, для которых метод handle() вернул значение ). Заголовок функции обработчика должен иметь вид

В параметре event обработчику передается идентификатор события, а в параметре window – указатель на объект-окно, которому оно предназначалось (поскольку речь идет о необработанных событиях, система не всегда может определить окнополучателя). Установка обработчика выполняется с помощью функции add_event_handler().

Живой OpenGL

Чтобы продемонстрировать обработку событий FLTK на практике, мы добавим в нашу программу элемент интерактивности (новый вариант вы найдете в архиве ogdemo2). Пользователь сможет перетаскивать треугольник в окне, «ухватившись» за него мышью. Для этого добавим в класс MyGLWindow метод handle() и несколько вспомогательных полей:

Я намеренно не останавливаюсь на особенностях работы OpenGL в данной программе – на эту тему можно было бы написать отдельную статью. Мы обрабатываем события мыши PUSH, DRAG и RELEASE. Кроме них, в нашем методе handle() обрабатываются события клавиатуры: нажатие на клавишу Esc приводит к завершению работы программы, а кнопка F переключает ее между полноэкранным и оконным режимами, для чего используются методы fullscreen() и fullscreen_off(). Они реализованы в классе Window, а не GlWindow, но, как вы понимаете, при работе с трехмерной графикой они особенно полезны. Обратите внимание, что для идентификации клавиши F мы пользуемся значением функции event_key(), то есть эта клавиша будет работать независимо от раскладки клавиатуры и состояния CapsLock.

Функции обратного вызова

Рассмотрим теперь механизм обработки событий высокого уровня. Как было сказано выше, для передачи сообщений программе виджеты FLTK используют функции обратного вызова. Попросту говоря, вы можете указать виджету FLTK функцию, которую следует вызвать тогда, когда с ним произойдет нечто, достойное внимания программы. Для каждого виджета можно зарегистрировать только одну такую функцию. Это связано с убеждением разработчика FLTK в том, что каждый виджет может создавать только одно «интересное» событие. Интерфейс функций обратного вызова FLTK прост настолько, насколько это возможно: все функции обратного вызова имеют заголовок вида

В первом параметре функции передается указатель на объект-виджет, породивший событие, второй параметр представляет собой указатель на произвольный блок данных, определенный программистом. Установить его можно с помощью метода user_data(), которым обладает каждый класс-потомок fltk::Widget. Для регистрации функции обратного вызова используется метод callback(), который, опять же, есть у каждого класса, реализующего виджет.

Вот, собственно, и все. Как вы можете видеть, функция обратного вызова не возвращает никаких значений. Дополнительные сведения, необходимые для обработки события, можно получить с помощью свойств виджета, вызвавшего функцию, а также с помощью тех функций, которыми мы пользовались для обработки событий низкого уровня. В частности, функция event(), объявленная в файле fltk/events.h, позволяет узнать, какое именно низкоуровневое событие заставило виджет сделать обратный вызов. В интерактивной программе OpenGL я добавил функцию обратного вызова для главного окна программы. Оно вызывает ее в одном-единственном случае – когда пользователь пытается закрыть это окно с помощью кнопки [x] в его заголовке. Сама функция обратного вызова выглядит просто:

Рис. 2. Модальное диалоговое окно FLTK.

Функция ask() выводит на экран модальное диалоговое окно с кнопками Yes и No (рис. 2).

Возвращаемое функцией значение соответствует нажатой кнопке. Если пользователь нажал Yes, мы закрываем главное окно программы с помощью его метода hide(), что приводит к завершению работы всей программы.

Последнее, что нам осталось сделать – зарегистрировать функции обратного вызова в функции main():

Возможно, библиотека FLTK – не лучший выбор для создания больших и сложных приложений, но она хорошо подходит для создания небольших программ, например, «демок» OpenGL. Возможно также, что опыт FLTK пригодится вам, если когда-нибудь вы захотите написать собственный набор виджетов. LXF

Fltk — FLTK , проблема с #ifdef

Здравствуйте, bc_kaya, Вы писали:

_>Добрый день. Появилась ли возможность работать с русским языком в FLTK (Fast Light Toolkit) в 2к19?
Приветствую. Студент 2 курса, пишу по поручению Лаптева В.В. С однокурсниками мы придумали небольшой фикс, который должен сработать на русскоязычной Windows.
Для этого необходимо взять исходники версии fltk-1.3.4-2 и модифицировать 2 файла.
В файле файле src/fl_draw.cxx на строке 162 добавить следующий код:

В файле src/Fl_Window.cxx заменить конструктор на строке 74 на следующий:

В этом же файле заменить конструктор на строке 82 на следующий:

От: LaptevVV
Дата: 10.01.19 07:36
Оценка:
От: niXman
Дата: 10.01.19 08:05
Оценка: +1

Здравствуйте, bc_kaya, Вы писали:

_>Добрый день. Появилась ли возможность работать с русским языком в FLTK (Fast Light Toolkit) в 2к19?

зы
кстати, хорошая либа. использую для всяких тулзов и визуализаций.

От: LaptevVV
Дата: 10.01.19 08:36
Оценка:
От: niXman
Дата: 10.01.19 08:43
Оценка:

Здравствуйте, LaptevVV, Вы писали:

LVV>Вот проект одного из студентов 3-его курса, выложенный на GitHub: https://github.com/LIQUIDDEATH13/FLTKRUS

круто, конечно.
но вместо всего того что там написано и сделано, нужно было просто предоставить patch =)
а еще лучше — предложить его разрабам, если описанная проблема действительно существует и этот patch ее бы решал =)

От: bc_kaya
Дата: 10.01.19 08:44
Оценка:

Здравствуйте, DST, Вы писали:

DST>Здравствуйте, bc_kaya, Вы писали:

_>>Добрый день. Появилась ли возможность работать с русским языком в FLTK (Fast Light Toolkit) в 2к19?
DST>Приветствую. Студент 2 курса, пишу по поручению Лаптева В.В. С однокурсниками мы придумали небольшой фикс, который должен сработать на русскоязычной Windows.
DST>Для этого необходимо взять исходники версии fltk-1.3.4-2 и модифицировать 2 файла.
DST>В файле файле src/fl_draw.cxx на строке 162 добавить следующий код:
DST>

DST>В файле src/Fl_Window.cxx заменить конструктор на строке 74 на следующий:
DST>

DST>В этом же файле заменить конструктор на строке 82 на следующий:
DST>

Спасибо, но это не полностью решило мою проблему

От: bc_kaya
Дата: 10.01.19 08:46
Оценка:

Здравствуйте, niXman, Вы писали:

X>Здравствуйте, bc_kaya, Вы писали:

_>>Добрый день. Появилась ли возможность работать с русским языком в FLTK (Fast Light Toolkit) в 2к19?

X>так ведь сделали это.
X>https://www.fltk.org/doc-1.3/unicode.html
X>https://stackoverflow.com/questions/19198848/how-to-display-unicode-with-fltk

X>зы
X>кстати, хорошая либа. использую для всяких тулзов и визуализаций.

Дело в том, что в данном случае, если правильно понимаю, необходимо использовать функцию каждый раз, когда я хочу вывести текст в кириллической кодировке
Хотелось бы иметь возможность работать с русским текстом без написания «лишнего» кода

От: niXman
Дата: 10.01.19 08:48
Оценка:

Здравствуйте, bc_kaya, Вы писали:

_>Дело в том, что в данном случае, если правильно понимаю, необходимо использовать функцию каждый раз, когда я хочу вывести текст в кириллической кодировке
_>Хотелось бы иметь возможность работать с русским текстом без написания «лишнего» кода


перейдите по второй ссылке, там ведь есть пример вывода кирилического текста на виджете. никаких костылей я там не вижу.

От: bc_kaya
Дата: 10.01.19 08:52
Оценка:

Здравствуйте, niXman, Вы писали:

X>Здравствуйте, bc_kaya, Вы писали:

_>>Дело в том, что в данном случае, если правильно понимаю, необходимо использовать функцию каждый раз, когда я хочу вывести текст в кириллической кодировке
_>>Хотелось бы иметь возможность работать с русским текстом без написания «лишнего» кода

X>перейдите по второй ссылке, там ведь есть пример вывода кирилического текста на виджете. никаких костылей я там не вижу.

Невнимательно взглянул, прошу прощения =(
Вижу использование u8 =)

От: bc_kaya
Дата: 10.01.19 08:54
Оценка:

Здравствуйте, LaptevVV, Вы писали:

LVV>Вот проект одного из студентов 3-его курса, выложенный на GitHub: https://github.com/LIQUIDDEATH13/FLTKRUS

Выглядит интересно, вечерком опробую

От: bc_kaya
Дата: 11.01.19 22:42
Оценка: 26 (1)

Здравствуйте, LaptevVV, Вы писали:

LVV>Вот проект одного из студентов 3-его курса, выложенный на GitHub: https://github.com/LIQUIDDEATH13/FLTKRUS

Моё почтение, с пользой потратил время на изучение. Скомбинировав файлы из репозитория и решение вашего студента (как полагаю), получил то, что было нужно
Было б ещё хорошо, если бы кто-нибудь переписал на современный лад библиотеку виджетов, а не заниматься вечной борьбой с const char* =(

От: LaptevVV
Дата: 12.01.19 09:49
Оценка:
От: bc_kaya
Дата: 12.01.19 15:07
Оценка:

Здравствуйте, LaptevVV, Вы писали:

LVV>>>Вот проект одного из студентов 3-его курса, выложенный на GitHub: https://github.com/LIQUIDDEATH13/FLTKRUS
_>>Моё почтение, с пользой потратил время на изучение. Скомбинировав файлы из репозитория и решение вашего студента (как полагаю), получил то, что было нужно
_>>Было б ещё хорошо, если бы кто-нибудь переписал на современный лад библиотеку виджетов, а не заниматься вечной борьбой с const char* =(
LVV>Ну, могу поручить студентам в качестве курсовой.
LVV>Наверное и поручу — будет потом как часть его выпускной фигурировать.

Считаю, что «модернизирование» и адаптация к современным реалиям С-шной (как субъективно считаю) библиотеки пойдёт на пользу и её начнут активнее использовать программисты, реализующие оконный интерфейс в своём software

Как устранить сообщения об ошибках Fltk.dll отсутствует / не найден

Совместима с Windows 2000, XP, Vista, 7, 8 и 10

Обзор Fltk.dll

Что такое Fltk.dll?

Fltk.dll представляет собой разновидность файла DLL, связанного с Third-Party Application, который разработан Windows Software Developer для ОС Windows. Последняя известная версия Fltk.dll: 1.0, разработана для Windows XP. Данный файл DLL имеет рейтинг популярности 1 звезд и рейтинг безопасности «UNKNOWN».

Что из себя представляют файлы DLL?

Файлы DLL («динамически подключаемая библиотека»), такие как fltk.dll – это небольшие программы, схожие с файлами EXE («исполняемыми»), которые позволяют множеству программ использовать одни и те же функции (например, печать).

Например, когда вы запускаете Windows XP и редактируете документ в Microsoft Word. Необходимо загружать файл DLL, контролирующий печать, только если его функции востребованы — например, когда вы решили распечатать свой документ. Когда вы выбираете «Печать», Microsoft Word вызывает файл принтера DLL, и он загружается в память (RAM). Если вы хотите распечатать документ в другой программе, например в Adobe Acrobat, будет использоваться тот же самый файл принтера DLL.

Почему у меня наблюдаются ошибки в файлах типа DLL?

Файлы DLL, будучи общими, существуют за пределами самого приложения. Давая множество преимуществ разработчикам программного обеспечения, такое разделение также открывает возможность для появления проблем.

Проще говоря, если Windows не может корректно загрузить файл fltk.dll, вы получите сообщение об ошибке. Для получения дополнительной информации см. «Причины ошибок fltk.dll» ниже.

В каких случаях появляются ошибки в файлах типа DLL?

Ошибки DLL, например, связанные с fltk.dll, чаще всего появляются во время запуска компьютера, запуска программы или при попытке использования специфических функций в вашей программе (например, печать).

Распространенные сообщения об ошибках в Fltk.dll

Наиболее распространенные ошибки fltk.dll, которые могут возникнуть на компьютере под управлением Windows, перечислены ниже:

  • «Fltk.dll не найден.»
  • «Файл fltk.dll отсутствует.»
  • «Fltk.dll нарушение прав доступа.»
  • «Файл fltk.dll не удалось зарегистрировать.»
  • «Файл C:\Windows\System32\\fltk.dll не найден.»
  • «Не удалось запустить Third-Party Application. Отсутствует необходимый компонент: fltk.dll. Пожалуйста, установите Third-Party Application заново.»
  • «Не удалось запустить данное приложение, так как не найден файл fltk.dll. Повторная установка приложения может решить эту проблему.»

Такие сообщения об ошибках DLL могут появляться в процессе установки программы, когда запущена программа, связанная с fltk.dll (например, Third-Party Application), при запуске или завершении работы Windows, или даже при установке операционной системы Windows. Отслеживание момента появления ошибки fltk.dll является важной информацией при устранении проблемы.

Причины ошибок в файле Fltk.dll

Большинство ошибок fltk.dll связано с отсутствием или повреждениями файлов fltk.dll. Тот факт, что fltk.dll – внешний файл, открывает возможность для всяческих нежелательных последствий.

Непредвиденные завершения работы вашего компьютера или заражение вирусом может повредить fltk.dll, что приведет к ошибкам DLL. Когда файл fltk.dll повреждается, он не может быть нормально загружен и выведет сообщение об ошибке.

В других случаях ошибки файла fltk.dll могут быть связаны с проблемами в реестре Windows. Нерабочие ссылки DLL файлов могут помешать зарегистрировать файл DLL должным образом и вызвать ошибку fltk.dll. Эти нерабочие ключи реестра могут появиться в результате отсутствия файла DLL, перемещения файла DLL или ввиду наличия остаточной ссылки DLL файла в реестре Windows после неудачной установки или удаления программы.

Более конкретно, данные ошибки fltk.dll могут быть вызваны следующими причинами:

  • Ошибочные или поврежденные записи реестра для fltk.dll
  • Вирус или вредоносное ПО, повредившее файл fltk.dll.
  • Отказ оборудования Windows Software Developer, например, некачественный жесткий диск, вызвавший повреждение файла fltk.dll.
  • Другая программа изменила требуемую версию fltk.dll.
  • Другая программа злонамеренно или по ошибке удалила файл fltk.dll.
  • Другая программа удалила файл fltk.dll.

Как исправить ошибки в Fltk.dll

Предупреждение: Мы не рекомендуем скачивать fltk.dll с сайтов типа «DLL». Такие сайты распространяют файлы DLL, которые не одобрены официальным разработчиком файла fltk.dll и часто могут поставляться в комплекте с инфицированными вирусом или другими вредоносными файлами. Если вам требуется копия файла fltk.dll, настоятельно рекомендуется получить ее непосредственно у Windows Software Developer.


Ниже описана последовательность действий по устранению ошибок, призванная решить проблемы fltk.dll. Данная последовательность приведена в порядке от простого к сложному и от менее затратного по времени к более затратному, поэтому мы настоятельно рекомендуем следовать данной инструкции по порядку, чтобы избежать ненужных затрат времени и усилий.

Пожалуйста, учтите: Нажмите на изображение [ ] , чтобы развернуть инструкции по устранению проблем по каждому из шагов ниже. Вы также можете использовать изображение [ ], чтобы скрывать инструкции по мере их выполнения.

Шаг 1: Зарегистрировать Fltk.dll вручную при помощи сервера регистрации Microsoft

При установке программного обеспечения, которое использует зависимости fltk.dll, это программное обеспечение должно автоматически зарегистрировать этот файл. В некоторых случаях файл DLL может быть не зарегистрирован соответствующим образом, что в результате приведет к ошибке «fltk.dll не зарегистрирован». К счастью, вы всегда можете воспользоваться встроенной утилитой под названием «Сервер регистрации Microsoft» (regsvr32.exe), чтобы заново зарегистрировать файл fltk.dll.

Как заново зарегистрировать fltk.dll из привилегированной командной строки (Windows XP, Vista, 7, 8 и 10):

  1. Нажмите на кнопку Начать.
  2. Введите «command» в строке поиска. ПОКА НЕ НАЖИМАЙТЕENTER!
  3. Удерживая клавиши CTRL-Shift на клавиатуре, нажмите ENTER.
  4. Будет выведено диалоговое окно для доступа.
  5. Нажмите Да.
  6. Введите следующую команду: regsvr32 /u fltk.dll.
  7. Нажмите ENTER. Для файла будет ОТМЕНЕНА РЕГИСТРАЦИЯ.
  8. Введите следующую команду: regsvr32 /i fltk.dll.
  9. Нажмите ENTER. Файл будет ЗАРЕГИСТРИРОВАН ЗАНОВО.
  10. Закройте окно командной строки.
  11. Перезапустить программу, связанную с ошибкой fltk.dll.

Шаг 2: Исправить ошибочные записи реестра для Fltk.dll

Иногда ошибки fltk.dll и другие системные ошибки DLL могут быть связаны с проблемами в реестре Windows. Несколько программ может использовать файл fltk.dll, но когда эти программы удалены или изменены, иногда остаются «осиротевшие» (ошибочные) записи реестра DLL.

В принципе, это означает, что в то время как фактическая путь к файлу мог быть изменен, его неправильное бывшее расположение до сих пор записано в реестре Windows. Когда Windows пытается найти файл по этой некорректной ссылке (на расположение файлов на вашем компьютере), может возникнуть ошибка fltk.dll. Кроме того, заражение вредоносным ПО могло повредить записи реестра, связанные с Third-Party Application. Таким образом, эти поврежденные записи реестра DLL необходимо исправить, чтобы устранить проблему в корне.

Редактирование реестра Windows вручную с целью удаления содержащих ошибки ключей fltk.dll не рекомендуется, если вы не являетесь специалистом по обслуживанию ПК. Ошибки, допущенные при редактировании реестра, могут привести к неработоспособности вашего ПК и нанести непоправимый ущерб вашей операционной системе. На самом деле, даже одна запятая, поставленная не в том месте, может воспрепятствовать загрузке компьютера!

В связи с подобным риском мы настоятельно рекомендуем использовать надежные инструменты очистки реестра, такие как WinThruster (разработанный Microsoft Gold Certified Partner), чтобы просканировать и исправить любые проблемы, связанные с fltk.dll. Используя очистку реестра, вы сможете автоматизировать процесс поиска поврежденных записей реестра, ссылок на отсутствующие файлы (например, вызывающих ошибку fltk.dll) и нерабочих ссылок внутри реестра. Перед каждым сканированием автоматически создается резервная копия, позволяющая отменить любые изменения одним кликом и защищающая вас от возможного повреждения компьютера. Самое приятное, что устранение ошибок реестра может резко повысить скорость и производительность системы.

Предупреждение: Если вы не являетесь опытным пользователем ПК, мы НЕ рекомендуем редактирование реестра Windows вручную. Некорректное использование Редактора реестра может привести к серьезным проблемам и потребовать переустановки Windows. Мы не гарантируем, что неполадки, являющиеся результатом неправильного использования Редактора реестра, могут быть устранены. Вы пользуетесь Редактором реестра на свой страх и риск.

Перед тем, как вручную восстанавливать реестр Windows, необходимо создать резервную копию, экспортировав часть реестра, связанную с fltk.dll (например, Third-Party Application):

  1. Нажмите на кнопку Начать.
  2. Введите «command» в строке поиска. ПОКА НЕ НАЖИМАЙТЕENTER!
  3. Удерживая клавиши CTRL-Shift на клавиатуре, нажмите ENTER.
  4. Будет выведено диалоговое окно для доступа.
  5. Нажмите Да.
  6. Черный ящик открывается мигающим курсором.
  7. Введите «regedit» и нажмите ENTER.
  8. В Редакторе реестра выберите ключ, связанный с fltk.dll (например, Third-Party Application), для которого требуется создать резервную копию.
  9. В меню Файл выберите Экспорт.
  10. В списке Сохранить в выберите папку, в которую вы хотите сохранить резервную копию ключа Third-Party Application.
  11. В поле Имя файла введите название файла резервной копии, например «Third-Party Application резервная копия».
  12. Убедитесь, что в поле Диапазон экспорта выбрано значение Выбранная ветвь.
  13. Нажмите Сохранить.
  14. Файл будет сохранен с расширением .reg.
  15. Теперь у вас есть резервная копия записи реестра, связанной с fltk.dll.

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

Мы не несем никакой ответственности за результаты действий, совершенных по инструкции, приведенной ниже — вы выполняете эти задачи на свой ​​страх и риск.

Шаг 3: Удалить или восстановить файл Fltk.dll из Корзины Windows

  1. Просто дважды щелкните по значку Корзина.
  2. В верхнем правом углу найдите fltk.dll.
  3. Если файл fltk.dll присутствует в результатах поиска, выберите его и переместите в следующую папку:
    1. Windows 95/98/Me = C:\Windows\System32\
    2. Windows NT/2000 = C:\Windows\System32\
    3. Windows XP, Vista, 7, 8, 10 = C:\Windows\System32\
    4. 64-bit Windows = C:\Windows\System32\
  4. После перемещения файла fltk.dll перезагрузите компьютер.

Tip: If you are positive that you deleted the fltk.dll file AND emptied the Recycle Bin, then you will need to use a file recovery program to restore the fltk.dll file. Click here to download a highly recommended file recovery program.

Шаг 4: Проведите полное сканирование вашего компьютера на вредоносное ПО

Есть вероятность, что ошибка fltk.dll может быть связана с заражением вашего компьютера вредоносным ПО. Эти вредоносные злоумышленники могут повредить или даже удалить файлы, связанные с DLL. Кроме того, существует возможность, что ошибка fltk.dll связана с компонентом самой вредоносной программы.

Совет: Если у вас еще не установлены средства для защиты от вредоносного ПО, мы настоятельно рекомендуем использовать Emsisoft Anti-Malware (скачать). В отличие от других защитных программ, данная программа предлагает гарантию удаления вредоносного ПО.

Шаг 5: Обновите драйверы устройств на вашем компьютере

Ошибки Fltk.dll могут быть связаны с повреждением или устареванием драйверов устройств. Драйверы с легкостью могут работать сегодня и перестать работать завтра по целому ряду причин. Хорошая новость состоит в том, что чаще всего вы можете обновить драйверы устройства, чтобы устранить проблему с DLL.

В связи с временными затратами и общей сложностью обновления драйверов мы настоятельно рекомендуем использовать утилиту обновления драйверов, например DriverDoc (разработана Microsoft Gold Partner), для автоматизации этого процесса.

Пожалуйста, учтите: Ваш файл fltk.dll может и не быть связан с проблемами в драйверах устройств, но всегда полезно убедиться, что на вашем компьютере установлены новейшие версии драйверов оборудования, чтобы максимизировать производительность вашего ПК.

Шаг 6: Используйте Восстановление системы Windows, чтобы «Отменить» последние изменения в системе

Восстановление системы Windows позволяет вашему компьютеру «отправиться в прошлое», чтобы исправить проблемы fltk.dll. Восстановление системы может вернуть системные файлы и программы на вашем компьютере к тому времени, когда все работало нормально. Это потенциально может помочь вам избежать головной боли от устранения ошибок, связанных с DLL.

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

Чтобы использовать Восстановление системы (Windows XP, Vista, 7, 8 и 10):

  1. Нажмите на кнопку Начать.
  2. В строке поиска введите «Восстановление системы» и нажмите ENTER.
  3. В окне результатов нажмите Восстановление системы.
  4. Введите пароль администратора (при появлении запроса).
  5. Следуйте инструкциям Мастера для выбора точки восстановления.
  6. Восстановить ваш компьютер.

Шаг 7: Удалите и установите заново программу Third-Party Application, связанную с Fltk.dll

Инструкции для Windows 7 и Windows Vista:

  1. Откройте «Программы и компоненты», нажав на кнопку Пуск.
  2. Нажмите Панель управления в меню справа.
  3. Нажмите Программы.
  4. Нажмите Программы и компоненты.
  5. Найдите Third-Party Application в столбце Имя.
  6. Нажмите на запись Third-Party Application.
  7. Нажмите на кнопку Удалить в верхней ленте меню.
  8. Следуйте инструкциям на экране для завершения удаления Third-Party Application.


Инструкции для Windows XP:

  1. Откройте «Программы и компоненты», нажав на кнопку Пуск.
  2. Нажмите Панель управления.
  3. Нажмите Установка и удаление программ.
  4. Найдите Third-Party Application в списке Установленные программы.
  5. Нажмите на запись Third-Party Application.
  6. Нажмите на кнопку Удалить справа.
  7. Следуйте инструкциям на экране для завершения удаления Third-Party Application.

Инструкции для Windows 8:

  1. Установите указатель мыши в левой нижней части экрана для показа изображения меню Пуск.
  2. Щелкните правой кнопкой мыши для вызова Контекстного меню Пуск.
  3. Нажмите Программы и компоненты.
  4. Найдите Third-Party Application в столбце Имя.
  5. Нажмите на запись Third-Party Application.
  6. Нажмите Удалить/изменить в верхней ленте меню.
  7. Следуйте инструкциям на экране для завершения удаления Third-Party Application.

После того, как вы успешно удалили программу, связанную с fltk.dll (например, Third-Party Application), заново установите данную программу, следуя инструкции Windows Software Developer.

Совет: Если вы абсолютно уверены, что ошибка DLL связана с определенной программой Windows Software Developer, удаление и повторная установка программы, связанной с fltk.dll с большой вероятностью решит вашу проблему.

Шаг 8: Запустите проверку системных файлов Windows («sfc /scannow»)

Проверка системных файлов — важная утилита, включенная в состав Windows. Она позволяет сканировать файлы на наличие повреждений и восстанавливать системные файлы Windows, такие как fltk.dll. Если утилита проверки системных файлов обнаружила проблему в fltk.dll или другом важном системном файле, она предпримет попытку заменить проблемные файлы автоматически, используя Кэш DLL (%WinDir%\System32\Dllcache\). Если файл fltk.dll отсутствует в Кэше DLL, или Кэш DLL поврежден, утилита предложит вставить установочный диск Windows для восстановления оригинальных файлов.

Чтобы запустить проверку системных файлов (Windows XP, Vista, 7, 8 и 10):

  1. Нажмите на кнопку Начать.
  2. Введите «command» в строке поиска. ПОКА НЕ НАЖИМАЙТЕENTER!
  3. Удерживая клавиши CTRL-Shift на клавиатуре, нажмите ENTER.
  4. Будет выведено диалоговое окно для доступа.
  5. Нажмите Да.
  6. Черный ящик открывается мигающим курсором.
  7. Введите «sfc /scannow» и нажмите ENTER.
  8. Проверка системных файлов начнет сканирование на наличие проблем fltk.dll и других системных файлов (проявите терпение — проверка может занять длительное время).
  9. Следуйте командам на экране.

Шаг 9: Установите все доступные обновления Windows

Microsoft постоянно обновляет и улучшает системные файлы Windows, связанные с fltk.dll. Иногда для решения проблемы DLL нужно просто напросто обновить Windows при помощи последнего пакета обновлений или другого патча, которые Microsoft выпускает на постоянной основе.

Чтобы проверить наличие обновлений Windows (Windows XP, Vista, 7, 8 и 10):

  1. Нажмите на кнопку Начать.
  2. Введите «update» в строке поиска и нажмите ENTER.
  3. Будет открыто диалоговое окно Обновление Windows.
  4. Если имеются доступные обновления, нажмите на кнопку Установить обновления.

Шаг 10: Произведите чистую установку Windows

Предупреждение: Мы должны подчеркнуть, что переустановка Windows займет очень много времени и является слишком сложной задачей, чтобы решить проблемы fltk.dll. Во избежание потери данных вы должны быть уверены, что вы создали резервные копии всех важных документов, изображений, программ установки программного обеспечения и других персональных данных перед началом процесса. Если вы сейчас е создаете резервные копии данных, вам стоит немедленно заняться этим (скачать рекомендованное решение для резервного копирования), чтобы защитить себя от безвозвратной потери данных.

Пожалуйста, учтите: Если проблема fltk.dll не устранена после чистой установки Windows, это означает, что проблема DLL ОБЯЗАТЕЛЬНО связана с аппаратным обеспечением. В таком случае, вам, вероятно, придется заменить соответствующее оборудование, вызывающее ошибку fltk.dll.

Имя файла: fltk.dll Последняя известная версия: 1.0
Разработчик: Windows Software Developer Размер файла (байтов): 797184
Программное обеспечение: Third-Party Application Операционная система: Windows XP
MD5: 35c4783fef52f7ccc916cbf07b5dcfa5
SHA1: 1c149ffc746f0ac6033be160fdd45e81fa393d0a
SHA256: 4121a10b3ace4e990fd392ce1db0e2d913e47903b8f68c7c8ac9bbc11b1fa5e5

Информация об операционной системе

Сообщения об ошибках Fltk.dll могут появляться в любых из нижеперечисленных операционных систем Microsoft Windows:

  • Windows 10
  • Windows 8
  • Windows 7
  • Windows Vista
  • Windows XP
  • Windows ME
  • Windows 2000

Проблема с Fltk.dll все еще не устранена?

Обращайтесь к нам в любое время в социальных сетях для получения дополнительной помощи:

Об авторе: Джей Гитер (Jay Geater) является президентом и генеральным директором корпорации Solvusoft — глобальной компании, занимающейся программным обеспечением и уделяющей основное внимание новаторским сервисным программам. Он всю жизнь страстно увлекался компьютерами и любит все, связанное с компьютерами, программным обеспечением и новыми технологиями.

Отобразить файлы DLL в алфавитном порядке:

Вы загружаете пробное программное обеспечение. Подписка на один год стоимостью $39,95 необходима для разблокировки всех функций приложения. Подписка обновляется автоматически по завершению (Узнать больше). Нажав на кнопку «Начать загрузку» и установив «Софт»», я подтверждаю, что прочитал(а) и согласен(на) с Пользовательским соглашением и Политикой конфиденциальности Solvusoft.

Accessing the OS Interfaces

All programs that need to access the operating system specific interfaces must include the following header file:

Despite the name, this header file will define the appropriate interface for your environment.

Note This header file name «x.H» is changed in FLTK 1.4.0 to the better name «platform.H». FLTK 1.3.5 now has a compatibility header file FL/platform.H that includes FL/x.H to help you move to FLTK 1.4.0. If your code is targeted at FLTK 1.3.5 or higher you can safely change it to include FL/platform.H instead. FLTK 1.4.x will keep the file «x.H» for a few releases for backwards compatibility.

The pages that follow describe the functionality that is provided for each operating system.

The interfaces provided by this header file may change radically in new FLTK releases. Use them only when an existing generic FLTK interface is not sufficient.

The UNIX (X11) Interface

The UNIX interface provides access to the X Window System state information and data structures.

Handling Other X Events

Installs a function to parse unrecognized events. If FLTK cannot figure out what to do with an event, it calls each of these functions (most recent first) until one of them returns non-zero. If none of them returns non-zero then the event is ignored. FLTK calls this for any X events it does not recognize, or X events with a window ID that FLTK does not recognize. You can look at the X event in the fl_xevent variable. The argument is the FLTK event type that was not handled, or zero for unrecognized X events. These handlers are also called for global shortcuts and some other events that the widget they were passed to did not handle, for example FL_SHORTCUT .


extern XEvent *fl_xevent

This variable contains the most recent X event.

extern ulong fl_event_time

This variable contains the time stamp from the most recent X event that reported it; not all events do. Many X calls like cut and paste need this value.

Window fl_xid(const Fl_Window *)

Returns the XID for a window, or zero if not shown() .

Returns the Fl_Window that corresponds to the given XID, or NULL if not found. This function uses a cache so it is slightly faster than iterating through the windows yourself.

int fl_handle(const XEvent &)

This call allows you to supply the X events to FLTK, which may allow FLTK to cooperate with another toolkit or library. The return value is non-zero if FLTK understood the event. If the window does not belong to FLTK and the add_handler() functions all return 0, this function will return false. Besides feeding events your code should call Fl::flush() periodically so that FLTK redraws its windows. This function will call the callback functions. It will not return until they complete. In particular, if a callback pops up a modal window by calling fl_ask(), for instance, it will not return until the modal function returns.

Drawing using Xlib

You must use them to produce Xlib calls. Don’t attempt to change them. A typical X drawing call is written like this:

Other information such as the position or size of the X window can be found by looking at Fl_Window::current(), which returns a pointer to the Fl_Window being drawn.

Returns the X pixel number used to draw the given FLTK color index or RGB color. This is the X pixel that fl_color() would use.

int fl_parse_color(const char* p, uchar& r, uchar& g, uchar& b)

Convert a name into the red, green, and blue values of a color by parsing the X11 color names. On other systems, fl_parse_color() can only convert names in hexadecimal encoding, for example #ff8083 .

extern XFontStruct *fl_xfont

Points to the font selected by the most recent fl_font(). This is not necessarily the current font of fl_gc , which is not set until fl_draw() is called. If FLTK was compiled with Xft support, fl_xfont will usually be 0 and fl_xftfont will contain a pointer to the XftFont structure instead.

extern void *fl_xftfont

If FLTK was compiled with Xft support enabled, fl_xftfont points to the xft font selected by the most recent fl_font(). Otherwise it will be 0. fl_xftfont should be cast to XftFont* .

Changing the Display, Screen, or X Visual

FLTK uses only a single display, screen, X visual, and X colormap. This greatly simplifies its internal structure and makes it much smaller and faster. You can change which it uses by setting global variables before the first Fl_Window::show() is called. You may also want to call Fl::visual(), which is a portable interface to get a full color and/or double buffered visual.

Set which X display to use. This actually does putenv(«DISPLAY=. «) so that child programs will display on the same screen if called with exec() . This must be done before the display is opened. This call is provided under MacOS and WIN32 but it has no effect.

extern Display *fl_display

The open X display. This is needed as an argument to most Xlib calls. Don’t attempt to change it! This is NULL before the display is opened.

Opens the display. Does nothing if it is already open. This will make sure fl_display is non-zero. You should call this if you wish to do X calls and there is a chance that your code will be called before the first show() of a window. This may call Fl::abort() if there is an error opening the display.

This closes the X connection. You do not need to call this to exit, and in fact it is faster to not do so! It may be useful to call this if you want your program to continue without the X connection. You cannot open the display again, and probably cannot call any FLTK functions.

extern int fl_screen

Which screen number to use. This is set by fl_open_display() to the default screen. You can change it by setting this to a different value immediately afterwards. It can also be set by changing the last number in the Fl::display() string to «host:0.#».

extern XVisualInfo *fl_visual
extern Colormap fl_colormap

The visual and colormap that FLTK will use for all windows. These are set by fl_open_display() to the default visual and colormap. You can change them before calling show() on the first window. Typical code for changing the default visual is:

Using a Subclass of Fl_Window for Special X Stuff

FLTK can manage an X window on a different screen, visual and/or colormap, you just can’t use FLTK’s drawing routines to draw into it. But you can write your own draw() method that uses Xlib (and/or OpenGL) calls only.

FLTK can also manage XID’s provided by other libraries or programs, and call those libraries when the window needs to be redrawn.

To do this, you need to make a subclass of Fl_Window and override some of these virtual functions:

If the window is already shown() this must cause it to be raised, this can usually be done by calling Fl_Window::show(). If not shown() your implementation must call either Fl_X::set_xid() or Fl_X::make_xid(). An example:

vo > This static method does the most onerous parts of creating an X window, including setting the label, resize limitations, etc. It then does Fl_X::set_xid() with this new window and maps the window.

This virtual function is called by Fl::flush() to update the window. For FLTK’s own windows it does this by setting the global variables fl_window and fl_gc and then calling the draw() method. For your own windows you might just want to put all the drawing code in here. The X region that is a combination of all damage() calls done so far is in Fl_X::i(this)->region . If NULL then you should redraw the entire window. The undocumented function fl_clip_region(XRegion) will initialize the FLTK clip stack with a region or NULL for no clipping. You must set region to NULL afterwards as fl_clip_region() will own and delete it when done. If damage() & FL_DAMAGE_EXPOSE then only X expose events have happened. This may be useful if you have an undamaged image (such as a backing buffer) around. Here is a sample where an undamaged image is kept somewhere:

Destroy the window server copy of the window. Usually you will destroy contexts, pixmaps, or other resources used by the window, and then call Fl_Window::hide() to get rid of the main window identified by xid() . If you overr >

Because of the way C++ works, if you override hide() you must override the destructor as well (otherwise only the base class hide() is called):

Setting the Icon of a Window

FLTK currently supports setting a window’s icon before it is shown using the Fl_Window::icon() method.


Sets the icon for the window to the passed pointer. You will need to cast the icon Pixmap to a char* when calling this method. To set a monochrome icon using a bitmap compiled with your application use:

When using the Xpm library, be sure to include it in the list of libraries that are used to link the application (usually «-lXpm»).

You must call Fl_Window::show(int argc, char** argv) for the icon to be used. The Fl_Window::show() method does not bind the icon to the window.

X Resources

When the Fl_Window::show(int argc, char** argv) method is called, FLTK looks for the following X resources:

  • background — The default background color for widgets (color).
  • dndTextOps — The default setting for drag and drop text operations (boolean).
  • foreground — The default foreground (label) color for widgets (color).
  • scheme — The default scheme to use (string).
  • selectBackground — The default selection color for menus, etc. (color).
  • Text.background — The default background color for text fields (color).
  • tooltips — The default setting for tooltips (boolean).
  • visibleFocus — The default setting for visible keyboard focus on non-text widgets (boolean).

Resources associated with the first window’s Fl_Window::xclass() string are queried first, or if no class has been specified then the class «fltk» is used (e.g. fltk.background ). If no match is found, a global search is done (e.g. *background ).

The Windows (WIN32) Interface

The Windows interface provides access to the WIN32 GDI state information and data structures.

Using filenames with non-ASCII characters

In FLTK, all strings, including filenames, are UTF-8 encoded. The utility functions fl_fopen() and fl_open() allow to open files potentially having non-ASCII names in a cross-platform fashion, whereas the standard fopen()/open() functions fail to do so.

Responding to WM_QUIT

FLTK will intercept WM_QUIT messages that are directed towards the thread that runs the main loop. These are converted to SIGTERM signals via raise() . This allows you to deal with outside termination requests with the same code on both Windows and UNIX systems. Other processes can send this message via PostThreadMessage() in order to request, rather than force your application to terminate.

Handling Other WIN32 Messages

By default a single WNDCLASSEX called «FLTK» is created. All Fl_Window ‘s are of this class unless you use Fl_Window::xclass(). The window class is created the first time Fl_Window::show() is called.

You can probably combine FLTK with other libraries that make their own WIN32 window classes. The easiest way is to call Fl::wait(), as it will call DispatchMessage() for all messages to the other windows. If necessary you can let the other library take over as long as it calls DispatchMessage() , but you will have to arrange for the function Fl::flush() to be called regularly so that widgets are updated, timeouts are handled, and the idle functions are called.

extern MSG fl_msg

This variable contains the most recent message read by GetMessage() , which is called by Fl::wait(). This may not be the most recent message sent to an FLTK window, because silly WIN32 calls the handle procedures directly for some events (sigh).

Installs a function to parse unrecognized messages sent to FLTK windows. If FLTK cannot figure out what to do with a message, it calls each of these functions (most recent first) until one of them returns non-zero. The argument passed to the functions is the FLTK event that was not handled or zero for unknown messages. If all the handlers return zero then FLTK calls DefWindowProc() .


HWND fl_xid(const Fl_Window *)

Returns the window handle for a Fl_Window, or zero if not shown() .

Returns the Fl_Window that corresponds to the given window handle, or NULL if not found. This function uses a cache so it is slightly faster than iterating through the windows yourself.

Drawing Things Using the WIN32 GDI

When the virtual function Fl_Widget::draw() is called, FLTK stores all the extra arguments you need to make a proper GDI call in some global variables:

These global variables are set before Fl_Widget::draw() is called, or by will go into this window. «>Fl_Window::make_current(). You can refer to them when needed to produce GDI calls, but don’t attempt to change them. The functions return GDI objects for the current color set by fl_color() and are created as needed and cached. A typical GDI drawing call is written like this:

It may also be useful to refer to Fl_Window::current() to get the window’s size or position.

Setting the Icon of a Window

FLTK currently supports setting a window’s icon before it is shown using the Fl_Window::icon() method.

Sets the icon for the window to the passed pointer. You will need to cast the HICON handle to a char* when calling this method. To set the icon using an icon resource compiled with your application use:

You can also use the LoadImage() and related functions to load specific resolutions or create the icon from bitmap data.

You must call Fl_Window::show(int argc, char** argv) for the icon to be used. The Fl_Window::show() method does not bind the icon to the window.

How to Not Get a MSDOS Console Window

WIN32 has a really stupid mode switch stored in the executables that controls whether or not to make a console window.

To always get a console window you simply create a console application (the «/SUBSYSTEM:CONSOLE» option for the linker). For a GUI-only application create a WIN32 application (the «/SUBSYSTEM:WINDOWS» option for the linker).

FLTK includes a WinMain() function that calls the ANSI standard main() entry point for you. This function creates a console window when you use the debug version of the library.

WIN32 applications without a console cannot write to stdout or stderr , even if they are run from a console window. Any output is silently thrown away. Additionally, WIN32 applications are run in the background by the console, although you can use «start /wait program» to run them in the foreground.

Known WIN32 Bugs and Problems

The following is a list of known bugs and problems in the WIN32 version of FLTK:

  • If a program is deactivated, Fl::wait() does not return until it is activated again, even though many events are delivered to the program. This can cause idle background processes to stop unexpectedly. This also happens while the user is dragging or resizing windows or otherwise holding the mouse down. We were forced to remove most of the efficiency FLTK uses for redrawing in order to get windows to update while being moved. This is a design error in WIN32 and probably impossible to get around.
  • Fl_Gl_Window::can_do_overlay() returns true until the first time it attempts to draw an overlay, and then correctly returns whether or not there is overlay hardware.
  • SetCapture (used by Fl::grab() ) doesn’t work, and the main window title bar turns gray while menus are popped up.
  • Compilation with gcc 3.4.4 and -Os exposes an optimisation bug in gcc. The symptom is that when drawing filled circles only the perimeter is drawn. This can for instance be seen in the symbols demo. Other optimisation options such as -O2 and -O3 seem to work OK. More details can be found in STR#1656

The Apple OS X Interface

FLTK supports Apple OS X using the Apple Cocoa library. Older versions of MacOS are no longer supported.

Control, Option, and Command Modifier Keys

FLTK maps the Mac ‘control’ key to FL_CTRL , the ‘option’ key to FL_ALT and the ‘Apple’ key to FL_META . Furthermore, FL_COMMAND designates the ‘Apple’ key on Mac OS X and the ‘control’ key on other platforms. Keyboard events return the key name in Fl::event_key() and the keystroke translation in Fl::event_text(). For example, typing Option-Y on a Mac US keyboard will set FL_ALT in Fl::event_state(), set Fl::event_key() to ‘y’ and return the Yen symbol in Fl::event_text().

Fltk — FLTK , проблема с #ifdef

Здравствуйте, bc_kaya, Вы писали:

_>Добрый день. Появилась ли возможность работать с русским языком в FLTK (Fast Light Toolkit) в 2к19?
Приветствую. Студент 2 курса, пишу по поручению Лаптева В.В. С однокурсниками мы придумали небольшой фикс, который должен сработать на русскоязычной Windows.
Для этого необходимо взять исходники версии fltk-1.3.4-2 и модифицировать 2 файла.
В файле файле src/fl_draw.cxx на строке 162 добавить следующий код:

В файле src/Fl_Window.cxx заменить конструктор на строке 74 на следующий:

В этом же файле заменить конструктор на строке 82 на следующий:

От: LaptevVV
Дата: 10.01.19 07:36
Оценка:
От: niXman
Дата: 10.01.19 08:05
Оценка: +1

Здравствуйте, bc_kaya, Вы писали:

_>Добрый день. Появилась ли возможность работать с русским языком в FLTK (Fast Light Toolkit) в 2к19?


зы
кстати, хорошая либа. использую для всяких тулзов и визуализаций.

От: LaptevVV
Дата: 10.01.19 08:36
Оценка:
От: niXman
Дата: 10.01.19 08:43
Оценка:

Здравствуйте, LaptevVV, Вы писали:

LVV>Вот проект одного из студентов 3-его курса, выложенный на GitHub: https://github.com/LIQUIDDEATH13/FLTKRUS

круто, конечно.
но вместо всего того что там написано и сделано, нужно было просто предоставить patch =)
а еще лучше — предложить его разрабам, если описанная проблема действительно существует и этот patch ее бы решал =)

От: bc_kaya
Дата: 10.01.19 08:44
Оценка:

Здравствуйте, DST, Вы писали:

DST>Здравствуйте, bc_kaya, Вы писали:

_>>Добрый день. Появилась ли возможность работать с русским языком в FLTK (Fast Light Toolkit) в 2к19?
DST>Приветствую. Студент 2 курса, пишу по поручению Лаптева В.В. С однокурсниками мы придумали небольшой фикс, который должен сработать на русскоязычной Windows.
DST>Для этого необходимо взять исходники версии fltk-1.3.4-2 и модифицировать 2 файла.
DST>В файле файле src/fl_draw.cxx на строке 162 добавить следующий код:
DST>

DST>В файле src/Fl_Window.cxx заменить конструктор на строке 74 на следующий:
DST>

DST>В этом же файле заменить конструктор на строке 82 на следующий:
DST>

Спасибо, но это не полностью решило мою проблему

От: bc_kaya
Дата: 10.01.19 08:46
Оценка:

Здравствуйте, niXman, Вы писали:

X>Здравствуйте, bc_kaya, Вы писали:

_>>Добрый день. Появилась ли возможность работать с русским языком в FLTK (Fast Light Toolkit) в 2к19?

X>так ведь сделали это.
X>https://www.fltk.org/doc-1.3/unicode.html
X>https://stackoverflow.com/questions/19198848/how-to-display-unicode-with-fltk

X>зы
X>кстати, хорошая либа. использую для всяких тулзов и визуализаций.

Дело в том, что в данном случае, если правильно понимаю, необходимо использовать функцию каждый раз, когда я хочу вывести текст в кириллической кодировке
Хотелось бы иметь возможность работать с русским текстом без написания «лишнего» кода

От: niXman
Дата: 10.01.19 08:48
Оценка:

Здравствуйте, bc_kaya, Вы писали:

_>Дело в том, что в данном случае, если правильно понимаю, необходимо использовать функцию каждый раз, когда я хочу вывести текст в кириллической кодировке
_>Хотелось бы иметь возможность работать с русским текстом без написания «лишнего» кода

перейдите по второй ссылке, там ведь есть пример вывода кирилического текста на виджете. никаких костылей я там не вижу.

От: bc_kaya
Дата: 10.01.19 08:52
Оценка:

Здравствуйте, niXman, Вы писали:

X>Здравствуйте, bc_kaya, Вы писали:

_>>Дело в том, что в данном случае, если правильно понимаю, необходимо использовать функцию каждый раз, когда я хочу вывести текст в кириллической кодировке
_>>Хотелось бы иметь возможность работать с русским текстом без написания «лишнего» кода

X>перейдите по второй ссылке, там ведь есть пример вывода кирилического текста на виджете. никаких костылей я там не вижу.

Невнимательно взглянул, прошу прощения =(
Вижу использование u8 =)

От: bc_kaya
Дата: 10.01.19 08:54
Оценка:

Здравствуйте, LaptevVV, Вы писали:

LVV>Вот проект одного из студентов 3-его курса, выложенный на GitHub: https://github.com/LIQUIDDEATH13/FLTKRUS

Выглядит интересно, вечерком опробую

От: bc_kaya
Дата: 11.01.19 22:42
Оценка: 26 (1)

Здравствуйте, LaptevVV, Вы писали:

LVV>Вот проект одного из студентов 3-его курса, выложенный на GitHub: https://github.com/LIQUIDDEATH13/FLTKRUS

Моё почтение, с пользой потратил время на изучение. Скомбинировав файлы из репозитория и решение вашего студента (как полагаю), получил то, что было нужно
Было б ещё хорошо, если бы кто-нибудь переписал на современный лад библиотеку виджетов, а не заниматься вечной борьбой с const char* =(

От: LaptevVV
Дата: 12.01.19 09:49
Оценка:
От: bc_kaya
Дата: 12.01.19 15:07
Оценка:

Здравствуйте, LaptevVV, Вы писали:

LVV>>>Вот проект одного из студентов 3-его курса, выложенный на GitHub: https://github.com/LIQUIDDEATH13/FLTKRUS
_>>Моё почтение, с пользой потратил время на изучение. Скомбинировав файлы из репозитория и решение вашего студента (как полагаю), получил то, что было нужно
_>>Было б ещё хорошо, если бы кто-нибудь переписал на современный лад библиотеку виджетов, а не заниматься вечной борьбой с const char* =(
LVV>Ну, могу поручить студентам в качестве курсовой.
LVV>Наверное и поручу — будет потом как часть его выпускной фигурировать.

Считаю, что «модернизирование» и адаптация к современным реалиям С-шной (как субъективно считаю) библиотеки пойдёт на пользу и её начнут активнее использовать программисты, реализующие оконный интерфейс в своём software

Пытаемся запустить fltk, но получим неопределенную ошибку

Я пытаюсь скомпилировать старое назначение программирования, а при использовании сервера моих школ он компилируется без ошибок и все еще работает. Я пытаюсь скомпилировать на своем домашнем компьютере, но дал бы мне эту ошибку, когда я сделаю:

g++ -std=c++11 -c -o Graph.o Graph.cpp g++ -std=c++11 -c -o GUI.o GUI.cpp g++ -std=c++11 -c -o Simple_window.o Simple_window.cpp g++ -std=c++11 -c -o Window.o Window.cpp g++ -std=c++11 -lfltk -lfltk_images sample_main4.cpp Graph.o GUI.o Simple_window.o Window.o /tmp/ccshmUhR.o: In function `Graph_lib::Window::

Window()’: sample_main4.cpp:(.text._ZN9Graph_lib6WindowD2Ev[_ZN9Graph_lib6WindowD5Ev]+0x31): undefined reference to `Fl_Window::

Fl_Window()’ /tmp/ccshmUhR.o:(.rodata._ZTV13Simple_window[_ZTV13Simple_window]+0x28): undefined reference to `Fl_Window::handle(int)’ /tmp/ccshmUhR.o:(.rodata._ZTV13Simple_window[_ZTV13Simple_window]+0x30): undefined reference to `Fl_Window::resize(int, int, int, int)’ /tmp/ccshmUhR.o:(.rodata._ZTV13Simple_window[_ZTV13Simple_window]+0x38): undefined reference to `Fl_Window::show()’ /tmp/ccshmUhR.o:(.rodata._ZTV13Simple_window[_ZTV13Simple_window]+0x40): undefined reference to `Fl_Window::hide()’ /tmp/ccshmUhR.o:(.rodata._ZTV13Simple_window[_ZTV13Simple_window]+0x60): undefined reference to `Fl_Window::flush()’ Graph.o: In function `Graph_lib::draw_mark(Point, char)’: Graph.cpp:(.text+0xb9e): undefined reference to `fl_draw(char const*, int, int)’ Graph.o: In function `Graph_lib::Text::draw_lines() const’: Graph.cpp:(.text+0x1223): undefined reference to `fl_draw(char const*, int, int)’ Graph.o: In function `Graph_lib::Image::Image(Point, String, Graph_lib::Suffix::Encoding)’: Graph.cpp:(.text+0x1dbc): undefined reference to `Fl_JPEG_Image::Fl_JPEG_Image(char const*)’ Graph.cpp:(.text+0x1df6): undefined reference to `Fl_GIF_Image::Fl_GIF_Image(char const*)’ Graph.o: In function `Fl_Image::Fl_Image(int, int, int)’: Graph.cpp:(.text._ZN8Fl_ImageC2Eiii[_ZN8Fl_ImageC5Eiii]+0x12): undefined reference to `vtable for Fl_Image’ Graph.o: In function `fl_color(unsigned int)’: Graph.cpp:(.text._Z8fl_colorj[_Z8fl_colorj]+0xe): undefined reference to `fl_graphics_driver’ Graph.cpp:(.text._Z8fl_colorj[_Z8fl_colorj]+0x21): undefined reference to `fl_graphics_driver’ Graph.o: In function `fl_color()’: Graph.cpp:(.text._Z8fl_colorv[_Z8fl_colorv]+0x7): undefined reference to `fl_graphics_driver’ Graph.o: In function `fl_line_style(int, int, char*)’: Graph.cpp:(.text._Z13fl_line_styleiiPc[_Z13fl_line_styleiiPc]+0x15): undefined reference to `fl_graphics_driver’ Graph.cpp:(.text._Z13fl_line_styleiiPc[_Z13fl_line_styleiiPc]+0x26): undefined reference to `fl_graphics_driver’ Graph.o:Graph.cpp:(.text._Z7fl_rectiiii[_Z7fl_rectiiii]+0x17): more undefined references to `fl_graphics_driver’ follow Graph.o: In function `Graph_lib::Bad_image::draw(int, int, int, int, int, int)’: Graph.cpp:(.text._ZN9Graph_lib9Bad_image4drawEiiiiii[_ZN9Graph_lib9Bad_image4drawEiiiiii]+0x2d): undefined reference to `Fl_Image::draw_empty(int, int)’ Graph.o:(.rodata._ZTVN9Graph_lib9Bad_imageE[_ZTVN9Graph_lib9Bad_imageE]+0x20): undefined reference to `Fl_Image::copy(int, int)’ Graph.o:(.rodata._ZTVN9Graph_lib9Bad_imageE[_ZTVN9Graph_lib9Bad_imageE]+0x28): undefined reference to `Fl_Image::color_average(unsigned int, float)’ Graph.o:(.rodata._ZTVN9Graph_lib9Bad_imageE[_ZTVN9Graph_lib9Bad_imageE]+0x30): undefined reference to `Fl_Image::desaturate()’ Graph.o:(.rodata._ZTVN9Graph_lib9Bad_imageE[_ZTVN9Graph_lib9Bad_imageE]+0x38): undefined reference to `Fl_Image::label(Fl_Widget*)’ Graph.o:(.rodata._ZTVN9Graph_lib9Bad_imageE[_ZTVN9Graph_lib9Bad_imageE]+0x40): undefined reference to `Fl_Image::label(Fl_Menu_Item*)’ Graph.o:(.rodata._ZTVN9Graph_lib9Bad_imageE[_ZTVN9Graph_lib9Bad_imageE]+0x50): undefined reference to `Fl_Image::uncache()’ Graph.o: In function `Graph_lib::Bad_image::

Bad_image()’: Graph.cpp:(.text._ZN9Graph_lib9Bad_imageD2Ev[_ZN9Graph_lib9Bad_imageD5Ev]+0x20): undefined reference to `Fl_Image::

Fl_Image()’ Graph.o:(.rodata._ZTIN9Graph_lib9Bad_imageE[_ZTIN9Graph_lib9Bad_imageE]+0x10): undefined reference to `typeinfo for Fl_Image’ GUI.o: In function `Graph_lib::Button::attach(Graph_lib::Window&)’: GUI.cpp:(.text+0x5b): undefined reference to `Fl_Button::Fl_Button(int, int, int, int, char const*)’ GUI.o: In function `Graph_lib::In_box::attach(Graph_lib::Window&)’: GUI.cpp:(.text+0x1b3): undefined reference to `Fl_Input::Fl_Input(int, int, int, int, char const*)’ GUI.o: In function `Graph_lib::Out_box::put(String const&)’: GUI.cpp:(.text+0x229): undefined reference to `Fl_Input_::value(char const*)’ GUI.o: In function `Graph_lib::Out_box::attach(Graph_lib::Window&)’: GUI.cpp:(.text+0x291): undefined reference to `Fl_Output::Fl_Output(int, int, int, int, char const*)’ Simple_window.o: In function `Simple_window::wait_for_button()’: Simple_window.cpp:(.text+0x160): undefined reference to `Fl::wait()’ Simple_window.cpp:(.text+0x167): undefined reference to `Fl::redraw()’ Window.o: In function `Graph_lib::Window::Window(int, int, String const&)’: Window.cpp:(.text+0x34): undefined reference to `Fl_Window::Fl_Window(int, int, char const*)’ Window.cpp:(.text+0x9b): undefined reference to `Fl_Window::

Fl_Window()’ Window.o: In function `Graph_lib::Window::Window(Point, int, int, String const&)’: Window.cpp:(.text+0xf6): undefined reference to `Fl_Window::Fl_Window(int, int, int, int, char const*)’ Window.cpp:(.text+0x15d): undefined reference to `Fl_Window::

Fl_Window()’ Window.o: In function `Graph_lib::Window::draw()’: Window.cpp:(.text+0x1c3): undefined reference to `Fl_Window::draw()’ Window.o: In function `Graph_lib::Window::attach(Graph_lib::Widget&)’: Window.cpp:(.text+0x236): undefined reference to `Fl_Group::begin()’ Window.cpp:(.text+0x260): undefined reference to `Fl_Group::end()’ Window.o: In function `Graph_lib::gui_main()’: Window.cpp:(.text+0x47b): undefined reference to `Fl::run()’ Window.o:(.rodata._ZTVN9Graph_lib6WindowE[_ZTVN9Graph_lib6WindowE]+0x28): undefined reference to `Fl_Window::handle(int)’ Window.o:(.rodata._ZTVN9Graph_lib6WindowE[_ZTVN9Graph_lib6WindowE]+0x30): undefined reference to `Fl_Window::resize(int, int, int, int)’ Window.o:(.rodata._ZTVN9Graph_lib6WindowE[_ZTVN9Graph_lib6WindowE]+0x38): undefined reference to `Fl_Window::show()’ Window.o:(.rodata._ZTVN9Graph_lib6WindowE[_ZTVN9Graph_lib6WindowE]+0x40): undefined reference to `Fl_Window::hide()’ Window.o:(.rodata._ZTVN9Graph_lib6WindowE[_ZTVN9Graph_lib6WindowE]+0x60): undefined reference to `Fl_Window::flush()’ Window.o:(.rodata._ZTIN9Graph_lib6WindowE[_ZTIN9Graph_lib6WindowE]+0x10): undefined reference to `typeinfo for Fl_Window’ collect2: error: ld returned 1 exit status makefile:25: recipe for target ‘main’ failed make: *** [main] Error 1

Это мой файл make:

CC = g++ # the c compiler to use DFLAGS = -std=c++11 # common defines FLTK = -lfltk -lfltk_images # fltk defines all: main clean: rm -f *.o # ==== FLTK LIBRARY ==== Graph.o: Graph.cpp $(CC) $(DFLAGS) -c -o $@ $

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

Fltk — FLTK , проблема с #ifdef

Вобщем проблема такова — дали мне библиотеку FLTK, и озадачили подключить ее к VS 6.0. Сделал как написано в инструкции: «The first is to use VC++ project files under the «vusualc» directory. Just open (or duble-click) the «fltk.dsw» file to get the whole shedbang.». Сделал. И в итоге я ничего не получил. Пытался и подключать директории через Tools- gt;Option, и что только ни делал, при попытки компиляции простого «Hello Word» ругается что не найдены хедеры, а при компиляции демо проекта, говорит что нужен fltkd.lib.
Как мне эту либу подцепить. Помогите.

Пробовал также качнуть MinGW c www.mingw.org , но там скачка не доступна. В инете нашел, правда ни все, файлы для сборки, но тоже ничего не вышло, половина оказалась кривыми, один даже не распокавался

Подскажите, как мне выкрутиться из этой с итуации с наименьшими потерями.

Наверное, надо сначала определить, есть ли в наличии сама библиотека «fltkd.lib», и если она есть, прописать её в «Project Settings- gt;Link (Input)- gt; Object/Library modules. » и указать путь к ней в «Project Settings- gt;Link (Input)- gt; Additional library path»

если лениво копацца в свойствая проекта, кури доку на счет «#pragma comment (lib, » lib path «)»

Проблемы с компиляцией с фреймворком FLTK

У меня, кажется, проблемы с компиляцией программ FLTK с использованием чего-либо, кроме скрипта fltk-config.

Я скопировал источник из программы «Привет мир» в учебнике. Когда я бегу FLTK-конфигурации —compile hello.cpp он печатает

и компилируется нормально. Но когда я сам печатаю то же самое, он говорит, что ld.exe не может найти -lcomct132.

Я использую FLTK 1.3.0, скомпилированный на MinGW под WinXP.

Создан 04 мар. 11 2011-03-04 14:31:12 XonX

2 ответа

Бьюсь об заклад, что скрипт fltk-config устанавливает переменные среды, которые вы не настроили. Проверьте документацию FLTK и посмотрите необходимые переменные среды, которые необходимо настроить для компиляции без вспомогательного скрипта.

Edit: сделал некоторые исследования

Видимо вы не единственный, кто имеет связь проблемы. Я нашел аналогичную проблему на форуме here и в новостной группе fltk.general. По-видимому, консенсус состоит в том, что порядок аргументов связи важен, а использование сценария fltk-config — самый простой способ продолжения.

Создан 04 мар. 11 2011-03-04 18:25:29 nathan

Я проверил документацию дважды, но ничего не нашел о переменных среды под окнами. К сожалению, я мало что знаю о сценариях оболочки, поэтому я не могу понять, действительно ли он устанавливает какие-либо переменные среды. – XonX 04 мар. 11 2011-03-04 19:26:43

Я не получил эту конкретную ошибку, но у меня была проблема с «lcomct132». Возможно, ваша ошибка связана с этим. Так, в моем случае здесь был РЕШЕНИЕ:

  • «132» на самом деле только «32». «1» — это не число, а маленькая буква L. Так что это «lcomctl32»!

Создан 01 ноя. 16 2020-11-01 16:53:29 NunoCP

Цукерберг рекомендует:  Сервер - Нужен ли сервер для мобильной онлайн игры
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих