2016-11-08 121 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

但它仍然是一個下拉選擇?你能告訴我一個例子嗎? –