P4783.第3题-实现一个窗口系统
题目内容
实现一个简单的窗口系统。首先初始化一个给定宽高的屏幕,并建立图像坐标系,以屏幕左上角 (0, 0) 为坐标原点。
窗口系统可以容纳窗口,窗口有以下属性:
支持的操作
窗口系统支持以下操作:
- 创建窗口
- 移除窗口
- resize(调整窗口大小)
- move(移动窗口)
- 给定一个区域查询所有的可见窗口
- 查询单个窗口的可见性
窗口遮挡与可见性规则
- 层级大的窗口可以遮盖层级小的窗口
- 层级相同的窗口中,后创建的窗口可以覆盖先创建的窗口;窗口的
resize 和 move 操作不影响窗口创建的先后顺序
- 窗口只要没有被完全覆盖,就算做可见
- 窗口可以在屏幕外创建,或者被
move/resize 到屏幕外,完全处于屏幕外的窗口不可见
需要实现的方法
init 方法
- 给定屏幕宽高,初始化屏幕
- 校验屏幕宽高是否均为正整数,满足返回
true;反之,返回 false
createWindow 方法
- 给定窗口名、窗口左上角坐标、窗口宽高、窗口层级,创建窗口
- 校验窗口宽高是否均为正整数,窗口名是否未被使用过,若满足则执行操作并返回
true,反之,返回 false
removeWindow 方法
- 给定窗口名移除一个指定的窗口
- 如果移除成功,返回
true;如果窗口未创建无法执行移除操作,返回 false
resize 方法
- 给定一个窗口名和新的宽高,修改指定窗口的宽高
- 校验窗口是否已经创建以及新的窗口宽高是否为正整数,满足则执行操作并返回
true,否则返回 false
move 方法
- 给定一个窗口名和一个新的左上角坐标,修改指定窗口的位置
- 校验窗口是否已经创建,满足则执行操作并返回
true,否则返回 false
queryVisibility 方法
- 给定一个窗口名,查询指定窗口的可见性,可见返回
true
- 窗口未创建或者窗口不可见返回
false
queryAllVisibleWindows 方法
- 给定一个在屏幕范围内的矩形区域(左上角坐标和宽高),查询该区域内所有的可见窗口
- 按照窗口层级的降序排序,窗口层级相同的则以窗口名的字典序升序排序
- 返回排序后的可见窗口名以
;分割;若无可见窗口则返回NoVisibleWindow
输入描述
一系列窗口操作,整体操作数不超过 100 个,第一个操作均为init方法,用于初始化屏幕。如果屏幕没有创建成功,不会有后续操作。
输出描述
对应操作的返回值
样例1
输入
init 200 300
createWindow window1 10 10 100 100 1
createWindow window2 20 20 40 30 2
createWindow window3 30 70 90 50 3
removeWindow window2
removeWindow window4
queryVisibility window1
queryAllVisibleWindows 10 10 100 100
输出
true
true
true
true
true
false
true
window3;window1
说明
输入为一系列窗口系统的操作及对应参数,输出为每个操作的返回值。
样例2
输入
init 100 100
createWindow win1 0 0 50 50 1
createWindow win2 0 0 50 50 2
createWindow win3 0 0 50 50 3
queryVisibility win1
queryVisibility win2
queryVisibility win3
输出
true
true
true
false
false
true
说明
输入为一系列窗口系统的操作及对应参数,输出为每个操作的返回值。