Advertisement
Guest User

Untitled

a guest
May 29th, 2015
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.10 KB | None | 0 0
  1. //---------------------------------------------------------------------------
  2.  
  3. #include <windows.h>
  4. #include <commctrl.h>
  5. #include <stdio.h>
  6.  
  7. #include "jsracka\jpge.h"
  8.  
  9. HINSTANCE inst;
  10. HWND hwnd;
  11. HFONT font;
  12. HWND btn1;
  13. HWND btn2;
  14. HWND btn3;
  15. HWND btn4;
  16. HWND graf;
  17. HWND status;
  18. BITMAP bmp;
  19. HBITMAP hbmp;
  20.  
  21. enum
  22. {
  23. ID_VYGENEROVAT,
  24. ID_OPTIMALIZOVAT,
  25. ID_POSTPROCESS,
  26. ID_ULOZIT,
  27. ID_GRAF,
  28. ID_STATUS
  29. };
  30.  
  31. float teploty[1050] = {0};
  32. BYTE optimalizovano = 0;
  33.  
  34. LRESULT CALLBACK SubProc(HANDLE _hwnd, UINT msg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
  35. {
  36. switch(msg)
  37. {
  38. case WM_PAINT:
  39. if(_hwnd == graf)
  40. {
  41. RECT r;
  42. GetClientRect(graf, &r);
  43. WORD w = r.right;
  44. WORD h = r.bottom;
  45. PAINTSTRUCT ps;
  46. HDC dc = BeginPaint(graf, &ps);
  47. SelectObject(dc, GetStockObject(DC_BRUSH));
  48. SelectObject(dc, GetStockObject(DC_PEN));
  49.  
  50. SetTextColor(dc, 0);
  51. SelectObject(dc, font);
  52. SetDCBrushColor(dc, 0xFFFFFF);
  53. SetDCPenColor(dc, 0xFFFFFF);
  54. Rectangle(dc, 0, 0, w, h);
  55.  
  56. SetDCPenColor(dc, 0);
  57. Rectangle(dc, 30, 30, w - 29, h - 29);
  58.  
  59. SetDCPenColor(dc, 0x0000FF);
  60. WORD pocethodnot = optimalizovano >= 3 ? 1050 : 1000;
  61. float gain = optimalizovano >= 3 ? 50 : 100;
  62. float off = optimalizovano >= 3 ? 325 : 225;
  63. for(DWORD i = 0; i < pocethodnot - 1; i ++)
  64. {
  65. MoveToEx(dc, i * (w - 60) / pocethodnot + 30, off - teploty[i] * gain, 0);
  66. LineTo(dc, (i + 1) * (w - 60) / pocethodnot + 30, off - teploty[i + 1] * gain);
  67. }
  68. SetDCPenColor(dc, 0);
  69. for(WORD i = 0; i <= pocethodnot / 50; i ++)
  70. {
  71. char txt[5]= {0};
  72. sprintf(txt, "%i", i * 50 + 1000);
  73. TextOut(dc, 20 + i * (w - 60) / (pocethodnot / 50), 460, txt, 4);
  74.  
  75. MoveToEx(dc, 30 + i * (w - 60) / (pocethodnot / 50) , h - 30, 0);
  76. LineTo(dc, 30 + i * (w - 60) / (pocethodnot / 50) , h - 35);
  77. }
  78. TextOutW(dc, 250, 5, L"Graf vytvořený špičkovými vědci", sizeof("Graf vytvořený špičkovými vědci") - 1);
  79. RECT r1 = {10, 20, 30, 100};
  80. DrawText(dc, "T\r\nE\r\nP\r\nL\r\nO\r\nT\r\nA", sizeof("T\r\nE\r\nP\r\nL\r\nO\r\nT\r\nA") - 1, &r1, 0);
  81. EndPaint(graf, &ps);
  82.  
  83.  
  84. HDC hdc = GetDC(graf);
  85. BITMAPINFO bmi = {0}; // We set this up to grab what we want
  86. bmi.bmiHeader.biBitCount = 24; // rgb 8 bytes for each component(3)
  87. bmi.bmiHeader.biCompression = BI_RGB;// rgb = 3 components
  88. bmi.bmiHeader.biPlanes = 1;
  89. bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader); // size of this struct
  90. bmi.bmiHeader.biWidth = r.right - r.left; // width of window
  91. bmi.bmiHeader.biHeight = r.bottom - r.top; // height of window
  92. HDC hdc1 = CreateCompatibleDC(hdc);
  93. BYTE* obrazek = 0;
  94. hbmp = CreateDIBSection(hdc1, &bmi, DIB_RGB_COLORS, (void**)&obrazek, 0, 0);
  95. SelectObject(hdc1, hbmp);
  96. BitBlt(hdc1, 0, 0, 640, 480, hdc, 0, 0, SRCCOPY);
  97. GetObject(hbmp, sizeof(BITMAP), &bmp);
  98. ReleaseDC(graf, hdc);
  99. DeleteDC(hdc1);
  100. }
  101. break;
  102. }
  103. return DefSubclassProc(_hwnd, msg, wParam, lParam);
  104. }
  105.  
  106. LRESULT CALLBACK WndProc(HANDLE _hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  107. {
  108. switch(msg)
  109. {
  110. case WM_COMMAND:
  111. switch(LOWORD(wParam))
  112. {
  113. case ID_VYGENEROVAT:
  114. { DWORD seed = GetTickCount();
  115. srand(seed);
  116. for(WORD i = 0; i < 1050; i ++) teploty[i] = (float)(rand() % 32768) / 32768 * 0.8 - 0.4;
  117.  
  118. float rnd;
  119. for(WORD i = 0; i < 1050; i ++)
  120. {
  121. if(!(i % 10)) rnd = (float)(rand() % 32768) / 32768;
  122. teploty[i] += rnd * 0.8 - 0.4;
  123. }
  124.  
  125. for(WORD i = 0; i < 200; i ++) teploty[i] += (float)i / 200;
  126. for(WORD i = 200; i < 650; i ++) teploty[i] += (float)(650 - i) / 450 * 1.8 - 0.8;
  127. for(WORD i = 650; i < 1050; i ++) teploty[i] += (float)(i - 650) / 400 * 1 - 0.8;
  128. EnableWindow(btn1, 0);
  129. EnableWindow(btn2, 1);
  130. RedrawWindow(graf, 0, 0, RDW_INVALIDATE);
  131. } break;
  132. case ID_OPTIMALIZOVAT:
  133. switch(optimalizovano)
  134. {
  135. case 0:
  136. for(WORD i = 0; i < 200; i ++) teploty[i] -= (float)i / 200;
  137. for(WORD i = 200; i < 650; i ++) teploty[i] -= (float)(650 - i) / 450 * 1.8 - 0.8;
  138. for(WORD i = 650; i < 1050; i ++) teploty[i] -= (float)(i - 650) / 400 * 1 - 0.8;
  139. SendMessageW(status, WM_SETTEXT, 0, (LPARAM) L"Stav grafu: Optimální");
  140. break;
  141. case 1:
  142. for(WORD i = 900; i < 1050; i ++) teploty[i] += (float)(i - 900) / 150;
  143. EnableWindow(btn2, 0);
  144. EnableWindow(btn3, 1);
  145. SendMessageW(status, WM_SETTEXT, 0, (LPARAM) L"Stav grafu: Optimálnější");
  146. break;
  147. }
  148. optimalizovano ++;
  149. RedrawWindow(graf, 0, 0, RDW_INVALIDATE);
  150. break;
  151. case ID_POSTPROCESS:
  152. for(WORD i = 1000; i < 1050; i ++) teploty[i] += (float)(i - 1000) / 20 * 1.5;
  153. optimalizovano ++;
  154. RedrawWindow(graf, 0, 0, RDW_INVALIDATE);
  155. EnableWindow(btn3, 0);
  156. EnableWindow(btn4, 1);
  157. SendMessageW(status, WM_SETTEXT, 0, (LPARAM) L"Stav grafu: Nejoptimálnější");
  158. break;
  159. case ID_ULOZIT:
  160. { OPENFILENAME ofn;
  161. char filename[MAX_PATH] = {0};
  162. ZeroMemory(&ofn, sizeof(ofn));
  163. ofn.lStructSize = sizeof(ofn);
  164. ofn.hwndOwner = 0;
  165. ofn.lpstrFilter = "Úžasný formát pro ukládání grafu (*.jpg)\0*.jpg\0";
  166. ofn.lpstrFile = filename;
  167. ofn.nMaxFile = MAX_PATH;
  168. ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
  169. ofn.lpstrDefExt = "jpg";
  170. GetSaveFileName(&ofn);
  171.  
  172.  
  173. BYTE *obrazek = (BYTE*)malloc(640*480*3);
  174. BYTE *_obrazek = obrazek;
  175. for(WORD y = 0; y < 480; y ++)
  176. for(WORD x = 0; x < 640; x ++)
  177. {
  178. *_obrazek++ = ((BYTE*)bmp.bmBits)[((479 - y) * 640 + x) * 3 + 2];
  179. *_obrazek++ = ((BYTE*)bmp.bmBits)[((479 - y) * 640 + x) * 3 + 1];
  180. *_obrazek++ = ((BYTE*)bmp.bmBits)[((479 - y) * 640 + x) * 3];
  181. }
  182. jpge::params params;
  183. params.m_quality = 30;
  184. params.m_subsampling = jpge::H2V2;
  185. // params.m_two_pass_flag = optimize_huffman_tables;
  186. jpge::compress_image_to_jpeg_file(filename, 640, 480, 3, obrazek, params);
  187. free(obrazek);
  188. } break;
  189. }
  190. break;
  191. case WM_DESTROY:
  192. PostQuitMessage(0);
  193. break;
  194. }
  195. return DefWindowProcW(_hwnd, msg, wParam, lParam);
  196. }
  197.  
  198.  
  199. INT32 WINAPI WinMain(HINSTANCE _inst, HINSTANCE previnst, LPSTR cmd, INT32 cmdshow)
  200. {
  201. inst = _inst;
  202. INITCOMMONCONTROLSEX icex;
  203. icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
  204. icex.dwICC = ICC_STANDARD_CLASSES | ICC_BAR_CLASSES;
  205. InitCommonControlsEx(&icex);
  206.  
  207. font = CreateFont(13, 0, 0, 0, FW_DONTCARE, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "Tahoma");
  208. WNDCLASSW wc;
  209. ZeroMemory(&wc, sizeof(wc));
  210. wc.style = CS_HREDRAW | CS_VREDRAW;
  211. wc.lpfnWndProc = WndProc;
  212. wc.hInstance = inst;
  213. wc.hIcon = LoadIcon(inst, "RES_ICON");
  214. wc.hCursor = LoadCursor(0, IDC_ARROW);
  215. wc.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
  216. wc.lpszClassName = L"tridaokna";
  217. if(!RegisterClassW(&wc)) return 0;
  218. if(!(hwnd = CreateWindowExW(0, wc.lpszClassName, L"Výroba grafu", WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW, 0, 0, 666, 600, 0, 0, inst, 0))) return 1;
  219.  
  220. btn1 = CreateWindowW(L"BUTTON", L"Obstarat \"vědecká\" data", WS_CHILD | WS_VISIBLE, 10, 10, 150, 25, hwnd, (HMENU)ID_VYGENEROVAT, inst, 0);
  221. btn2 = CreateWindowW(L"BUTTON", L"Optimalizovat graf", WS_CHILD | WS_VISIBLE | WS_DISABLED, 165, 10, 120, 25, hwnd, (HMENU)ID_OPTIMALIZOVAT, inst, 0);
  222. btn3 = CreateWindowW(L"BUTTON", L"Provést postprocessing", WS_CHILD | WS_VISIBLE | WS_DISABLED, 290, 10, 150, 25, hwnd, (HMENU)ID_POSTPROCESS, inst, 0);
  223. btn4 = CreateWindowW(L"BUTTON", L"Uložit elaborát", WS_CHILD | WS_VISIBLE | WS_DISABLED, 445, 10, 129, 25, hwnd, (HMENU)ID_ULOZIT, inst, 0);
  224.  
  225. graf = CreateWindow("STATIC", 0, WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE, 10, 45, 640, 480, hwnd, (HMENU)ID_GRAF, inst, 0);
  226. SetWindowSubclass(graf, SubProc, 0, 0);
  227.  
  228. status = CreateWindowW(L"msctls_statusbar32", L"Stav grafu: Neoptimální", WS_CHILD | WS_VISIBLE, 445, 10, 129, 25, hwnd, (HMENU)ID_STATUS, inst, 0);
  229.  
  230. ShowWindow(hwnd, 1);
  231. MSG msg;
  232. while(GetMessage(&msg, 0, 0, 0))
  233. {
  234. TranslateMessage(&msg);
  235. DispatchMessage(&msg);
  236. }
  237. return (INT)msg.wParam;
  238. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement