Win32 プログラミングでは、ウィンドウの親とウィンドウの所有者の違いは何ですか? 私はそれを理解したと思ったので、次のコードに出くわしました:
SetWindowLong(handle, GWL_HWNDPARENT, foo);
GWL_HWNDPARENT が使用されているにもかかわらず、これは実際には親ではなくウィンドウの所有者を設定します。親/所有者という用語は交換可能ですか、それとも実際に違いはありますか?
所有権は 2 つのトップ レベル ウィンドウ間の関係であり、親はトップ レベルと WS_CHILD、または WS_CHILD と別の WS_CHILD の間の関係です。
ボタンの親はボタンがあるフォームですが、メッセージ ボックスはそれを表示したフォームが所有します。
Microsoft Win32 Window Hierarchy and Stylesのこの記事を読んで、Ownership、Parenting、ZOrder、SetWindowLong、GetWindow、およびウィンドウ リレーションシップを作成するための Win32 API のその他すべての厄介な部分をより明確に理解してください。
編集: Microsoft がそのコンテンツを削除したようです。これは、 Ownership / Parenting の別の合理的な要約です。
Chen のブログ投稿は、読むべきものです。私にとって重要な点は、WS_CHILD スタイルを子ウィンドウで使用する必要があるということです。子ウィンドウを作成して親ハンドルを CreateWindow( ) に渡すことはできますが、WS_CHILD スタイルを設定していない場合、2 つのウィンドウは親子関係ではなく所有者関係になります。