我使用的是fltk 1.3.2。将按钮的标签颜色设置为
_button->labelcolor(fl_rgb_color(162, 60, 62));但是当我按下按钮时,颜色就变了。
我找不到如何设置活动标签颜色的函数。
有人知道怎么做吗?
编辑:在创建窗口之前,我使用Fl::背景()和Fl::前台()函数。这就是问题所在。
Edit2:
这个例子显示了这个问题。
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
#include <iostream>
void HitMe(Fl_Widget* w)
{
std::cout << "Ouch" << std::endl;
}
int main(int argc, char ** argv)
{
Fl::background(0x60, 0x66, 0x60);
Fl_Window *window = new Fl_Window(320,130);
Fl_Button *b = new Fl_Button(10, 10, 130, 30, "A red label");
b->labelcolor(fl_rgb_color(162, 60, 20));
b->callback(HitMe);
window->end();
window->show(argc,argv);
return Fl::run();
}当我注释掉Fl::背景()函数时,一切都很好。
发布于 2014-09-28 16:06:22
你看到的是对比颜色(见下面注释掉的代码)。当按下按钮时,FLTK就会这样做。它得到按钮的颜色,根据前景和背景色计算出对比颜色。有关更多细节,请查看fl_contrast的帮助。
基本上,如果有足够的对比度,它将使用前景颜色,否则它将找到一个对比的颜色为您的背景。
看你怎么办?
发布于 2014-09-26 19:01:37
试一试,让我知道,当你运行它,标签变成白色。如果它没有,那么可能有其他的事情,你正在做的是不完全正确的。如果是的话,我不知道问题出在哪里。
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
#include <iostream>
void HitMe(Fl_Widget* w)
{
std::cout << "Ouch" << std::endl;
}
int main(int argc, char ** argv) {
Fl_Window *window = new Fl_Window(320,130);
Fl_Button *b = new Fl_Button(10, 10, 130, 30, "A red label");
b->labelcolor(fl_rgb_color(162, 60, 20));
b->callback(HitMe);
window->end();
window->show(argc,argv);
return Fl::run();
}发布于 2018-11-16 09:10:28
现在帮助作者肯定为时已晚,但如果这有助于其他人在FLTK中寻找这个仍然相关的问题的答案,我将提供我的解决方案:
如果您深入研究FLTK1.3.4-2的源代码(在本文中是当前稳定的),那么在调用阴影框或框架的绘图时会引用两个内置的彩色地图索引:FL_DARK3 (表示框)和FL_DARK2 (用于Fl_Scroll中的滚动条回颜色)。您可以查看这个FLTK文档,看看如何在运行时将这些颜色重置为任何您想要的颜色。尤其是,考虑到每当背景足够暗时,这种丑陋的红色默认混乱就会出现,因此,我只需将这些设置为稍微轻一点的叠加框颜色就行了:
Fl_Color boxColor = 0x88888800;
Fl_Color boxShadowColor = 0xaaaaaa00;
Fl::set_color(FL_DARK3, boxShadowColor);
Fl::set_color(FL_DARK2, boxShadowColor);现在,创建您的标签,如上面和显示将摆脱红色阴影。N.b.还可以重写标准background2()行为,该行为将FL_BACKGROUND_COLOR重置为fl_contrast生成的行为。
Fl::set_color(FL_BACKGROUND2_COLOR, yourBgColor);同样的技巧也适用于其他难以重置的颜色,如FL_INACTIVE_COLOR和FL_SELECTION_COLOR。
希望这个解决办法能帮上忙。
https://stackoverflow.com/questions/25831049
复制相似问题