PcxModule.cpp
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:8k
源码类别:

图形图象

开发平台:

Visual C++

  1. // PcxModule.cpp : Defines the initialization routines for the DLL.
  2. //
  3. #include "stdafx.h"
  4. #include "PcxModule.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. static char ModuleProcessImgType[]="PCX"; // 本模块能处理的图像类型
  11. static char WriterList[]="freedvlp"; // 本模块的作者列表
  12. static char WriterMess[]="^_^"; // 作者留言
  13. //
  14. // Note!
  15. //
  16. // If this DLL is dynamically linked against the MFC
  17. // DLLs, any functions exported from this DLL which
  18. // call into MFC must have the AFX_MANAGE_STATE macro
  19. // added at the very beginning of the function.
  20. //
  21. // For example:
  22. //
  23. // extern "C" BOOL PASCAL EXPORT ExportedFunction()
  24. // {
  25. // AFX_MANAGE_STATE(AfxGetStaticModuleState());
  26. // // normal function body here
  27. // }
  28. //
  29. // It is very important that this macro appear in each
  30. // function, prior to any calls into MFC.  This means that
  31. // it must appear as the first statement within the 
  32. // function, even before any object variable declarations
  33. // as their constructors may generate calls into the MFC
  34. // DLL.
  35. //
  36. // Please see MFC Technical Notes 33 and 58 for additional
  37. // details.
  38. //
  39. // 在图像读写模块中,如果想分配内存,请使用API函数GlobalAlloc()
  40. // ,如果想释放内存请使用GlobalFree()函数。不要使用诸如:new
  41. // 、malloc()等函数。这是为了使各模块之间可以异地释放内存。
  42. //
  43. //
  44. /////////////////////////////////////////////////////////////////////////////
  45. // CPcxModuleApp
  46. BEGIN_MESSAGE_MAP(CPcxModuleApp, CWinApp)
  47. //{{AFX_MSG_MAP(CPcxModuleApp)
  48. // NOTE - the ClassWizard will add and remove mapping macros here.
  49. //    DO NOT EDIT what you see in these blocks of generated code!
  50. //}}AFX_MSG_MAP
  51. END_MESSAGE_MAP()
  52. /////////////////////////////////////////////////////////////////////////////
  53. // CPcxModuleApp construction
  54. CPcxModuleApp::CPcxModuleApp()
  55. {
  56. // TODO: add construction code here,
  57. // Place all significant initialization in InitInstance
  58. }
  59. /////////////////////////////////////////////////////////////////////////////
  60. // The one and only CPcxModuleApp object
  61. CPcxModuleApp theApp;
  62. // 接口函数声明 — 第一层,唯一与外界联系的接口
  63. int WINAPI AccessPCXModule(INFOSTR *pInfo)
  64. {
  65. // 这个函数可以不作修改的使用,除非你的返回值多于两种。
  66. switch(pInfo->comm)
  67. {
  68. case CMD_GETPROCTYPE: // 获取本模块能处理的图像类型
  69. _fnCMD_GETPROCTYPE(pInfo);
  70. break;
  71. case CMD_GETWRITERS: // 获取本模块的作者列表,多人时用逗号分隔
  72. _fnCMD_GETWRITERS(pInfo);
  73. break;
  74. case CMD_GETWRITERMESS: // 获取作者们的留言
  75. _fnCMD_GETWRITERMESS(pInfo);
  76. break;
  77. case CMD_GETBUILDID: // 获取图像模块内部版本号
  78. _fnCMD_GETBUILDID(pInfo);
  79. break;
  80. case CMD_IS_VALID_FILE: // 判断指定文件是否是有效的WMF文件
  81. _fnCMD_IS_VALID_FILE(pInfo);
  82. break;
  83. case CMD_GET_FILE_INFO: // 获取指定文件的信息
  84. _fnCMD_GET_FILE_INFO(pInfo);
  85. break;
  86. case CMD_LOAD_FROM_FILE: // 从指定图像文件中读取数据
  87. _fnCMD_LOAD_FROM_FILE(pInfo);
  88. break;
  89. case CMD_SAVE_TO_FILE: // 将数据保存到指定文件中
  90. _fnCMD_SAVE_TO_FILE(pInfo);
  91. break;
  92. case CMD_IS_SUPPORT: // 查询某个命令是否被支持
  93. _fnCMD_IS_SUPPORT(pInfo);
  94. break;
  95. case CMD_RESIZE: // 从新获取指定尺寸的图像位数据(只适用于矢量图像)
  96. _fnCMD_RESIZE(pInfo);
  97. break;
  98. default:
  99. pInfo->result = ER_ILLCOMM; // 非法命令
  100. ASSERT(FALSE); // 调用者的程序设计有问题 :-)
  101. break;
  102. }
  103. // 执行命令成功返回1, 失败返回0
  104. return (pInfo->result==ER_SUCCESS)? 1:0;
  105. }
  106. // 命令解释函数 — 第二层解释函数
  107. //********************************************************************//
  108. // 操作命令解释函数---解释:CMD_IS_SUPPORT命令
  109. // 查询某个命令是否被支持
  110. void _fnCMD_IS_SUPPORT(INFOSTR *pInfo)
  111. {
  112. // 这个函数是为客户程序查询时使用,如果你实现了对某个命令的
  113. // 解释,可修改相应的case中的设置,使其返回ER_SUCCESS,这就
  114. // 表示你的模块已经支持该命令了。同时,现在的这个文件中已包
  115. // 含了对前四个命令的解释,你只需向还未支持的命令函数中添加
  116. // 代码即可。
  117. ASSERT(pInfo->result == ER_EMPTY);
  118. switch(pInfo->annexdata.cmAnnData)  
  119. {
  120. case CMD_GETPROCTYPE: // 获取本模块能处理的图像类型
  121. pInfo->result = ER_SUCCESS;
  122. break;
  123. case CMD_GETWRITERS: // 获取本模块的作者列表,多人时用逗号分隔
  124. pInfo->result = ER_SUCCESS;
  125. break;
  126. case CMD_GETWRITERMESS: // 获取作者们的留言
  127. pInfo->result = ER_SUCCESS;
  128. break;
  129. case CMD_GETBUILDID: // 获取图像模块内部版本号
  130. pInfo->result = ER_SUCCESS;
  131. break;
  132. case CMD_IS_VALID_FILE: // 判断指定文件是否是有效的WMF文件
  133. pInfo->result = ER_SUCCESS;
  134. break;
  135. case CMD_GET_FILE_INFO: // 获取指定文件的信息
  136. pInfo->result = ER_SUCCESS;
  137. break;
  138. case CMD_LOAD_FROM_FILE: // 从指定图像文件中读取数据
  139. pInfo->result = ER_SUCCESS;
  140. break;
  141. case CMD_SAVE_TO_FILE: // 将数据保存到指定文件中
  142. pInfo->result = ER_NOTSUPPORT;
  143. break;
  144. case CMD_IS_SUPPORT: // 查询某个命令是否被支持
  145. pInfo->result = ER_SUCCESS;
  146. break;
  147. case CMD_RESIZE: // 获取指定尺寸的图像(只适用于矢量图像)
  148. pInfo->result = ER_NOTSUPPORT;
  149. break;
  150. default:
  151. pInfo->result = ER_NOTSUPPORT;
  152. break;
  153. }
  154. }
  155. // 操作命令解释函数---解释:CMD_GETPROCTYPE命令
  156. // 获取本模块能处理的图像类型,如:BMP,PCX等等
  157. void _fnCMD_GETPROCTYPE(INFOSTR *pInfo)
  158. {
  159. // 这是预定义的函数代码,你可以不必修改的使用。
  160. // 根据接口定义,此时附加数据应被清空为0,所以下此断言
  161. ASSERT(pInfo->annexdata.scAnnData[0] == 0);
  162. ASSERT(pInfo->result == ER_EMPTY);
  163. // 复制能处理的类型字符串
  164. ::CopyMemory((PVOID)pInfo->annexdata.scAnnData, (PVOID)ModuleProcessImgType, 
  165. sizeof(ModuleProcessImgType));
  166. pInfo->result = ER_SUCCESS;
  167. }
  168. // 操作命令解释函数---解释:CMD_GETWRITER命令
  169. // 获取本模块的作者列表,多人时用逗号分隔
  170. void _fnCMD_GETWRITERS(INFOSTR *pInfo)
  171. {
  172. // 这是预定义的函数代码,你可以不必修改的使用。
  173. // 根据接口定义,此时附加数据应被清空为0,所以下此断言
  174. ASSERT(pInfo->annexdata.scAnnData[0] == 0);
  175. ASSERT(pInfo->result == ER_EMPTY);
  176. // 复制开发者名单串
  177. ::CopyMemory((PVOID)pInfo->annexdata.scAnnData, (PVOID)WriterList, 
  178. sizeof(WriterList));
  179. pInfo->result = ER_SUCCESS;
  180. }
  181. // 操作命令解释函数---解释:CMD_GETWRITERMESS命令
  182. // 获取作者们的留言
  183. void _fnCMD_GETWRITERMESS(INFOSTR *pInfo)
  184. {
  185. // 这是预定义的函数代码,你可以不必修改的使用。
  186. // 根据接口定义,此时附加数据应被清空为0,所以下此断言
  187. ASSERT(pInfo->annexdata.scAnnData[0] == 0);
  188. ASSERT(pInfo->result == ER_EMPTY);
  189. // 复制开发者们的留言字符串
  190. ::CopyMemory((PVOID)pInfo->annexdata.scAnnData, (PVOID)WriterMess, 
  191. sizeof(WriterMess));
  192. pInfo->result = ER_SUCCESS;
  193. }
  194. // 操作命令解释函数---解释:CMD_GETBUILDID命令
  195. // 获取图像模块内部版本号
  196. void _fnCMD_GETBUILDID(INFOSTR *pInfo)
  197. {
  198. // 这是预定义的函数代码,你可以不必修改的使用。
  199. // 根据接口定义,此时annexdata.dwAnnData应被设为0,所以下此断言
  200. ASSERT(pInfo->annexdata.dwAnnData == 0);
  201. ASSERT(pInfo->result == ER_EMPTY);
  202. // 填写内部版本号码
  203. pInfo->annexdata.dwAnnData = MODULE_BUILDID;
  204. pInfo->result = ER_SUCCESS;
  205. }
  206. // 操作命令解释函数---解释:CMD_IS_VALID_FILE命令
  207. // 判断指定文件是否是有效的WMF文件
  208. void _fnCMD_IS_VALID_FILE(INFOSTR *pInfo)
  209. {
  210. Pcx_IS_VALID_FILE( pInfo );
  211. }
  212. // 操作命令解释函数---解释:CMD_GET_FILE_INFO命令
  213. // 获取指定文件的信息
  214. void _fnCMD_GET_FILE_INFO(INFOSTR *pInfo)
  215. {
  216. Pcx_GET_FILE_INFO(pInfo);
  217. }
  218. // 操作命令解释函数---解释:CMD_LOAD_FROM_FILE命令
  219. // 从指定图像文件中读取数据
  220. void _fnCMD_LOAD_FROM_FILE(INFOSTR *pInfo)
  221. {
  222. Pcx_Load_From_File(pInfo);
  223. }
  224. // 操作命令解释函数---解释:CMD_SAVE_TO_FILE命令
  225. // 将数据保存到指定文件中
  226. // from Yz
  227. // pInfo所指向的数据包中,annexdata.siAnnData[]变量的含意解释:
  228. // [0] — 位深度,可以是1、4、8、16(555)、24、32(888)这六个值
  229. // 中的一个,不能是其他值。另:不能存储为RLE格式
  230. // [1] — 是否使用原始调色板。0 — 表示使用,1 — 表示使用当前
  231. // 计算机缺省调色板
  232. void _fnCMD_SAVE_TO_FILE(INFOSTR *pInfo)
  233. {
  234. //Pcx_Save_To_File(pInfo);
  235. pInfo->result = ER_NOTSUPPORT;
  236. }
  237. // 操作命令解释函数---解释:CMD_RESIZE命令
  238. // 重新获取指定尺寸的图像位数据(只适用于矢量图像)
  239. void _fnCMD_RESIZE(INFOSTR *pInfo)
  240. {
  241. pInfo->result = ER_NOTSUPPORT;
  242. }