0

私は C++ を初めて使用し、これまでマクロを使用したことがありませんが、別の解決策を歓迎しますが、次の問題を解決できる可能性があると信じています。

以下のマクロを書きました。

#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) マクロでこれができる場合、上記のコードを実際に動作させるにはどうすればよいでしょうか!

ありがとう

4

3 に答える 3

1

マクロトリックを機能させる方法があると確信していますが、もっと良いオプションがあります。

たとえば、ボタンを配列に格納できます。

ボタンのタイプが、と呼ばれるstruct button場合、ボタンを次のように宣言します。

struct button *buttons[42];

個々のbutton_X変数の場合と同様に、それらすべてを初期化する必要があります。

button[i] = <whatever you do to create button number i>;

次に、次のことを簡単に行うことができます。

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

または、個々のボタンをその番号だけで切り替えます。長期的には、どのマクロトリックよりも優れていることがわかるでしょう。

(警告:配列は0ベースであるため、最初のボタンはbutton[0]

于 2011-04-01T15:47:32.887 に答える
0

などの変数を制御できる場合はbutton_2、代わりに配列を使用することをお勧めします。そうすれば、次のような外観を使用できます。

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

もちろん、これをマクロに配置するのは簡単です。

一般に、Cのプレーンループでは目的を達成することはできません。ただし、本当にそのルートを実行したい場合は、ブーストプリプロセッサパッケージを確認してください。

于 2011-04-01T15:47:52.043 に答える
-1

ボタンを自分で管理しようとしないでください。FLTK はそれを好みません。見えない素晴らしいボタンの配列があります。あなたが望む方法でそれを行う方法はわかりませんが、私はこのようにします:

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

ボタンを FLTK ウィンドウの子にします。

于 2013-02-19T23:22:15.063 に答える