0

Windows XPのグリッド化されたトップレベルウィンドウは、ユーザーが数値の倍数でサイズ変更することを制限していないようです。Xでは動作しますが、Windowsでは動作しません。任意のピクセルサイズにサイズ変更できます。

Windowsウィンドウマネージャーはそれをサポートしていませんか?おそらくいくつかのコマンドをトップレベルのサイズ変更イベントにバインドすることによって、手動でそれを行うことはできますか?

4

1 に答える 1

3

これはWindowsでは実際には機能しないというのは正しいです(これはMac OS X / Aquaにも当てはまります)。これは、ウィンドウマネージャー自体がこの機能をサポートしていないためです。いくつかのスクリプトで合成する必要があります。ただし、実際の複雑さは、一般的なグリッドウィンドウが1つのグリッドウィンドウだけではないことです。周囲に余分なスペースがあり、更新されたサイズを次のグリッドサイズに拡大し、ウィンドウを少し拡大してサイズを変更することができます…何度も何度も…</ p>

したがって、2段階の初期化が必要です。最初に、許容する必要のある余分なスペースの実際のサイズを測定してから、強制コードを適用します。

package require Tk

proc initGrid {window w h} {
    # Do nothing for subwindows
    if {$window ne [winfo toplevel $window]} return

    lassign [wm grid $window] xcount ycount xstep ystep
    set wExtra [expr {$w - $xcount*$xstep}]
    set hExtra [expr {$h - $ycount*$ystep}]
    bind $window <Configure> [list resizeGrid $wExtra $hExtra %W %w %h]
}
proc resizeGrid {wExtra hExtra window w h} {
    # Do nothing for subwindows
    if {$window ne [winfo toplevel $window]} return

    lassign [wm grid $window] xcount ycount xstep ystep
    if {$w-$wExtra != $xcount*$xstep || $h-$hExtra != $ycount*$ystep} {
        set w [expr {($w - $wExtra)/$xstep}]
        set h [expr {($h - $hExtra)/$ystep}]
        wm grid $window $w $h $xstep $ystep
    }
}

pack [text .t -setgrid 1] -fill both -expand 1
bind . <Configure> {initGrid %W %w %h}

ご覧のとおり、これを正しく行うのは特に簡単ではありません。

于 2012-11-10T08:13:23.277 に答える