2016-11-08 125 views
0

我有几个选择一个Fl_Choice,例如:每个项目的自定义背景颜色?

Fl_Choice* o = new Fl_Choice(70, 100, 240, 25, "Some Options:"); 
o->add("Blue"); 
o->add("Black"); 
o->add("Orange"); 
o->add("Purple"); 

我想设置自定义颜色为每个项目的背景,同时留下前景色为白色。

如何为每个项目设置自定义背景?

注:我使用的V90,不知道我应该使用什么标签为一个或者VS2008是足够的,和蔼如果它足以作为为删除此注释,或写信给我什么其他的标签,我应该添加评论。

回答

0

不是那么容易的设置背景颜色,但你可以设置前景色

Fl_Menu_Item choices[] = 
{ 
    //            ,-- The colour 
    {"red",0,(Fl_Callback*)0, (void*) 0, 0, 0, 0, 0, 0xFF000000}, 
    {"blue",0,(Fl_Callback*)0, (void*) 0, 0, 0, 0, 0, 0x0000FF00}, 
    {"green",0,(Fl_Callback*)0, (void*) 0, 0, 0, 0, 0, 0x00FF0000}, 
    {"yellow",0,(Fl_Callback*)0, (void*) 0, 0, 0, 0, 0, 0xFFFF0000}, 
    {0} 
}; 

... 

Fl_Choice *c = new Fl_Choice(50,250,200,25); 
c->menu(choices); 

或者,你可以从Fl_Choice得到,如果你不想这么多的零

class ColourChoice: public Fl_Choice 
{ 
public: 
    ColourChoice(int x, int y, int w, int h, const char* l = 0) 
     : Fl_Choice(x, y, w, h, l) 
    { 
    } 

    void add(const char* text, Fl_Color color) 
    { 
     Fl_Choice::add(text); 
     Fl_Menu_Item* item = const_cast<Fl_Menu_Item*>(find_item(text)); 
     item->labelcolor(color); 
    } 
}; 

... 
ColourChoice* c = new ColourChoice(...); 
c->add("purple", (Fl_Color)0xFF00FF00); 
+0

感谢花时间回答,背景有多不同?我甚至不知道该如何寻找诚实... fltk是一个很好的解决方案,但这些小问题很难找到例子或任何东西。不幸的是,我不能为你的答案投票,但希望一个好的灵魂会在我的位置这样做,直到我可以自己做。 –

+0

不需要upvote - 只需勾选它作为答案。改变背景涉及用背景颜色选项重写Fl_Menu。花一些时间来了解FLTK代码:有很多单行和单字母变量。背景的主要问题是您可能还必须更改前景色,因为某些组合不太清晰 - 例如蓝色为黑色。另一种选择是使用Fl_Radio_Light_Button并更改灯光的颜色,但会占用比Fl_Choice更多的空间。 – cup

+0

但它仍然是一个下拉选择?你能告诉我一个例子吗? –