17.9.1 相册管理模块的设计与实现(3)
(5)利用向导为组合框添加CBN_ SELCHANGE消息的处理函数OnSelChange Comb1(),如图17.30所示。
|
| 图17.30 利用向导添加组合框的处理函数 |
当用户切换相册时,会触发这个函数。
- 01 void CMyAlbumDlg::OnSelchangeCombo1()
- 02 {
- 03 m_curAlbum = m_comb.GetCurSel(); //获取用户选择的相册序号
- 04 wchar_t *wImage;
- 05 int len;
- 06 for(int i = 0; i < m_album[m_curAlbum].num_photo; i++)
- 07 { //载入用户指定相册中所有的相片
- 08 len = MultiByteToWideChar(CP_ACP, 0,
- 09 (LPCTSTR)m_album[m_curAlbum].str_
- photo [i],
- 10 -1, NULL, 0);
- 11 wImage = new wchar_t[len]; //相片名称数组
- 12 MultiByteToWideChar(CP_ACP, 0,
- 13 (LPCTSTR)m_album[m_curAlbum].
- str_photo[i],
- 14 -1, wImage, len);
- 15 m_image[i] = Image::FromFile(wImage);
- 16 delete []wImage;
- 17 }
- 18 Invalidate(); //重绘
- 19 }
在这个函数中首先获取用户选中的相册编号,然后载入用户指定相册中的所有相片,最后重绘界面。
(6)重载对话框的OnPaint()函数,在该函数中实现预览当前活动相册中所有相片的功能。
- 01 void CMyAlbumDlg::OnPaint()
- 02 {
- 03 CPaintDC dc(this);
- 04 CDC dcMemory; //创建内存设备
- 05 dcMemory.CreateCompatibleDC(NULL);
- 06 //获取客户区大小
- 07 CRect bkRect;
- 08 GetClientRect(&bkRect);
- 09 CBitmap bitmap;
- 10 bitmap.CreateCompatibleBitmap(&dc, bkRect.Width(), bkRect.
- Height());
- 11 COLORREF color = GetSysColor(COLOR_3DFACE);
- 12 //将位图载入内存设备
- 13 SelectObject(dcMemory.GetSafeHdc(), bitmap) ;
- 14 dcMemory.FillSolidRect(bkRect,color); //设置内存设备背景色
- 15 Graphics g(dcMemory.m_hDC);
- 16 Image bk_image(L"背景\\bg001.jpg"); //载入背景图像
- 17 g.DrawImage(&bk_image,bkRect.left,bkRect.top,bkRect.Width(),
- bkRect.Height());
- 18 //绘制相册中的相片
- 19 for(int i = 0; i < m_album[m_curAlbum].num_photo; i++)
- 20 {
- 21 g.DrawImage(m_image[i],205 + ((i%6)*120),55 + (i / 6)*120,
- 100,100);
- 22 }
- 23 dc.BitBlt(0,0,bkRect.Width(),bkRect.Height(),&dcMemory,0,0,
- SRCCOPY);
- 24 CDialog::OnPaint();
- 25 }