17.9.2 新建相册模块的设计与实现(2)
【代码解析】
在这个函数中将列表框的属性修改为选中高亮、网格的风格。然后插入"编号"及"路径"两个新列。
(4)为选择相册背景音乐路径的按钮添加处理函数。当单击这个按钮时,弹出打开文件对话框。
- 01 void CMyNewAlbumDlg::OnPathmusic()
- 02 {
- 03 CString fileter = "WAV Files (*.wav)|*.wav"; //文件过滤器字符串
- 04 CFileDialog dlg(true,NULL,NULL,
- 05 OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
- 06 fileter,this); //打开文件对话框
- 07 char buf[256];
- 08 ::GetCurrentDirectory(256,(char *)buf); //获取当前路径
- 09 //显示打开文件对话框
- 10 if(dlg.DoModal() == IDOK)
- 11 {
- 12 m_music = dlg.GetPathName(); //获取用户指定的路径
- 13 UpdateData(false); //将路径显示到界面上
- 14 }
- 15 ::SetCurrentDirectory(buf); //恢复当前路径
- 16 }
【代码解析】
打开文件对话框将根据文件过滤器只能打开wav格式的声音文件。在本实例中暂时只支持这种格式的声音文件。然后获取当前的路径,便于操作后恢复。获取用户指定的背景音乐文件路径后,将其显示到界面上。
(5)为选择新相片的按钮添加处理函数。当单击这个按钮时,将弹出选择相片的打开文件对话框。
- 01 void CMyNewAlbumDlg::OnPathphoto()
- 02 {
- 03 CString fileter = "JPG Files(*.jpg;*.jpeg)|*.jpg;*.jpeg|BITMAP
- 04 Files (*.bmp)|*.bmp|(*.*)|*.*||"; //文件过滤器
- 05 CFileDialog dlg(true,NULL,NULL,
- 06 OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,fileter);
- 07 char buf[256];
- 08 ::GetCurrentDirectory(256,(char *)buf); //获取当前路径
- 09 //显示打开文件对话框
- 10 if(dlg.DoModal() == IDOK)
- 11 {
- 12 m_photo = dlg.GetPathName(); //获取用户选择的相片路径
- 13 UpdateData(false); //显示相片的路径
- 14 //读取用户选择的图片路径
- 15 CString str;
- 16 str.Format("%d",m_totleNum + 1);
- 17 m_list.InsertItem(m_totleNum,str); //将相片路径插入列表控件
- 18 m_list.SetItemText(m_totleNum,1,m_photo);
- 19 m_path[m_totleNum] = m_photo; //保存相片路径
- 20 //刷新列表控件
- 21 UpdateData(false);
- 22 wchar_t *wImage;
- 23 int len;
- 24 //载入相片资源
- 25 len = MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)m_photo, -1, NULL, 0);
- 26 wImage = new wchar_t[len];
- 27 MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)m_photo, -1, wImage, len);
- 28 m_image[m_totleNum] = Image::FromFile(wImage);
- 29 delete []wImage;
- 30 m_totleNum++; //相片数加1
- 31 Invalidate(); //重绘
- 32 }
- 33 ::SetCurrentDirectory(buf); //恢复当前路径
- 34 }