设为首页 加入收藏

TOP

17.9.1 相册管理模块的设计与实现(2)
2013-10-07 14:40:59 来源: 作者: 【 】 浏览:49
Tags:17.9.1 相册 管理 模块 设计 实现

17.9.1  相册管理模块的设计与实现(2)

相册数为1,当前活动相册的序号为0。默认对话框的名称为"主人相册",背景音乐路径为当前路径下"音乐\bk001.wav"。相册中的相片是当前路径下photo文件夹中的a.jpg~p.jpg。

(4)在对话框初始化函数中将载入默认相册中所有的相片,并初始化组合框。

  1. 01  BOOL CMyAlbumDlg::OnInitDialog()  
  2. 02  {  
  3. 03      CDialog::OnInitDialog();  
  4. 04      m_bmBack.DeleteObject();  
  5. 05      m_brBack.DeleteObject();  
  6. 06      m_bmBack.LoadBitmap(IDB_BK001);         //载入对户框背景图像  
  7. 07      m_brBack.CreatePatternBrush(&m_bmBack); //初始化对画框画刷  
  8. 08      wchar_t *wImage;  
  9. 09      int len;  
  10. 10      for(int i = 0; i < m_album[m_curAlbum].num_photo; i++)  
  11. 11      {   //载入当前相册中所有的相片  
  12. 12          len = MultiByteToWideChar(CP_ACP, 0,  
  13. 13                                  (LPCTSTR)m_album[m_curAlbum].str_  
  14.                                     photo[i],  
  15. 14                                  -1, NULL, 0);  
  16. 15          wImage = new wchar_t[len];  
  17. 16          MultiByteToWideChar(CP_ACP, 0,  
  18. 17                              (LPCTSTR)m_album[m_curAlbum].str_ photo[i],  
  19. 18                              -1, wImage, len);   
  20. 19          m_image[i] = Image::FromFile(wImage);  
  21. 20          delete []wImage;  
  22. 21      }  
  23. 22      //初始化组合框  
  24. 23      for(i = 0; i < m_numAlbum; i++)  
  25. 24      {   
  26. 25          m_comb.InsertString(i,m_album[i].name);  
  27. 26      }  
  28. 27      m_comb.SetCurSel(0);                //选中组合框中0号项目  
  29. 28      return TRUE;  
  30. 29  }  

【代码解析】

第4~7行载入对话框的背景图像。第8~21行载入当前活动相册中所有的相片。第23~26行初始化组合框,将当前相册名称插入组合框中。在这里用到了MultiByteToWideChar()函数,该函数映射一个字符串到一个宽字符(unicode)的字符串。由该函数映射的字符串没必要是多字节字符组,函数原型如下:

  1. int MultiByteToWideChar(  
  2.     UINT        CodePage,  
  3.     DWORD           dwFlags,  
  4.     LPCSTR      lpMultiByteStr,  
  5.     int             cchMultiByte,  
  6.     LPWSTR      lpWideCharStr,   
  7.     int             cchWideChar);  

该函数有6个参数说明如下。

CodePage:指定执行转换的代码页,这个参数可以为系统已安装或有效的任何代码页所给定的值。也可以指定其为表17.1中的任意一值。

表17.1  CodePage值

< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

   

   

CP_ACP

ANSI代码页

CP_THREAD_ACP

当前线程ANSI代码页

CP_MACCP

Macintosh代码页

CP_UTF7

使用UTF-7转换

CP_OEMCP

OEM代码页

CP_UTF8

使用UTF-8转换

CP_SYMBOL

符号代码页(42

 

 

dwFlags:一组位标记用以指出是否未转换成预作或宽字符(若组合形式存在),是否使用象形文字替代控制字符,以及如何处理无效字符。可以指定的标记常量组合含义如表17.2所示。

表17.2  dwFlags值

   

MB_PRECOMPOSED

通常使用预作字符,即由一个基本字符

和一个非空字符组成的字符只有一个

单一的字符值。这是默认的转换选择。

不能与MB_COMPOSITE值一起使用

MB_COMPOSITE

通常使用组合字符,即由一个基本字符

和一个非空字符组成的字符分别

有不同的字符值。不能与

MB_PRECOMPOSED值一起使用

MB_ERR_INVALID_
CHARS

如果函数遇到无效的输入字符,它将

运行失败,且

GetLastErro返回ERROR_NO_

UNICODE_TRANSLATION

MB_USEGLYPHCHARS

使用象形文字替代控制字符

lpMultiByteStr:指向将被转换字符串的字符。

cchMultiByte:指定由参数lpMultiByteStr指向的字符串中字节的个数。如果这个值为-1,字符串将被设定为以NULL为结束符的字符串,并且自动计算长度。

lpWideCharStr:指向接收被转换字符串的缓冲区。

cchWideChar:指定由参数lpWideCharStr指向的缓冲区的字节个数。若此值为0,函数返回缓冲区所必需的宽字符数,在这种情况下,lpWideCharStr中的缓冲区不被使用。

说明:将MultiByteToWideChar()的第4个形参设为-1,即可返回所需的短字符数组空间的个数。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇17.9.1 相册管理模块的设计与实现.. 下一篇17.9.1 相册管理模块的设计与实现..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: