Форум программистов, компьютерный форум, киберфорум
Программирование графики
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,601

Кнопка с иконкой FLTK

03.12.2025, 17:19. Показов 430. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Вопрос прозаический, касается не столько программирования сколько библиотеки FLTK, нужно создать кнопку, а поверх неё установить изображение Image, я решил создать производный от Button класс, назвал его Button_img, кнопка рисуется иконка показывается, но не растягивается на всю кнопку, вот собственно вопрос, как сделать так чтобы изображение иконки закрывала-растягивалось на всю кнопку?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Button_img : public Button
{
public:
    Button_img(const Point& p, int _w, int _h, const string& l, Callback cb, const string& img_name);
 
    void attach(Graph_lib::Window& win);
 
    ~Button_img() { delete im; }
private:
    string img_name;
    Image* im;
};
 
Button_img::Button_img(const Point& p, int _w, int _h, const string& l,
    Callback cb, const string& _img_name) :Button(p, _w, _h, l, cb), img_name(_img_name)
{
    if (img_name.empty())
        Bad_image(80, 120);
 
    
    im = new Image(Button::loc, img_name, Suffix::bmp);
    //im->set_mask(p, _w, _w);
    
}
 
void Button_img::attach(Graph_lib::Window& win)
{
    Button::attach(win);
    //win.attach(*im);
}
Поверх самой библиотеки FLTK библиотека страуструпа, собственно, класс Button оттуда.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.12.2025, 17:19
Ответы с готовыми решениями:

Создание оповещения над внутриигровой иконкой
Добрый день. Только начинаю осваивать программирование, как на Unity, так и в целом. Учусь на...

Проблема с иконкой на телефоне
Доброго времени суток, буду краток: 1: как должна выглядеть иконка 2: делал адаптивную и под...

FLTK GUI Секундомер
Задание: Интерфейс: графический, однооконный. Основное окно: два концентрических множества ...

4
 Аватар для Recrut_rf
377 / 320 / 65
Регистрация: 14.10.2014
Сообщений: 1,368
03.12.2025, 20:19
Всем здрасте!
FLTK запускал всего пару раз и очень давно. В общем не знаю я его. Но здравый смысл и логика говорит о том, что у родного класса Button из FLTK наверняка есть всякие опции и свойства. В том числе и для картинок. То есть я к чему всё это - наверное проще и разумнее создать объект с типом Button из FLTK и уже ему прописывать дополнительные свойства. А не наследованием заниматься. Выглядит как костыль.....
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,601
03.12.2025, 21:02  [ТС]
Цитата Сообщение от Recrut_rf Посмотреть сообщение
А не наследованием заниматься. Выглядит как костыль.....
Возможно, это так и выглядит, но тут в частности изучается и наследование, в данном случае, автор книги, написал эту библиотеку чтобы продемонстрировать работу с классами, наследование... Вот я и решил, что, возможно, это будет правильным решением.

Цитата Сообщение от Recrut_rf Посмотреть сообщение
наверное проще и разумнее создать объект с типом Buttonиз FLTK
Тогда уж проще свою кнопку создать, fl_box... Кто бы знал, что проще или что лучше, что имеет ввиду страуструп. Именно поэтому я и задаю вопрос, возможно, кто-то уже с этим сталкивался, возможно, кто-то знает эту библиотеку, работал с ней плотно ну или что-то в этом роде...
0
 Аватар для Recrut_rf
377 / 320 / 65
Регистрация: 14.10.2014
Сообщений: 1,368
Вчера, 12:48
Цитата Сообщение от Liss29 Посмотреть сообщение
возможно, это будет правильным решением
Цитата Сообщение от Liss29 Посмотреть сообщение
что проще или что лучше
А тут нету решений ни проще, ни лучше - всё зависит исключительно от архитектуры приложения и собственных хотелок.
Разберём на примере кнопки из FLTK:
Подход с созданием объекта:
Допустим нам нужна стандартная кнопка, но с красивостями - чтоб размеры поменять, картинку поверх добавить. Скорее-всего внутри объекта Кнопка из FLTK есть множество всяких свойств, которые устанавливаются соответствующими методами. В таком случае - создаём объект Кнопка из FLTK и методами этой кнопки задаём ей нужные свойства.
Подход с наследованием:
Но вдруг нужных свойств нет, да ещё и кнопку свою хотим необычную - чтоб сообщения выводила кофе варила тапки приносила и ещё что-нибудь делала. И делать хотим с таким расчётом, что во многих местах использовать её будем. Ну тогда наследуемся от Кнопка из FLTK и ваяем поверх неё свой функционал. А дальше - где надо создаём объект Моя супер кнопка и используем.

Цитата Сообщение от Liss29 Посмотреть сообщение
что имеет ввиду страуструп
а он тут просто наследованию обучает. Ни больше ни меньше
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,601
Вчера, 20:09  [ТС]
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Скорее-всего внутри объекта Кнопка из FLTK есть множество всяких свойств
Да, там содержатся функции-члены, но к сожалению, функции, которая нужна нет, scale - такая функция присутствует в описании, но в моём fltk её нет есть ещё функция copy(), думаю, самая подходящая мне функция.
Если обратиться к классам в иерархии классов, которые являются родителями для Fl_Button, то у них есть функция image(Fl_Widget*), которая, как я понимаю, создаёт или меняет метку кнопки. Попробовал без иерархии классов страуструпа, вроде как работает, метка появляется, но, опять же, не растягивается на всю кнопку, нужно применять функцию copy, и ещё один момент, когда окно меняет размер изображение размер не меняет вместе с кнопкой, это, думается мне, неправильно, хотя я установил обычную стандартную текстовую метку и она так же свой размер не меняет при изменении размеров окна и кнопки. Если уж авторы библиотеки не озаботились этим, то, думаю, мне и напрягаться по этому поводу не стоит. Хотя, есть ещё класс Fl_Group пока с ним не разобрался, возможно, в нём можно создать кнопку и метку чтобы при изменении размеров объекта-кнопка изменялась и метка тоже так сказать для эстетики.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<FL\Fl.h>
 
#include<FL\Fl_Box.h>
#include<FL\Fl_Window.h>
#include<FL\Fl_BMP_Image.h>
#include<FL\Fl_Button.h>
 
 
using namespace Graph_lib;
 
 
void cb_hi(Fl_Widget*, void* d)
{
    cerr << "Hi. You pressed button" << endl;
}
 
void cb_resizable(Fl_Widget* w, void* d)
{
    cerr << "\t\tbutton resize" << endl;
    
    Fl_Button* b = (Fl_Button*)w;
    Fl_Image* im = (Fl_Image*)d;
    if (im)
    {
        im = im->copy(b->w() - 3, b->h() - 4);
        b->image(im);
    }
    //b->redraw();
}
 
 
int main()
{
    Fl_Window* win = new Fl_Window(100, 100, 640, 420, "");
 
    win->begin();
    Fl_Button* b1 = new Fl_Button(640 / 2 - 35, 420 / 2 - 15, 70, 30);
 
    b1->box(Fl_Boxtype(FL_UP_BOX | FL_UP_FRAME));
 
    b1->callback(cb_hi);
    
 
    Fl_Image* im1 = new Fl_BMP_Image("D:\\Library\\8.bmp");
    Fl_Image* im2 = im1->copy(b1->w()-3, b1->h()-4);
    
    
    //b1->callback(cb_resizable);
    b1->image(im2);
    
    //b1->deimage(im1);
    
    win->resizable(win);
    
 
    win->end();
    win->show();
    return Fl::run();
}
Добавлено через 3 часа 6 минут
Цитата Сообщение от Recrut_rf Посмотреть сообщение
а он тут просто наследованию обучает. Ни больше ни меньше
Теперь как бы всё это сделать в стилистике классов библиотеки страуструпа.
По сути кнопка с изображением это тоже кнопка значит наследоваться нужно от уже имеющегося класса Button или, всё же, сделать Button полем класса как и Image...
Не думаю, что эту кнопку нужно объявлять, как отдельную сущность т.е. от библиотечных(fltk) классов наследоваться или делать их полями класса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
Вчера, 20:09
Помогаю со студенческими работами здесь

Кнопка возврата на предыдущую монтажную панель. (Кнопка "Назад")
Доброго времени суток, пытаюсь создать приложение в Unity. Суть приложения: Обычные переходы...

Как в режиме Texture Paint сменить иконку кисти?
В режиме &quot;Texture Paint&quot; добавил несколько кистей со своими настройками (текстурами, цветом, и пр.)...

Импорт иконки из exe в texture2d
Добрый день. У меня возникла проблема, когда я попытался импортировать иконку из exe файла код...

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

Как добавить счетчик на иконку игры android
Есть некоторые периодичные события в игре, которые создают новых юнитов, и было бы здорово их...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru