首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置按钮的活动标签颜色

设置按钮的活动标签颜色
EN

Stack Overflow用户
提问于 2014-09-14 07:28:24
回答 3查看 1.9K关注 0票数 0

我使用的是fltk 1.3.2。将按钮的标签颜色设置为

代码语言:javascript
复制
_button->labelcolor(fl_rgb_color(162, 60, 62));

但是当我按下按钮时,颜色就变了。

我找不到如何设置活动标签颜色的函数。

有人知道怎么做吗?

编辑:在创建窗口之前,我使用Fl::背景()和Fl::前台()函数。这就是问题所在。

Edit2:

这个例子显示了这个问题。

代码语言:javascript
复制
#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::背景()函数时,一切都很好。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-28 16:06:22

你看到的是对比颜色(见下面注释掉的代码)。当按下按钮时,FLTK就会这样做。它得到按钮的颜色,根据前景和背景色计算出对比颜色。有关更多细节,请查看fl_contrast的帮助。

基本上,如果有足够的对比度,它将使用前景颜色,否则它将找到一个对比的颜色为您的背景。

看你怎么办?

  1. 什么也不做--就是这样。
  2. 选择一个较浅的背景颜色,以满足对比条件。
  3. 使用自己的绘制方法创建自己的按钮类型 类KeepFGButton : public Fl_Button { public: KeepFGButton(int x,int y,int w,int h,const char* s):Fl_Button(x,y,w,h,s) {} { if (type() == FL_HIDDEN_BUTTON)返回;Fl_Color Fl_Color= value()?selection_color():color();draw_box(value()?(down_box()down_box():fl_down(box()):box(),col);draw_backdrop();//删除更改对比度//if (标签类型() == FL_NORMAL_LABEL & value()) { // Fl_Color c= labelcolor();//标签颜色(fl_contrast(c,col));// draw_label();//标签颜色(C)的代码;//} //else draw_label();if (Fl::== ()== this) draw_focus();} }; int main(int argc,char ** argv) {Fl:背景(0x60,0x66,0x60); Fl_Window *window =新Fl_Window(320,130);Fl_Button *b =新KeepFGButton(10,10,130,30,"A红色标签“); ..。
票数 2
EN

Stack Overflow用户

发布于 2014-09-26 19:01:37

试一试,让我知道,当你运行它,标签变成白色。如果它没有,那么可能有其他的事情,你正在做的是不完全正确的。如果是的话,我不知道问题出在哪里。

代码语言:javascript
复制
#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();
}
票数 0
EN

Stack Overflow用户

发布于 2018-11-16 09:10:28

现在帮助作者肯定为时已晚,但如果这有助于其他人在FLTK中寻找这个仍然相关的问题的答案,我将提供我的解决方案:

如果您深入研究FLTK1.3.4-2的源代码(在本文中是当前稳定的),那么在调用阴影框或框架的绘图时会引用两个内置的彩色地图索引:FL_DARK3 (表示框)和FL_DARK2 (用于Fl_Scroll中的滚动条回颜色)。您可以查看这个FLTK文档,看看如何在运行时将这些颜色重置为任何您想要的颜色。尤其是,考虑到每当背景足够暗时,这种丑陋的红色默认混乱就会出现,因此,我只需将这些设置为稍微轻一点的叠加框颜色就行了:

代码语言:javascript
复制
    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生成的行为。

代码语言:javascript
复制
    Fl::set_color(FL_BACKGROUND2_COLOR, yourBgColor);

同样的技巧也适用于其他难以重置的颜色,如FL_INACTIVE_COLORFL_SELECTION_COLOR

希望这个解决办法能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25831049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档