2012-02-16 11 views
0

私はwin32ウィンドウにカスタムタブコントロールを実装しようとしています。これはメインアプリケーションウィンドウ(メインタブコントロール用)と独立ウィンドウ用の子ウィンドウ個々のタブ項目。win32で階層化されたウィンドウを同時に移動する

私の問題:私はメインのアプリケーションウィンドウを移動するたびに、コントロールウィンドウも一緒に移動します(その子ウィンドウのため)。個々のタブアイテムウィンドウがその位置にとどまるところです。誰も私にタブ項目を取得する方法をガイドすることができますメインのアプリケーションウィンドウと一緒に同時に移動するウィンドウ?私は、アプリケーションの子として項目のウィンドウを設定することはできませんので、あなたの提案に基づいてください。

答えて

3

タブを子ウィンドウとして再設計する必要があります。さもなければそれを働かせるあなたの試みは最初の場所で悪く作られたものを修正するための絶望的な試みにほかならない。

元のプランを張っているように感じる場合は、メインアプリウィンドウをフック/サブクラス化し、その移動とサイジングメッセージ(WM_MOVINGとフレンド)を処理して、ハンドラがポップアップ/タブウィンドウの位置をそれぞれ更新できるようにする必要があります。

+0

実際には、タブ項目にレイヤードウィンドウを使用しています。 msdn(http://msdn.microsoft.com/en-us/library/windows/desktop/ff700543(v=vs.85).aspx)によれば、階層化されている場合、ウィンドウを子として指定することはできません窓。この層はちょうど独立していなければなりません。 ありがとう!私はあなたの2番目の提案を調べます。メインウィンドウにMFCウィンドウを使用していますが、WindPorc()メソッドがどこにあるのかわかりません。 私の不精な質問に申し訳ありません、私はwin32プログラミングで全部の初心者と私はMFCのすべての機能を使用することはできません。 –

+1

私はそれが欲しいと思った方法で私の答えを読まなかったのは怖いです。それはこのようでした:階層化されたウィンドウを使うべきではありません。代わりに子ウィンドウを使うべきです。 'WndProc'に関しては、すべてのウィンドウがそれを持ち、' ​​SetWindowLong'と 'GWL_WNDPROC'を通してサブクラス化するのにハンドルを持っていれば十分です。あなたがこのように間違って行くことを好むなら、それはあなたの選択です。 –

+0

必要に応じてクリックした場合、メインコントロールウィンドウに転送されたイベントが必要です。これを実現する唯一の方法は、レイヤードウィンドウを使用することでした。 サイジングイベントをキャプチャする場所を見つけました。ありがとうございました! –

関連する問題