2011-04-01 45 views
0

我是C++的新手,之前從未使用過宏,但我相信他們可能會允許我解決以下問題,但我會歡迎其他解決方案。C++動態顯示或隱藏FLTK小部件?

我寫了下面的宏:

#define COMMAND(NUMBER){ button_ ## NUMBER ## ->hide(); } 

,我想這樣稱呼它

for (int i = 1; i < 10; i++) 
{ 
    COMMAND(i) 
} 
,希望在程序執行時,它會做的相當於

button_1->hide(); 
button_2->hide(); 
button_3->hide(); 
button_4->hide(); 
     . 
     . 
button_10->hide(); 

這個想法是,我想要使一個FLTK GUI顯示/隱藏小部件動態取決於一個公司當表單被加載時讀入的配置文件。

不幸的是,看起來,宏觀以上不工作,而不是它的作用是

button_i->hide(); 

因爲button_i不存在這會導致編譯錯誤!

所以我的問題是:
A)是否有可能在C++中做到這一點? B)宏是否能夠實現這一目標?
c)如果不是可以的話? D)如果宏可以做到這一點,那麼我該如何修改上面的代碼才能真正實現它!

謝謝

回答

1

我很確定有一種方法可以使宏觀把戲工作,但有更好的選擇。

例如,您可以將按鈕存儲在數組中。

假設你的按鈕有一個名爲struct button類型,聲明你的按鈕是這樣的:

struct button *buttons[42]; 

需要初始化所有的人,你會爲您的個人button_X變量。

​​

然後,你可以簡單地做:

for (int i=0; i<42; i++) { 
    button[i]->hide(); 
} 

或者只用它的編號改變任何單個按鈕。從長遠來看,你可能會發現比任何宏觀把戲都好。

(警告:數組是基於0,所以你的第一個按鈕是button[0]

+0

該死的,你打我19秒;) – Lindydancer 2011-04-01 15:48:40

+0

你是對的,存儲在一個數組是一個更好的解決方案。我發現[這裏有一個很好的fltk特定解決方案](http://www.mail-archive.com/[email protected]/msg04350.html) – Gavimoss 2011-04-04 08:21:15

0

如果你有過button_2等變量的控制,我會建議使用數組來代替。這樣你可以使用看起來像:

for (int i = 1; i < 10; i++) 
{ 
    button[i]->hide(); 
} 

當然,這是微不足道的放在一個宏。

一般來說,你不能用C中的一個簡單循環完成你想要的。但是,如果您真的想要使用,請查看boost預處理器軟件包。

-1

不要試圖自己管理按鈕,FLTK不喜歡那樣。你將有一個你看不到的真棒按鈕陣列。我不知道該怎麼做你想要的方式,但我會做這種方式:

Fl_Button * o = (Fl_Button *)myWindow->child(i); 
o->hide(); 

,讓按鍵是FLTK窗口的孩子。