前后视图的实现:
初始化:开辟两个栈,底下放两个哨兵。
过程:每次变换视图,将视图压到栈1。进行一次后退视图操作,就将栈1顶弹出,弹出的视图压到栈2;进行一次前进视图操作,就把栈2顶弹出,弹出的视图压到栈1。
此方法同样适用于浏览器、资源管理器的前进后退操作。本质上是利用了栈的LIFO的特性。
code:
stack<CMoRectangle> stkPre, stkAft; // 两个栈,用来控制前进和后退视图
// 前进响应
if (stkPre.size() > 1){
stkAft.push(stkPre.top());
stkPre.pop();
m_map.SetExtent(stkPre.top());
}
// 后退响应
if (stkAft.size() > 0){
stkPre.push(stkAft.top());
m_map.SetExtent(stkAft.top());
stkAft.pop();
}
运行结果(以后退为例,因为图实在太大了)
后退
原文在我的 Google drive 上: https://docs.google.com/document/d/1e4_yCMvemjD6qkoaKAE2FUjxgPo5MuuRAn9cVK4f6oQ/edit?usp=sharing