WalkLtDemoHelp.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. //Download by http://www.NewXing.com
  2. //WalkLtDemoHelp.h
  3. #ifndef _WalkLtDemoHelp_h__
  4. #define _WalkLtDemoHelp_h__
  5. /* ***************************************************************************************
  6. GDI+程序设计实例源代码(非UNICODE,VC++版)
  7. version: 1.0.0 2007-9-16
  8. author: Louyu.
  9. email: louyu@zju.edu.cn
  10. web site: http://www.walkgis.com
  11. 在网络上广泛流传的“GDI+程序设计实例源代码”中使用的是C#语言,且封装了开源对象,
  12. 其源代码主要在 “Form1.cs” 中,其功能的实现形式与.Net的MSDN帮助不同。
  13. 作者对该源代码进行了移植,在VC的非 UNICODE 环境下进行了修改,主要处理:
  14. 1、提供了一个 multibyte 与 widechar 的转化类 CWideCharString
  15. 实现 char* 与 WCHAR* 的转换有许多方法,如:
  16. a) CWideCharString(char*) 得到 WCHAR*
  17. b) L"char* string" 得到 WCHAR*
  18. c) 在非UNICODE环境下,CString(WCHAR*) 得到 char*
  19. 2、将原C#中的Math、Shell等对象转换为普通的VC函数,如定义了 rand_Next 等
  20. 3、将原C#代码中的new改为VC的引用或指针
  21. 避免了在VC中对new的重载和delete的繁杂调用所带来的内存泄漏
  22. 4、定义了一组MyDrawString函数,替换原代码中的 graphics.DrawString(...)
  23. 保持了原C#代码中DrawString的参数顺序和引用方式
  24. 增加了两个 _MakeA_RGB 函数
  25. 5、因为 Image::Save 要求保存的文件不得存在,而在演示中可能会反复执行Save,所以
  26. 提供了 MyImageSave 函数,先判断文件是否存在,若存在则删除,然后 Save.
  27. 6、为尽可能保持原代码的风格,在 CWalkLtDemo.cpp 的 OnDraw(...) 函数中提供一个
  28. void DoGdiplusDemo(...) 函数,
  29. 该函数负责向各功能演示函数中传递所需要的绘图区和Graphics实例。
  30. 7、在主菜单“查看”项下增加了“GDI+功能演示”和“当前演示的源代码”菜单,
  31. 并在工具条上增加了相应按钮。
  32. 8、程序已在VC6和VC++.NET中进行了完全的测试。
  33. 注:本例的目录结构为:
  34. ../WalkLt 主目录
  35. ReadMe.txt 本文件
  36. ../WalkLt/Bin 执行程序目录
  37. ../WalkLt/Bin/gidplus_demo_data 演示数据
  38. ../WalkLt/Include Gdiplus*.h头文件目录
  39. ../WalkLt/Lib Gdiplus.lib函数库目录
  40. ../WalkLt/WalkLtDemo vc源代码目录
  41. WalkLtDemo.dsw vc6 环境(Workspace)
  42. WalkLtDemo.sln vc++.net 环境
  43. ../WalkLt/WalkLtDemo/res 样例资源目录
  44. 说明:本例中使用的 gdiplus*.h 中对 Color 和 Point 进行了重新声明,分别为:
  45. GdiPlusColor 和 PointI
  46. 为与MSDN中的 Color 和 Point 相一致,在WalkLtDemoHelp.h中使用了 typedef:
  47. typedef GdiPlusColor Color;
  48. typedef PointI Point;
  49. 按本例目录结构,作者在CWalkLtDemoApp::InitInstance()中增加了图像样例文件所在目录
  50. 的设置:SetCurrentDirectory(),若改变了本例目录结构,使用者可自行修改该函数。
  51. *************************************************************************************** */
  52. typedef GdiPlusColor Color;
  53. typedef PointI Point;
  54. #ifndef PI
  55. #define PI 3.1415926535897932
  56. #endif
  57. //
  58. // 注:若要将 widechar 转化为 multibyte, 只要执行:CString(widechar string);
  59. //
  60. // **** 为了实现 multibyte to widechar 的转化而封装的类
  61. //
  62. class CWideCharString : public CObject
  63. {
  64. public:
  65. CWideCharString();
  66. CWideCharString(const CWideCharString& wcString);
  67. //len=-1 代表取整串字符的长度,若len大于整串字符的长度,则忽略len
  68. CWideCharString(LPCWSTR widestring, int len=-1);
  69. CWideCharString(const char* lpszString, int len=-1);
  70. virtual ~CWideCharString();
  71. operator LPCWSTR() const { return m_pBuffer; }
  72. int GetLength() const { return m_nBufferLen; }
  73. CWideCharString operator + (const CWideCharString& wcString);
  74. CWideCharString& operator += (const CWideCharString& wcString);
  75. WCHAR operator[](int index) const;
  76. WCHAR& operator[](int index);
  77. CWideCharString& operator = (const CWideCharString& wcString);
  78. CWideCharString& operator = (const char* lpszString);
  79. BOOL operator == (const CWideCharString& wcString);
  80. BOOL operator != (const CWideCharString& wcString);
  81. CWideCharString Mid(int begin,int len=-1);
  82. private:
  83. WCHAR* m_pBuffer;
  84. int m_nBufferLen;
  85. };
  86. Status MyDrawString(Graphics &graphics, const TCHAR *str, const Font &font, const Brush &brush, const PointF &origin);
  87. Status MyDrawString(Graphics &graphics, const TCHAR *str, const Font &font, const Brush &brush, const PointF &origin, StringFormat &fmt);
  88. Status MyDrawString(Graphics &graphics, const TCHAR *str, const Font &font, const Brush &brush, const Point &origin);
  89. Status MyDrawString(Graphics &graphics, const TCHAR *str, const Font &font, const Brush &brush, const RectF &rect, StringFormat &fmt);
  90. Status MyDrawString(Graphics &graphics, const TCHAR *str, const Font &font, const Brush &brush, const Rect &rect, StringFormat &fmt);
  91. void MyImageSave(Bitmap &im, const WCHAR* fname, const GUID* clsid, const EncoderParameters *en=NULL);
  92. Color _MakeA_RGB(int a, Color cl);
  93. Color _MakeA_RGB(int r, int g, int b);
  94. int rand_Next(int bound);
  95. Graphics &GetGraphics();
  96. #endif // _WalkLtDemoHelp_h__