17.9.1 相册管理模块的设计与实现(4)
【代码解析】
在这个函数中用到了GDI与GDI+配合的双缓冲绘图技术,相关知识可参考前几节的知识点。第4、5行创建了一个内存设备。第7~10行根据当前客户区大小创建一个位图。第13~17行将新创建的位图载入内存设备并绘制内存设备的背景图像。第19~22行绘制当前活动相册中的所有相片。第23行将内存设备复制到屏幕上。
(7)添加"新建相册"按钮的处理函数,当用户单击这个按钮时,可进入新建相册模块。
- 01 void CMyAlbumDlg::OnNew()
- 02 {
- 03 CMyNewAlbumDlg dlg; //新建相册模块
- 04 if(dlg.DoModal() == IDOK)
- 05 { //相册名不能为空,相片数要大于4
- 06 if(dlg.m_name == ""|| dlg.m_totleNum < 4 )
- 07 {
- 08 MessageBox("要填写相册名称,相册的相片数不得少于4!
- 09 \r\n请重新设置!");
- 10 OnNew();
- 11 }
- 12 m_numAlbum++; //相册数加1
- 13 //保存相册信息
- 14 m_album[m_numAlbum -1].name = dlg.m_name; //相册名称
- 15 m_album[m_numAlbum -1].str_music = dlg.m_music;//相册背景音乐
- 16 m_album[m_numAlbum -1].num_photo = dlg.m_totleNum;//相片数量
- 17 for(int i = 0; i < m_album[m_numAlbum- 1 ].num_photo; i++)
- 18 { //相片路径
- 19 m_album[m_numAlbum -1 ].str_photo[i] = dlg.m_path[i];
- 20 }
- 21 //将新建相册插入组合框
- 22 m_comb.InsertString(m_numAlbum - 1,m_album[m_numAlbum - 1].name);
- 23 UpdateData(false);
- 24 }
- 25 }
【代码解析】
弹出新建相册模块后,获取用户输入的信息。相册名称不能为空,相片数量要多于4张。当用户输入的信息符合要求时,保存新建相册的信息。并将新建相册的名称插入组合框,便于以后的管理。
(8)为"进入相册"按钮添加处理函数。当用户单击这个按钮时,弹出相册浏览模块。浏览当前活动的相册。
- void CMyAlbumDlg::OnAlbum()
- {
- CMyBookDlg dlg; //相册浏览模块
- for(int i = 0; i <= m_album[m_curAlbum].num_photo; i++)
- { //传递当前活动相册中所有相片的路径信息
- dlg.m_strImage[i] = m_album[m_curAlbum].str_photo[i];
- }
- dlg.m_photoNum = m_album[m_curAlbum].num_photo - 1;//相册中相片的数量
- dlg.m_strMusic = m_album[m_curAlbum].str_music; //相册背景音乐路径
- dlg.SetPage(); //设置相片
- dlg.DoModal(); //弹出相册浏览模块
- }