I2of5.cpp 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513
  1. // I2of5.cpp: implementation of the CI2of5 class.
  2. //
  3. // Copyright 2002 Neil Van Eps
  4. //
  5. //////////////////////////////////////////////////////////////////////
  6. #include "stdafx.h"
  7. #include "I2of5.h"
  8. //////////////////////////////////////////////////////////////////////
  9. // Construction/Destruction
  10. //////////////////////////////////////////////////////////////////////
  11. CI2of5::CI2of5()
  12. {
  13. // I2of5
  14. m_nSymbology = I2OF5;
  15. }
  16. CI2of5::~CI2of5()
  17. {
  18. }
  19. ////////////////////////////////////////////////////////////////////////////////////
  20. //
  21. // Name:
  22. // DrawBitmap()
  23. //
  24. // Description:
  25. // draws a barcode using the previously loaded data
  26. //
  27. // Arguments:
  28. // none
  29. //
  30. // Return:
  31. // void
  32. //
  33. // Called by:
  34. // public class interface
  35. //
  36. ////////////////////////////////////////////////////////////////////////////////////
  37. void CI2of5::DrawBitmap()
  38. {
  39. int i,nNumber;
  40. // draw the start character
  41. DrawPattern("nnnn");
  42. // for each character in the message
  43. for (i=0;i<m_csMessage.GetLength();i+=2)
  44. {
  45. // retrieve the next two digit number
  46. nNumber = m_csMessage.GetAt(i) - '0';
  47. nNumber = nNumber * 10;
  48. nNumber += m_csMessage.GetAt(i+1) - '0';
  49. // draw the two digit number
  50. DrawPattern(RetrievePattern(nNumber));
  51. }
  52. // draw the stop character
  53. DrawPattern("wnn");
  54. return;
  55. }
  56. ////////////////////////////////////////////////////////////////////////////////////
  57. //
  58. // Name:
  59. // DrawPattern()
  60. //
  61. // Description:
  62. // draws the passed character pattern at the end of the barcode
  63. //
  64. // Arguments:
  65. // CString csPattern - the bar pattern to draw
  66. //
  67. // Return:
  68. // void
  69. //
  70. // Called by:
  71. // CRationalCodabar::DrawBitmap()
  72. //
  73. ////////////////////////////////////////////////////////////////////////////////////
  74. void CI2of5::DrawPattern(CString csCharPattern)
  75. {
  76. int i,nXPixel,nYPixel,nTempWidth;
  77. CDC oDC;
  78. // attach to the device context
  79. oDC.Attach(m_hDC);
  80. // initialize X pixel value
  81. nXPixel = m_nStartingXPixel;
  82. for (i=0;i<csCharPattern.GetLength();i++)
  83. {
  84. // decide if narrow or wide bar
  85. if (csCharPattern.GetAt(i)=='n')
  86. nTempWidth = m_nNarrowBarPixelWidth;
  87. else
  88. nTempWidth = m_nWideBarPixelWidth;
  89. // X value for loop
  90. for (nXPixel=m_nStartingXPixel;nXPixel<m_nStartingXPixel+nTempWidth;nXPixel++)
  91. {
  92. // Y value for loop
  93. for (nYPixel=m_nStartingYPixel;nYPixel<m_nStartingYPixel+m_nPixelHeight;nYPixel++)
  94. {
  95. // if this is a bar
  96. if (i%2==0)
  97. oDC.SetPixelV(nXPixel,nYPixel,COLORBLACK);
  98. else
  99. oDC.SetPixelV(nXPixel,nYPixel,COLORWHITE);
  100. }
  101. }
  102. // advance the starting position
  103. m_nStartingXPixel+= nTempWidth;
  104. }
  105. // detach from the device context
  106. oDC.Detach();
  107. return;
  108. }
  109. ////////////////////////////////////////////////////////////////////////////////////
  110. //
  111. // Name:
  112. // RetrievePattern()
  113. //
  114. // Description:
  115. // retrieves the bar pattern for a given character
  116. //
  117. // Arguments:
  118. // char cInputCharacter - the input character to get the bar pattern for
  119. //
  120. // Return:
  121. // CString - the bar pattern for the input character
  122. //
  123. // Called by:
  124. // CRationalCodabar::DrawBitmap()
  125. //
  126. ////////////////////////////////////////////////////////////////////////////////////
  127. CString CI2of5::RetrievePattern(int nTwoDigitNumber)
  128. {
  129. CString csCharPattern;
  130. switch (nTwoDigitNumber)
  131. {
  132. case 0:
  133. csCharPattern = "nnnnwwwwnn";
  134. break;
  135. case 1:
  136. csCharPattern = "nwnnwnwnnw";
  137. break;
  138. case 2:
  139. csCharPattern = "nnnwwnwnnw";
  140. break;
  141. case 3:
  142. csCharPattern = "nwnwwnwnnn";
  143. break;
  144. case 4:
  145. csCharPattern = "nnnnwwwnnw";
  146. break;
  147. case 5:
  148. csCharPattern = "nwnnwwwnnn";
  149. break;
  150. case 6:
  151. csCharPattern = "nnnwwwwnnn";
  152. break;
  153. case 7:
  154. csCharPattern = "nnnnwnwwnw";
  155. break;
  156. case 8:
  157. csCharPattern = "nwnnwnwwnn";
  158. break;
  159. case 9:
  160. csCharPattern = "nnnwwnwwnn";
  161. break;
  162. case 10:
  163. csCharPattern = "wnnnnwnwwn";
  164. break;
  165. case 11:
  166. csCharPattern = "wwnnnnnnww";
  167. break;
  168. case 12:
  169. csCharPattern = "wnnwnnnnww";
  170. break;
  171. case 13:
  172. csCharPattern = "wwnwnnnnwn";
  173. break;
  174. case 14:
  175. csCharPattern = "wnnnnwnnww";
  176. break;
  177. case 15:
  178. csCharPattern = "wwnnnwnnwn";
  179. break;
  180. case 16:
  181. csCharPattern = "wnnwnwnnwn";
  182. break;
  183. case 17:
  184. csCharPattern = "wnnnnnnwww";
  185. break;
  186. case 18:
  187. csCharPattern = "wwnnnnnwwn";
  188. break;
  189. case 19:
  190. csCharPattern = "wnnwnnnwwn";
  191. break;
  192. case 20:
  193. csCharPattern = "nnwnnwnwwn";
  194. break;
  195. case 21:
  196. csCharPattern = "nwwnnnnnww";
  197. break;
  198. case 22:
  199. csCharPattern = "nnwwnnnnww";
  200. break;
  201. case 23:
  202. csCharPattern = "nwwwnnnnwn";
  203. break;
  204. case 24:
  205. csCharPattern = "nnwnnwnnww";
  206. break;
  207. case 25:
  208. csCharPattern = "nwwnnwnnwn";
  209. break;
  210. case 26:
  211. csCharPattern = "nnwwnwnnwn";
  212. break;
  213. case 27:
  214. csCharPattern = "nnwnnnnwww";
  215. break;
  216. case 28:
  217. csCharPattern = "nwwnnnnwwn";
  218. break;
  219. case 29:
  220. csCharPattern = "nnwwnnnwwn";
  221. break;
  222. case 30:
  223. csCharPattern = "wnwnnwnwnn";
  224. break;
  225. case 31:
  226. csCharPattern = "wwwnnnnnnw";
  227. break;
  228. case 32:
  229. csCharPattern = "wnwwnnnnnw";
  230. break;
  231. case 33:
  232. csCharPattern = "wwwwnnnnnn";
  233. break;
  234. case 34:
  235. csCharPattern = "wnwnnwnnnw";
  236. break;
  237. case 35:
  238. csCharPattern = "wwwnnwnnnn";
  239. break;
  240. case 36:
  241. csCharPattern = "wnwwnwnnnn";
  242. break;
  243. case 37:
  244. csCharPattern = "wnwnnnnwnw";
  245. break;
  246. case 38:
  247. csCharPattern = "wwwnnnnwnn";
  248. break;
  249. case 39:
  250. csCharPattern = "wnwwnnnwnn";
  251. break;
  252. case 40:
  253. csCharPattern = "nnnnwwnwwn";
  254. break;
  255. case 41:
  256. csCharPattern = "nwnnwnnnww";
  257. break;
  258. case 42:
  259. csCharPattern = "nnnwwnnnww";
  260. break;
  261. case 43:
  262. csCharPattern = "nwnwwnnnwn";
  263. break;
  264. case 44:
  265. csCharPattern = "nnnnwwnnww";
  266. break;
  267. case 45:
  268. csCharPattern = "nwnnwwnnwn";
  269. break;
  270. case 46:
  271. csCharPattern = "nnnwwwnnwn";
  272. break;
  273. case 47:
  274. csCharPattern = "nnnnwnnwww";
  275. break;
  276. case 48:
  277. csCharPattern = "nwnnwnnwwn";
  278. break;
  279. case 49:
  280. csCharPattern = "nnnwwnnwwn";
  281. break;
  282. case 50:
  283. csCharPattern = "wnnnwwnwnn";
  284. break;
  285. case 51:
  286. csCharPattern = "wwnnwnnnnw";
  287. break;
  288. case 52:
  289. csCharPattern = "wnnwwnnnnw";
  290. break;
  291. case 53:
  292. csCharPattern = "wwnwwnnnnn";
  293. break;
  294. case 54:
  295. csCharPattern = "wnnnwwnnnw";
  296. break;
  297. case 55:
  298. csCharPattern = "wwnnwwnnnn";
  299. break;
  300. case 56:
  301. csCharPattern = "wnnwwwnnnn";
  302. break;
  303. case 57:
  304. csCharPattern = "wnnnwnnwnw";
  305. break;
  306. case 58:
  307. csCharPattern = "wwnnwnnwnn";
  308. break;
  309. case 59:
  310. csCharPattern = "wnnwwnnwnn";
  311. break;
  312. case 60:
  313. csCharPattern = "nnwnwwnwnn";
  314. break;
  315. case 61:
  316. csCharPattern = "nwwnwnnnnw";
  317. break;
  318. case 62:
  319. csCharPattern = "nnwwwnnnnw";
  320. break;
  321. case 63:
  322. csCharPattern = "nwwwwnnnnn";
  323. break;
  324. case 64:
  325. csCharPattern = "nnwnwwnnnw";
  326. break;
  327. case 65:
  328. csCharPattern = "nwwnwwnnnn";
  329. break;
  330. case 66:
  331. csCharPattern = "nnwwwwnnnn";
  332. break;
  333. case 67:
  334. csCharPattern = "nnwnwnnwnw";
  335. break;
  336. case 68:
  337. csCharPattern = "nwwnwnnwnn";
  338. break;
  339. case 69:
  340. csCharPattern = "nnwwwnnwnn";
  341. break;
  342. case 70:
  343. csCharPattern = "nnnnnwwwwn";
  344. break;
  345. case 71:
  346. csCharPattern = "nwnnnnwnww";
  347. break;
  348. case 72:
  349. csCharPattern = "nnnwnnwnww";
  350. break;
  351. case 73:
  352. csCharPattern = "nwnwnnwnwn";
  353. break;
  354. case 74:
  355. csCharPattern = "nnnnnwwnww";
  356. break;
  357. case 75:
  358. csCharPattern = "nwnnnwwnwn";
  359. break;
  360. case 76:
  361. csCharPattern = "nnnwnwwnwn";
  362. break;
  363. case 77:
  364. csCharPattern = "nnnnnnwwww";
  365. break;
  366. case 78:
  367. csCharPattern = "nwnnnnwwwn";
  368. break;
  369. case 79:
  370. csCharPattern = "nnnwnnwwwn";
  371. break;
  372. case 80:
  373. csCharPattern = "wnnnnwwwnn";
  374. break;
  375. case 81:
  376. csCharPattern = "wwnnnnwnnw";
  377. break;
  378. case 82:
  379. csCharPattern = "wnnwnnwnnw";
  380. break;
  381. case 83:
  382. csCharPattern = "wwnwnnwnnn";
  383. break;
  384. case 84:
  385. csCharPattern = "wnnnnwwnnw";
  386. break;
  387. case 85:
  388. csCharPattern = "wwnnnwwnnn";
  389. break;
  390. case 86:
  391. csCharPattern = "wnnwnwwnnn";
  392. break;
  393. case 87:
  394. csCharPattern = "wnnnnnwwnw";
  395. break;
  396. case 88:
  397. csCharPattern = "wwnnnnwwnn";
  398. break;
  399. case 89:
  400. csCharPattern = "wnnwnnwwnn";
  401. break;
  402. case 90:
  403. csCharPattern = "nnwnnwwwnn";
  404. break;
  405. case 91:
  406. csCharPattern = "nwwnnnwnnw";
  407. break;
  408. case 92:
  409. csCharPattern = "nnwwnnwnnw";
  410. break;
  411. case 93:
  412. csCharPattern = "nwwwnnwnnn";
  413. break;
  414. case 94:
  415. csCharPattern = "nnwnnwwnnw";
  416. break;
  417. case 95:
  418. csCharPattern = "nwwnnwwnnn";
  419. break;
  420. case 96:
  421. csCharPattern = "nnwwnwwnnn";
  422. break;
  423. case 97:
  424. csCharPattern = "nnwnnnwwnw";
  425. break;
  426. case 98:
  427. csCharPattern = "nwwnnnwwnn";
  428. break;
  429. case 99:
  430. csCharPattern = "nnwwnnwwnn";
  431. break;
  432. }
  433. return csCharPattern;
  434. }
  435. ////////////////////////////////////////////////////////////////////////////////////
  436. //
  437. // Name:
  438. // BitmapToClipboard()
  439. //
  440. // Description:
  441. // puts the specified bitmap on the clipboard
  442. //
  443. // Arguments:
  444. // none
  445. //
  446. // Return:
  447. // void
  448. //
  449. // Called by:
  450. // public class interface - called by users of the class
  451. //
  452. ////////////////////////////////////////////////////////////////////////////////////
  453. void CI2of5::BitmapToClipboard()
  454. {
  455. CDC memDC;
  456. CBitmap oBitmap;
  457. memDC.CreateCompatibleDC(NULL);
  458. m_hDC = memDC.GetSafeHdc();
  459. // create compatible, correctly sized bitmap
  460. oBitmap.CreateCompatibleBitmap(&memDC,m_nFinalBarcodePixelWidth,m_nPixelHeight);
  461. // select our bitmap into the device context
  462. CBitmap * oldbm = memDC.SelectObject(&oBitmap);
  463. // turn area white - stock black bitmap is selected
  464. memDC.BitBlt(0,0,m_nFinalBarcodePixelWidth,m_nPixelHeight,NULL,0,0,WHITENESS);
  465. // draw bitmap into memory device context
  466. DrawBitmap();
  467. // put bitmap on clipboard
  468. ::OpenClipboard(NULL);
  469. ::EmptyClipboard();
  470. ::SetClipboardData(CF_BITMAP, oBitmap.m_hObject);
  471. ::CloseClipboard();
  472. // deselect object out of device context
  473. memDC.SelectObject(oldbm);
  474. // make sure bitmap not deleted with CBitmap object
  475. oBitmap.Detach();
  476. return;
  477. }