none
自ウィンドウだけでなく子ウィンドウのマウスイベントも拾う方法 RRS feed

  • 質問

  • マウスキャプチャを使わずに、子ウィンドウのマウスイベントを拾うような便利な方法はありませんでしょうか?

    何故このようなことをしたいかというと、
    あるウィンドウにて、格子状に子ウィンドウを並べ(テーブルのような表現)
    行や列の端にマウスカーソルを当ててドラッグ&ドロップすると行全体のウィンドウの高さを変えたり
    列全体のウィンドウの幅を変えたり・・・、といったことをやりたいのです。


    自分が考え付いた方法は、全ての子ウィンドウのマウスイベントを親ウィンドウに転送する方法です。
    でも、この方法だと面倒だし、あまりスマートではないのでやりたくないのですが、、、何かいい方法はないものでしょうか?

    ※ちなみに、MFCを使っています。
    2008年12月24日 12:32

回答

  • 通常、親ウィンドウにマウスメッセージをそのまま渡したい場合、子ウィンドウのWM_NCHITTESTでHTTRANSPARENTを返すようにします。
    子ウィンドウの端の部分だけマウスメッセージを透過したければ、真ん中ではHTCLIENTを返すようにしてください。
    2008年12月26日 12:59
  • ご回答有難うございます。

    こういったやり方があるんですね。参考になります。

    実はここ数日間色々と、思案していまして、今回頂いた回答とは別のやり方なんですが
    子ウィンドウを横並びや縦並びに配置するスプリットウィンドウを自作する方向で進めています。
    (MFCのCSplitWindowも検討しましたが、入れ子にできる型に制約がありそうだったので断念)

    色々と不具合があり別件で質問したいことも出てきています。
    別スレッドで質問させて頂くことがあるかと思いますので、その時も宜しくお願いいたします。
    2008年12月28日 14:41

すべての返信

  • 通常、親ウィンドウにマウスメッセージをそのまま渡したい場合、子ウィンドウのWM_NCHITTESTでHTTRANSPARENTを返すようにします。
    子ウィンドウの端の部分だけマウスメッセージを透過したければ、真ん中ではHTCLIENTを返すようにしてください。
    2008年12月26日 12:59
  • ご回答有難うございます。

    こういったやり方があるんですね。参考になります。

    実はここ数日間色々と、思案していまして、今回頂いた回答とは別のやり方なんですが
    子ウィンドウを横並びや縦並びに配置するスプリットウィンドウを自作する方向で進めています。
    (MFCのCSplitWindowも検討しましたが、入れ子にできる型に制約がありそうだったので断念)

    色々と不具合があり別件で質問したいことも出てきています。
    別スレッドで質問させて頂くことがあるかと思いますので、その時も宜しくお願いいたします。
    2008年12月28日 14:41
  •  さんど さんからの引用
    (MFCのCSplitWindowも検討しましたが、入れ子にできる型に制約がありそうだったので断念)

    CSplitterWndのView部分の制限としてはCWndの派生クラスであることだけのはずです。

    動的スプリッタの場合にはスプリットできる数の問題はあるのですが、

    静的スプリッタなら自作するより今からでもCSplitterWndを使うことを吟味することをお勧めします。

     

    その結果、やはり今回はCSplitterWndが使えないという結論になったとしても、

    しっかりソースを見て吟味したことは無駄にはならないはずです。

     

    2008年12月30日 6:33