17.9.3 电子相册浏览模块的设计与实现(8)
【代码解析】
第5~40行绘制封面翻页时的页面2。第41~79行绘制右翻页到封底时的页面2。第81~101行求算封面翻页及右翻页到封底时旋转页面的路径(封面翻页时为页面1,右翻页到封底时为封底页面)。右翻页到封底翻页时,第105~117行根据上面求出的路径绘制封底页面,并将其选装到相应的位置。封底翻页及左翻页到封面的实现与本过程类似,不再详述。
(9)细心的读者可能发现了一个问题,那就是无论是右翻页还是两边翻页过程,在翻页完成后都做了同一件事情:
- PostMessage(WM_MY_TURN,0,0);
这是一个消息发送函数,给本窗体发送了一个自定义消息WM_MY_TURN。这个消息的定义如下:- #define WM_MY_TURN (WM_USER + 100)
它的消息映射如下:- ON_MESSAGE(WM_MY_TURN, OnChangePage)
也就是说,WM_MY_TURN消息的处理函数为OnChangePage()。而每次翻页完成后发送消息调用的就是这个函数,它主要实现了换页的功能。
下面分步讲解这个函数。
① 翻页状态的转换
每次翻页完成后需要检验当前的状态已决定下一步的状态。
- 01 switch(m_turnType)
- 02 {
- 03 case type_endToleft : //封底到左翻页
- 04 m_turnType = type_left;
- 05 m_curNum = m_photoNum + 2;
- 06 break;
- 07 case type_headToright: //封面到右翻页
- 08 m_turnType = type_right;
- 09 m_curNum = -2;
- 10 break;
- 11 case type_leftToright: //左翻页到右翻页
- 12 m_curNum -= 3;
- 13 m_turnType = type_right;
- 14 break;
- 15 case type_rightToleft: //右翻页到左翻页
- 16 m_curNum += 3;
- 17 m_turnType = type_left;
- 18 }
② 右翻页时计算载入后两张照片
右翻页与封面翻页处理方法相同,都是载入后面的两张相片。参与翻动的共4页载有4张照片,而每次变化的只有两张。将新载入的放入页面3及页面4,将页面3中的相片传给页面1,页面4上的相片传给页面2。过程如图17.42所示。
|
| (点击查看大图)图17.42 右翻页相册载入相片的过程 |