>>418  たとえば自分なら、こんな仕様が渡されたら

f= (p == &bottomWindow)<<2
+  (p == &topWindow)<<1
+  (0 != p -> visible )<<0

とすれば 0〜7の値となる。  さらに、
b= 1<<f;
とする。 値は1,2,4,...128 という値となる

条件判断部は
if(b&getSetting(__BEEP)){
}

てな感じにする

これで設定ファイルで この3つのどんな条件でも作れるという事になる
この場合、初期値は
f=0b011 3
f=0b100 4
f=0b101 5
f=0b110 6
f=0b111 7 で 0xF8 となる

ムダに複雑にしたように見えるかもしれないが
定型コードだから、書くのに手間はない。(というか、この設定値のGUIも作ってある)

実際、|| && を組み合わせるような条件は仕様変更の対象になり易い。
キミは修正してと言われたら帰ってビルドしなおしますと答える必要がある。
片方は、そのまま実行しながら条件を変更してみせられる。