关于Windows的window

时间:2024-04-03 07:24:09

关于 Windows 的 Window

文章来自公众号【狗子的圈】

当你成功进入 Windows 桌面,你所能看到的一切都可以被称之为 Window。许许多多的 Window 组合在了一起,于是便有了 Windows。

桌面是 Window

当你进入了 Window 系统后,就可以看到桌面 Window 啦。桌面 Window 是系统定义的 Window,这个 Window 可以容纳其他应用程序创建的 Window。

桌面 Window 的背景图是格式为 bmp 的文件。应该保证此 bmp 文件存放在一个安全的位置,如果被删除,那么桌面 Window 的背景将会一片漆黑。这是因为 Windows 系统将记录此 bmp 文件的位置于注册表中,每次渲染桌面 Window 的背景时(例如重启),都要从此注册表项中读取 bmp 文件的位置。如果找不到,自然桌面 Window 就是一片漆黑了。

可以通过 GetDesktopWindow 的 win32 方法取得桌面 Window 的句柄,以便执行需要的操作。

如果想要修改桌面背景,可以通过 SystemParametersInfo 的 win32 方法。

窗体是 Window

Windows 窗体结构如下图所示:

关于Windows的window

用过 Windows 的都能看明白各个组件是干什么的,不解释了。

另外,弹出的开始菜单也是 Window;就连 Windows 的任务栏也是若干 Window 的组合。

总之,你所看到的所有都是 window。

Window 的属性

每个 Window 都有如下属性

  • 类名
  • 窗口名
  • 窗口样式
  • 扩展的窗口样式
  • 位置
  • 尺寸
  • 父窗体或子窗体的句柄
  • 菜单的句柄或子窗体的标识
  • 实例的句柄
  • 创建信息
  • 窗口句柄

系统中有 5 种 Window。

  • * Window
  • 弹出式 window
  • 子 window
  • 分层的 Window
  • 仅处理消息的 window

系统可以直接给子 window 发送消息,但不能通过其父窗口发送。在 C# 中,如果要进行窗体间的操作,往往需要通过 P-Invoke 特性来实现。

仅处理消息的 Window 仅可以收发消息。它是不可见的,没有 z 轴方向的层次,不能被枚举出来,也不能接收广播消息。

窗口的创建过程

每个基于窗口的应用都有一个入口点(入口函数)。入口函数做 2 件事

  • 注册窗口,调用 RegisterClass 方法
  • 创建窗口,调用 CreateWindowEx 方法

创建完成后,创建好的窗口并不会自己显示出来。因此还需要调用显示的方法(ShowWindow)进行显示。

如果你有 Winform 或 Win32 开发经验,这个过程就不难理解。

窗口的销毁过程

销毁窗口时只需要调用 DestroyWindow 方法即可。

当一个窗口被销毁后,窗口将消失,并回收与之相关的资源。

如果一个窗口有关闭按钮。当点击了之后,窗体可接收到一个名为 WM_CLOSE 的 windows 消息。可以选择在接收到此消息时加入确认关闭的操作。而后根据情况来决定是否调用 DestroyWindow 方法。

`参考内容:https://docs.microsoft.com/zh-cn/windows/win32/winmsg/windows