ほとんどのウィンドウシステムでは、子フレームを親フレームのネイティブエッジ(フレームジオメトリを参照)でクリップします。通常、これらのエッジの外側にあるものはすべて表示されません。子フレームのleftおよびtopパラメータは、親フレームのネイティブフレームの左上隅を基準とした位置を指定します。親フレームのサイズが変更されても、この位置は概念的に変わりません。
NSのビルドおよびテキストターミナルは、子フレームを親フレームの端で切り取らないため、親フレームを遮らずに、かつ自身も視認できる位置に配置することが可能です。
また、既存のウィンドウの最大の空き領域に子フレームを内接させるために使用できる関数 window-largest-empty-rectangle(座標とウィンドウを参照)についても留意してください。これは、子フレームがそのウィンドウに表示されているテキストを遮るのを防ぐのに役立ちます。
通常、親フレームを移動させると、すべての子フレームおよびその子孫フレームも同様に移動し、相対的な位置関係は維持されます。なお、フック move-frame-functions(フレーム位置を参照)は、子フレームの親フレームに対する相対位置が変化した場合にのみ、その子フレームに対して実行されます。
親フレームのサイズが変更されると、子フレームは概念的に以前のサイズと、親フレームの左上隅に対する相対位置を保持します。つまり、親フレームが縮小すると、子フレームが(部分的に)見えなくなる場合があります。パラメータ
keep-ratio(フレーム相互作用パラメータを参照)を使用すると、親フレームのサイズ変更に合わせて、子フレームを比例的にサイズ変更および再配置できます。これにより、親フレームを縮小した際にフレームの一部が隠れるのを防ぐことができます。
可視状態の子フレームは常に親フレームの上に表示されるため、その一部が隠れます。ただし、NSビルドでは親フレームの下に配置される場合があります。これは、トップレベルフレームのウィンドウシステム上のウィンドウが、常に親ウィンドウ(デスクトップのルートウィンドウ)の上に表示されるのと同様です。親フレームがアイコン化または非表示にされた場合(フレームの可視性を参照)、そこから派生する子フレームは、たとえframe-visible-pがそれらに対してtを返したとしても、同様に表示されません。親フレームがアイコン解除または表示状態に戻された場合、そこから派生する子フレームは再び表示されます(ただし、子フレームおよびそのすべての祖先フレームも可視である必要があります)。子フレームが代理ミニバッファフレームとして使用される場合(ミニバッファとフレームを参照)、ミニバッファがアクティブになるたびにフレームの可視性を保証するのはアプリケーションの責任となります。
子フレームにメニューやツールバーを表示できるかどうかは、ウィンドウシステムやウィンドウマネージャに依存します。ほとんどのウィンドウシステムでは、子フレームへのメニューバーの表示を明示的に禁止しています。フレームの初期パラメータ設定により、メニューとツールバーの両方を無効にすることが推奨されます。テキストターミナルでは、子フレームはルートフレームのメニューバー(存在する場合)を使用します。
通常、子フレームにはタイトルバーや外側の枠線といったウィンドウマネージャによる装飾は表示されません(フレームのジオメトリを参照)。子フレームにメニューやツールバーが表示されない場合は、外側の枠線の代わりに、フレームの他の任意の枠線(レイアウトパラメータを参照)を使用できます。
特に、X環境下(ただしGTK+でビルドする場合を除く)では、フレームの外枠を使用できます。MS-Windowsでは、外枠の幅に0以外の値を指定すると、1ピクセル幅の外枠が表示されます。すべてのウィンドウシステムにおいて、内枠を使用できます。いずれの場合も、undecoratedフレームパラメータを使用して、子フレームのウィンドウマネージャによる装飾を無効にすることが推奨されます(ウィンドウ管理パラメータを参照)。一方、テキストターミナルでは、そのパラメータをそのままにしておいた方が、子フレームに外枠付きで描画されます。
枠線のない子フレームをマウスでリサイズまたは移動するには、特別なフレームパラメータ(マウスドラッグパラメータを参照)を使用する必要があります。子フレームに内部枠線がある場合は、そのフレームにnil drag-internal-border以外のパラメータが設定されていれば、マウスでフレームをリサイズできます。snap-widthパラメータが設定されている場合、親フレームの対応する辺または角でフレームがスナップするピクセル数を示します。テキスト端末では、外側の枠線をリサイズに使用できます。
マウスで子フレーム全体をドラッグする方法は3通りあります。drag-with-mode-lineパラメータがnil以外の場合、ミニバッファウィンドウ(ミニバッファウィンドウを参照)なしで、最下段ウィンドウのモードライン領域を介してフレームをドラッグできます。drag-with-header-lineおよびdrag-with-tab-lineパラメータがnil以外の場合、最上段ウィンドウのヘッダーまたはタブライン領域を介してフレームをドラッグできます(タブラインによるドラッグは、タブラインの上にヘッダーラインがない場合にのみ可能です)。
子フレームにドラッグ可能なヘッダーやモードラインを設けるには、ウィンドウパラメータ mode-line-format と header-line-format が便利です(ウィンドウパラメータ
を参照)。これらを使用することで、不要なモードラインを削除したり(drag-with-header-line
を選択した場合)、フレームのドラッグを妨げる可能性のあるマウス感度領域を削除したりできます。
ユーザーがマウスでフレームをドラッグして通り過ぎた場合、親フレームの表示領域外にフレームをドラッグしてしまいやすくなります。一度マウスボタンを離すと、そのようなフレームを回収するのは困難な場合があります。こうした状況を防ぐため、フレームの
top-visible または bottom-visible パラメータを設定することをお勧めします(マウスドラッグパラメータを参照)。
子フレームのヘッダーやタブラインによるドラッグを許可する場合は、top-visible
パラメータに数値を指定してください。top-visible
に数値を指定すると、子フレームの上端を親フレームの上端より上にドラッグすることができなくなります。モードラインを介してそのフレームをドラッグする場合は、bottom-visible
パラメータに数値を指定してください。これにより、子フレームの下端を親フレームの下端より下にドラッグすることができなくなります。いずれの場合も、その数値はドラッグ中に表示され続ける子フレーム領域の幅と高さ(ピクセル単位)も指定します。
display-buffer-in-child-frame
を介してバッファを表示するために子フレームを使用する場合(バッファ表示用のアクション関数を参照)、バッファを表示するウィンドウを閉じる際にフレームを適切に処理できるよう、フレームの
auto-hide-function パラメータ(フレーム相互作用パラメータを参照)を関数に設定できます。
ミニバッファ操作中に子フレームを使用する場合(例えば、補完内容を別ウィンドウに表示する場合など)、ミニバッファを終了する際にそのフレームを処理するために、minibuffer-exit パラメータ(フレーム操作パラメータを参照)が有用です。