窗口系统


故事

在这个练习中,你将模拟一个基于窗口的计算机系统。你要创建一些窗口,它们可以移动、调整大小,并显示自身的内容。下图展示了你在下文将要使用的各个值。

                  <--------------------- screenSize.width --------------------->

       ^          ╔════════════════════════════════════════════════════════════╗
       |          ║                                                            ║
       |          ║          position.x,_                                      ║
       |          ║          position.y  \                                     ║
       |          ║                       \<----- size.width ----->            ║
       |          ║                 ^      *──────────────────────┐            ║
       |          ║                 |      │        title         │            ║
       |          ║                 |      ├──────────────────────┤            ║
screenSize.height ║                 |      │                      │            ║
       |          ║            size.height │                      │            ║
       |          ║                 |      │       contents       │            ║
       |          ║                 |      │                      │            ║
       |          ║                 |      │                      │            ║
       |          ║                 v      └──────────────────────┘            ║
       |          ║                                                            ║
       |          ║                                                            ║
       v          ╚════════════════════════════════════════════════════════════╝

任务

以下是一些示例任务,与为操作系统实现简化窗口系统的故事相符:

  • 定义一个 Size 结构体
  • 定义一个 Position 结构体
  • 定义一个 Window 类
  • 添加一个调整窗口大小的方法
  • 添加一个移动窗口的方法
  • 添加更新窗口文本和显示窗口信息的方法
  • 创建一个新的 Window

术语

以下是关于说明(包括存根注释)中反复出现的术语的建议,而非规则:

  • screenSize 指整个显示区域的尺寸。
  • size 指显示区域上窗口的尺寸。
  • position 指每个窗口的左上角相对于显示区域左上角的位置。

实现

参考