親子関係のあるチェックボックスが表示されない。

[戻る]
GEZ 2011/05/23(月) 14:15:32
VS2008 Win7

1.ダイアログベースのプロジェクトを作成し、リソースエディタでボタンコントロール
と
  チェックボックスを貼り付けます。(チェックボックスはボタンの上にくるように貼
ります。)
2.ダイアログのOnInitDialog()の中で、
  ボタンのメンバ変数.ModifyStyle( BS_PUSHBUTTON, BS_GROUPBOX );
  でボタンをグルプボックス化します。
3.そのあと、ダイアログのOnInitDialog()の中で、
  チェックボックスのメンバ変数.SetParent( &ボタンのメンバ変数 );
  でチェックボックスの親をボタン(グルプボックス)にします。

上記のように、
親:ボタン(グルプボックス)、子:チェックボックスのようにすると、
チェックボックスがボタン(グルプボックス)に隠れて見えなくなってしまいます。

親子関係を作成しないと、チェックボックスは表示されますが、
訳あって親子関係を作成したままチェックボックスが表示されるように実装したいです。

親子関係を維持したまま、チェックボックスを表示するにはどのようにしたら良いでしょ
うか?
ご教授お願いいたします。

ねむねむ 2011/05/23(月) 16:10:35
チェックボックスの座標の基点がダイアログのままになっているため、
親ウインドウを変えて位置を維持するなら座標を再度セットしないといけないかと。

ボタンの表示を大きくするとずれて表示されると思いますが。


VS2005 WinXPで確認してますが、違うければごめんなさい。

GEZ 2011/05/23(月) 16:34:12
ねむねむさま

ありがとうございます。 
座標の基点ですがSPYで確認したところ正しい位置(グルプボックスの上)にあります。
SetParentで以下の親子関係になることが原因で、チェックボックスがボタンの下に隠れて
表示されないことは確認しています。

ダイアログ
 |
  ---ボタン(グルプボックス)
      |
      ---チェックボックス

ちなみに、チェックボックスに対して、SetWindowPosの第一引数にwndTop/wndTopMostや、
BringWindowToTopを試してみましたがNGでした。

ねむねむ 2011/05/23(月) 18:05:51
確認なのですが、2つのコントロールをダイアログの左上(座標で0,0)で重ねても同じ現
象になりますか?

例えば2つのコントロールを座標100,100で重ねて、チェックボックスをボタン(グループ
ボックス)の子ウインドウにすると、
ボタン(グループボックス)の位置から100,100の位置にチェックボックスを表示というこ
とになります。
そのためボタン(グループボックス)の描画範囲外になると表示されないです。
前カキコでは上記の事が起こってるかなと思いました。


VS2005では再現できなかったため、的外れな解答だったら申し分けない。

GEZ 2011/05/24(火) 09:41:56
[[解決]]
ねむねむさま

ありがとうございます。 私の勘違いでした。
親をグルプボックスにすると、親が基点としたRECTを子供にSetする必要があるのですね。
解決しました。

古いスレッドには追加発言できません。