在Windows中使窗口无法调整大小

时间:2011-08-21 00:44:53

标签: python winapi windows-7 tkinter pywin32

我一直在使用Windows API调用,这样我就可以使用Tkinter获得一些本机Windows窗口样式。当我试图阻止窗口可调整大小时,我遇到了问题。在映射窗口之前使用root.resizable(False, False)会产生与root.overrideredirect(True)方法不同的效果;在风格改变后调用它会导致各种各样的疯狂(窗口吓坏了)。我认为可能有一个特定于Windows root.resizable(False, False)的窗口。我怎么能这样工作?请记住,我有一个Tkinter窗口的句柄。

代码:

import Tkinter as tk
import string, win32ui, win32con

def decaption(event):
    root = event.widget

    # makes a handle to the window
    handle = string.atoi(root.wm_frame(), 0)

    # changes the style
    frame = win32ui.CreateWindowFromHandle(handle)
    frame.ModifyStyle(win32con.WS_CAPTION, 0, win32con.SWP_FRAMECHANGED)

    root.bind("<Map>", None)

root = tk.Tk()

# changes the style when the window is mapped
root.bind("<Map>", decaption)

root.mainloop()

2 个答案:

答案 0 :(得分:3)

以下是一些想法:

  • 您可以尝试删除WS_THICKFRAME样式:

    frame.ModifyStyle(win32con.WS_THICKFRAME, 0)
    
  • 另一种方法是处理WM_GETMINMAXINFO消息,该消息返回窗口的最小和最大宽度和高度。在您的情况下,您将返回当前的宽度和高度。您可以使用GetWindowRect获取此信息。

答案 1 :(得分:2)

我不知道python角度,但另一种防止窗口可调整大小的方法(除了改变它的样式)是处理WM_WINDOWPOSCHANGING并用你想要的大小覆盖新的大小。