Spa_m

PIU_Temperatura

Nov 29th, 2016
837
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Windows.h>
  2. #include <stdio.h>
  3.  
  4. enum { CELSJUSZ, KELWIN, FAHRENHEIT };
  5.  
  6. LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  7. {
  8.     static HWND edit_C, edit_K, edit_F, static_C, static_K, static_F;   // uchwyty do kontrolek
  9.     switch (msg)
  10.     {
  11.     case WM_CREATE:
  12.     {
  13.         // taki myk na wydobycie identyfikatora instancji naszego programu z parametru lParam ;)
  14.         HINSTANCE &hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
  15.         // pola tekstowe, w kt�rych b�d� wpisywane i aktualizowane aktualne przelizone temperatury w r�nych skalach
  16.         // po�o�enie i wymiary podane s� byle jakie, bo i tak s� ustawiane na poprawne w obs�udze komunikatu WM_SIZE (zmiana rozmiaru okna)
  17.         edit_C = CreateWindowEx(0, TEXT("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER, 1, 2, 3, 4, hwnd, (HMENU)0, hInstance, NULL);
  18.         edit_K = CreateWindowEx(0, TEXT("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER, 5, 6, 7, 8, hwnd, (HMENU)1, hInstance, NULL);
  19.         edit_F = CreateWindowEx(0, TEXT("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER, 9, 10, 11, 12, hwnd, (HMENU)2, hInstance, NULL);
  20.  
  21.         // pola statyczne (nieedytowalne), kt�re b�d� wy�wietla� opis pola tekstowego, jakiej skali dotyczy temperatura
  22.         // po�o�enie i wymiary podane s� byle jakie, bo i tak s� ustawiane na poprawne w obs�udze komunikatu WM_SIZE (zmiana rozmiaru okna)
  23.         static_C = CreateWindowEx(0, TEXT("STATIC"), TEXT("Celsjusz"), WS_CHILD | WS_VISIBLE | WS_BORDER, 13, 14, 15, 16, hwnd, (HMENU)4, hInstance, NULL);
  24.         static_K = CreateWindowEx(0, TEXT("STATIC"), TEXT("Kelwin"), WS_CHILD | WS_VISIBLE | WS_BORDER, 17, 18, 19, 20, hwnd, (HMENU)5, hInstance, NULL);
  25.         static_F = CreateWindowEx(0, TEXT("STATIC"), TEXT("Farenheit"), WS_CHILD | WS_VISIBLE | WS_BORDER, 21, 22, 23, 24, hwnd, (HMENU)6, hInstance, NULL);
  26.     }break;
  27.  
  28.     case WM_COMMAND:
  29.     {
  30.         static char buff[11];
  31.         static double temp_C = 0;   //
  32.         static double temp_K = 0;   // zmienne przechowuj�ce temperatury w ka�dej skali
  33.         static double temp_F = 0;   //
  34.  
  35.         switch (LOWORD(wParam))
  36.         {
  37.         case CELSJUSZ:
  38.         {
  39.             // sprawdzamy czy klikni�ta kontrolka dalej ma focusa
  40.             if (GetFocus() != (HWND)lParam)
  41.                 break;
  42.             // pobieramy temperatur� wpisan� do pola edycyjnego temperatury w Celsjuszach
  43.             GetWindowTextA(edit_C, buff, 10);
  44.  
  45.             temp_C = atof(buff);        // konwertujemy pobrany tekst na liczb� (Celsjusze)
  46.             temp_K = temp_C + 273.15;   // przeliczamy temperatur� z Celsjuszy na Kelwiny
  47.             temp_F = 1.8 * temp_C + 32; // przeliczamy temperatur� z Celsjuszy na Farenheity
  48.  
  49.             sprintf_s(buff, "%.2lf", temp_K);   // konwertujemy przeliczon� temperatur� w Kelwinach na tekst
  50.             SetWindowTextA(edit_K, buff);       // wpisujemy przeliczon� temperatur� w Kelwinach do odpowiedniego pola edycyjnego
  51.             sprintf_s(buff, "%.2lf", temp_F);   // konwertujemy przeliczon� temperatur� w Farenheitach na tekst
  52.             SetWindowTextA(edit_F, buff);       // wpisujemy przeliczon� temperatur� w Farenheitach do odpowiedniego pola edycyjnego
  53.  
  54.         }break;
  55.  
  56.         case KELWIN:
  57.         {
  58.             // sprawdzamy czy klikni�ta kontrolka dalej ma focusa
  59.             if (GetFocus() != (HWND)lParam)
  60.                 break;
  61.             // pobieramy temperatur� wpisan� do pola edycyjnego temperatury w Kelwinach
  62.             GetWindowTextA(edit_K, buff, 10);
  63.  
  64.             temp_K = atof(buff);        // konwertujemy pobrany tekst na liczb� (Kelwiny)
  65.             temp_C = temp_K - 273.15;   // przeliczamy temperatur� z Kelwin�w na Celsjusze
  66.             temp_F = 1.8 * temp_C + 32; // przeliczamy temperatur� z Celsjuszy na Farenheity
  67.  
  68.             sprintf_s(buff, "%.2lf", temp_C);   // konwertujemy przeliczon� temperatur� w Celsjuszach na tekst
  69.             SetWindowTextA(edit_C, buff);       // wpisujemy przeliczon� temperatur� w Celsjuszach do odpowiedniego pola edycyjnego
  70.             sprintf_s(buff, "%.2lf", temp_F);   // konwertujemy przeliczon� temperatur� w Farenheitach na tekst
  71.             SetWindowTextA(edit_F, buff);       // wpisujemy przeliczon� temperatur� w Farenheitach do odpowiedniego pola edycyjnego
  72.  
  73.         }break;
  74.  
  75.         case FAHRENHEIT:
  76.         {
  77.             // sprawdzamy czy klikni�ta kontrolka dalej ma focusa
  78.             if (GetFocus() != (HWND)lParam)
  79.                 break;
  80.             // pobieramy temperatur� wpisan� do pola edycyjnego temperatury w Farenheitach
  81.             GetWindowTextA(edit_F, buff, 10);
  82.  
  83.             temp_F = atof(buff);                // konwertujemy pobrany tekst na liczb� (Kelwiny)
  84.             temp_C = (5.0 / 9.0) * (temp_F - 32);   // przeliczamy temperatur� z Farenheit�w na Celsjusze
  85.             temp_K = temp_C + 273.15;           // przeliczamy temperatur� z Celsjuszy na Kelwiny
  86.  
  87.             sprintf_s(buff, "%.2lf", temp_C);   // konwertujemy przeliczon� temperatur� w Celsjuszach na tekst
  88.             SetWindowTextA(edit_C, buff);       // wpisujemy przeliczon� temperatur� w Celsjuszach do odpowiedniego pola edycyjnego
  89.             sprintf_s(buff, "%.2lf", temp_K);   // konwertujemy przeliczon� temperatur� w Kelwinach na tekst
  90.             SetWindowTextA(edit_K, buff);       // wpisujemy przeliczon� temperatur� w Kelwinach do odpowiedniego pola edycyjnego
  91.         }break;
  92.         };
  93.     }
  94.     break;
  95.     case WM_SIZE:
  96.     {
  97.         // Przy zmianie rozmiaru ustalamy nowe wymiary i po�o�enia element�w
  98.         RECT windowRect;
  99.         GetClientRect(hwnd, &windowRect);           // pobieramy aktualne wymiary obszaru klienckiego
  100.         int xEdit = (windowRect.right - 50) / 2;    // wsp X pocz�tku p�l edycyjnych
  101.         int y = 10;                                 // wsp Y pocz�tku wszystkich p�l
  102.         int xStatic = (windowRect.right - 190) / 2; // wsp X pocz�tku p�l telstowych statycznych
  103.         int witdhEdit = 100;                        // szeroko�� p�l edycyjnych
  104.         int height = 20;                            // wysoko�� wszystkich p�l
  105.         int widthStatic = 70;                       // szeroko�� p�l statycznych
  106.                                                     // ustawianie pola statycznego i edycyjnego dotycz�cych temperatury Celsjusza
  107.         MoveWindow(static_C, xStatic, y, widthStatic, height, TRUE);
  108.         MoveWindow(edit_C, xEdit, y, witdhEdit, height, TRUE);
  109.  
  110.         // ustawianie pola statycznego i edycyjnego dotycz�cych temperatury Kelwina
  111.         MoveWindow(static_K, xStatic, y += height + 10, widthStatic, height, TRUE);
  112.         MoveWindow(edit_K, xEdit, y, witdhEdit, height, TRUE);
  113.  
  114.         // ustawianie pola statycznego i edycyjnego dotycz�cych temperatury Farenheita
  115.         MoveWindow(static_F, xStatic, y += height + 10, widthStatic, height, TRUE);
  116.         MoveWindow(edit_F, xEdit, y, witdhEdit, height, TRUE);
  117.  
  118.     }break;
  119.  
  120.     case WM_CLOSE:
  121.         DestroyWindow(hwnd);
  122.         break;
  123.  
  124.     case WM_DESTROY:
  125.         PostQuitMessage(0);
  126.         break;
  127.  
  128.         //Ustawianie minimalnego rozmiaru okna:
  129.     case WM_GETMINMAXINFO:
  130.         ((MINMAXINFO *)lParam)->ptMinTrackSize.x = 260; // minimalna szeroko��
  131.         ((MINMAXINFO *)lParam)->ptMinTrackSize.y = 200; // minimalna wysoko��
  132.         break;
  133.  
  134.     default:
  135.         return DefWindowProc(hwnd, msg, wParam, lParam);
  136.     }
  137.     return 0;
  138. }
  139.  
  140. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  141. {
  142.     WNDCLASSEX window;
  143.     HWND hwnd;
  144.     MSG msg;
  145.     TCHAR ClassName[] = TEXT("KlasaOkna");
  146.     TCHAR WindowTitle[] = TEXT("Przeliczanie temperatur");
  147.  
  148.     window.cbClsExtra = NULL;
  149.     window.cbSize = sizeof(WNDCLASSEX);
  150.     window.cbWndExtra = NULL;
  151.     window.hbrBackground = (HBRUSH)(COLOR_WINDOW);
  152.     window.hCursor = LoadCursor(NULL, IDC_ARROW);
  153.     window.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  154.     window.hIconSm = NULL;
  155.     window.hInstance = hInstance;
  156.     window.lpfnWndProc = WndProc;
  157.     window.lpszClassName = ClassName;
  158.     window.lpszMenuName = 0;
  159.     window.style = CS_VREDRAW | CS_HREDRAW;
  160.  
  161.     if (!RegisterClassEx(&window))
  162.         return 0;
  163.  
  164.     hwnd = CreateWindowEx(WS_EX_WINDOWEDGE, ClassName, WindowTitle, WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 200, 300, NULL, NULL, hInstance, NULL);
  165.  
  166.     if (hwnd == NULL)
  167.     {
  168.         UnregisterClass(ClassName, hInstance);
  169.         return 0;
  170.     }
  171.  
  172.     ShowWindow(hwnd, nCmdShow);
  173.     UpdateWindow(hwnd);
  174.  
  175.     while (GetMessage(&msg, NULL, 0, 0) > 0)
  176.     {
  177.         TranslateMessage(&msg);
  178.         DispatchMessage(&msg);
  179.     }
  180.     UnregisterClass(ClassName, hInstance);
  181.     return msg.wParam;
  182. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×