17.9.3 电子相册浏览模块的设计与实现(6)
【代码解析】
第4~21行处理封面到右侧翻页的过程及封底到左侧翻页的过程,绘制页面1及页面2后,根据当前翻页的状态确定下步的翻页状态。如果当前状态为左翻页到封面,则第22~28行将只绘制封面并将当前状态改为封面。如果当前状态为右翻页到封底,第29~34行将只绘制封底并将当前状态改为封底。如果当前为一次性翻页,则结束本次翻页。
③ 绘制页面1及页面2
- 01 if(m_turnType == type_head) //只绘制封面
- 02 g.DrawImage(m_pPage[4],m_photoFrameLeft + m_pPage[0]->GetWidth(),
- 03 m_photoFrameTop,m_pPage[1]->GetWidth(),
- 04 m_pPage[1]->GetHeight());
- 05 else if(m_turnType == type_end) //只绘制封底
- 06 g.DrawImage(m_pPage[5],m_photoFrameLeft,m_photoFrameTop,
- 07 m_pPage[0]->GetWidth(),m_pPage[0]->GetHeight());else
- 08 {
- 09 if(m_turnType == type_rightToend)
- 10 g.DrawImage(m_pPage[0],m_photoFrameLeft,m_photoFrameTop
- 11 ,m_pPage[0]->GetWidth(),m_pPage[0]->GetHeight());
- //只绘制页面1
- 12 else
- 13 g.DrawImage(m_pPage[1],m_photoFrameLeft + m_pPage[0]->GetWidth(),
- 14 m_photoFrameTop,m_pPage[1]->GetWidth(), //只绘制页面2
- 15 m_pPage[1]->GetHeight());
- 16 }
【代码解析】
在翻页的过程中,当前状态为封面时,没有页面1,封面为页面2。所以第1~4行只需将封面绘制到页面2的位置即可。当前状态为封底时,没有封面2,封底为页面1,所以第5~7行将封底绘制到页面1的位置上。当前状态为右翻页到封底或左翻页到封面时,没有页面4,所以不能直接绘制页面2,原本被页面4覆盖的部分无法处理。当为右翻页到封底时,第9~11行只需绘制页面1。当为左翻页到封面时,第13~15行只需绘制页面2。
④ 封面翻页与右翻页到封底的页面2
在定义上来说封面翻页与右翻页到封底也是右侧翻页,只是封面翻页前左侧没有页面而右翻页到封底后右侧没有页面。封面翻页如图17.40所示。左侧翻页到封底如图17.41所示。
|
| 图17.40 封面翻页 |
|
| 图17.41 封底翻页 |