You are here

윈도우 always on top 구현

admin의 아바타

리눅스의 경우 아래와 같이 합니다.

# -----------------------------------------
# always on top for linux
# -----------------------------------------
proc ontop {W boolean} {
    set bindtags [bindtags $W]
    set index [lsearch $bindtags bind$W]
    if { $boolean } {
        if { $index == -1 } {
            bindtags $W [linsert $bindtags 0 bind$W]
            bind bind$W <Visibility> [list ontop:state %W %s]
        }
    } else {
        if { $index != -1 } {
            bindtags $W [lreplace $bindtags $index $index]
            bind bind$W <Visibility> {}
        }
    }
}

proc ontop:state {W state} {
    #puts "ontop \[$W\] \[$state\]"

    if { ![string equal [winfo toplevel $W] $W] } {
        #puts "  window \[$W\] is not a toplevel"

        return
    }
    if { ![string equal $state VisibilityUnobscured] } { raise $W }
}

# usage: ontop .win 1

윈도우즈의 경우 아래아 같이 합니다.

 wm attrib .win -topmost 1

두 코드를 동시 지원은 다음과 같이 합니다.

    if { $::tcl_platform(platform) == "windows" } {
        wm attrib .win -topmost 1
    } else {
        ontop .win 1
    }

두 플랫폼에서 테스트 되었습니다.

포럼: