Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h>
- #include <stdio.h>
- enum { CELSJUSZ, KELWIN, FAHRENHEIT };
- LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- static HWND edit_C, edit_K, edit_F, static_C, static_K, static_F; // uchwyty do kontrolek
- switch (msg)
- {
- case WM_CREATE:
- {
- // taki myk na wydobycie identyfikatora instancji naszego programu z parametru lParam ;)
- HINSTANCE &hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
- // pola tekstowe, w kt�rych b�d� wpisywane i aktualizowane aktualne przelizone temperatury w r�nych skalach
- // 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)
- edit_C = CreateWindowEx(0, TEXT("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER, 1, 2, 3, 4, hwnd, (HMENU)0, hInstance, NULL);
- edit_K = CreateWindowEx(0, TEXT("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER, 5, 6, 7, 8, hwnd, (HMENU)1, hInstance, NULL);
- edit_F = CreateWindowEx(0, TEXT("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER, 9, 10, 11, 12, hwnd, (HMENU)2, hInstance, NULL);
- // pola statyczne (nieedytowalne), kt�re b�d� wy�wietla� opis pola tekstowego, jakiej skali dotyczy temperatura
- // 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)
- static_C = CreateWindowEx(0, TEXT("STATIC"), TEXT("Celsjusz"), WS_CHILD | WS_VISIBLE | WS_BORDER, 13, 14, 15, 16, hwnd, (HMENU)4, hInstance, NULL);
- static_K = CreateWindowEx(0, TEXT("STATIC"), TEXT("Kelwin"), WS_CHILD | WS_VISIBLE | WS_BORDER, 17, 18, 19, 20, hwnd, (HMENU)5, hInstance, NULL);
- static_F = CreateWindowEx(0, TEXT("STATIC"), TEXT("Farenheit"), WS_CHILD | WS_VISIBLE | WS_BORDER, 21, 22, 23, 24, hwnd, (HMENU)6, hInstance, NULL);
- }break;
- case WM_COMMAND:
- {
- static char buff[11];
- static double temp_C = 0; //
- static double temp_K = 0; // zmienne przechowuj�ce temperatury w ka�dej skali
- static double temp_F = 0; //
- switch (LOWORD(wParam))
- {
- case CELSJUSZ:
- {
- // sprawdzamy czy klikni�ta kontrolka dalej ma focusa
- if (GetFocus() != (HWND)lParam)
- break;
- // pobieramy temperatur� wpisan� do pola edycyjnego temperatury w Celsjuszach
- GetWindowTextA(edit_C, buff, 10);
- temp_C = atof(buff); // konwertujemy pobrany tekst na liczb� (Celsjusze)
- temp_K = temp_C + 273.15; // przeliczamy temperatur� z Celsjuszy na Kelwiny
- temp_F = 1.8 * temp_C + 32; // przeliczamy temperatur� z Celsjuszy na Farenheity
- sprintf_s(buff, "%.2lf", temp_K); // konwertujemy przeliczon� temperatur� w Kelwinach na tekst
- SetWindowTextA(edit_K, buff); // wpisujemy przeliczon� temperatur� w Kelwinach do odpowiedniego pola edycyjnego
- sprintf_s(buff, "%.2lf", temp_F); // konwertujemy przeliczon� temperatur� w Farenheitach na tekst
- SetWindowTextA(edit_F, buff); // wpisujemy przeliczon� temperatur� w Farenheitach do odpowiedniego pola edycyjnego
- }break;
- case KELWIN:
- {
- // sprawdzamy czy klikni�ta kontrolka dalej ma focusa
- if (GetFocus() != (HWND)lParam)
- break;
- // pobieramy temperatur� wpisan� do pola edycyjnego temperatury w Kelwinach
- GetWindowTextA(edit_K, buff, 10);
- temp_K = atof(buff); // konwertujemy pobrany tekst na liczb� (Kelwiny)
- temp_C = temp_K - 273.15; // przeliczamy temperatur� z Kelwin�w na Celsjusze
- temp_F = 1.8 * temp_C + 32; // przeliczamy temperatur� z Celsjuszy na Farenheity
- sprintf_s(buff, "%.2lf", temp_C); // konwertujemy przeliczon� temperatur� w Celsjuszach na tekst
- SetWindowTextA(edit_C, buff); // wpisujemy przeliczon� temperatur� w Celsjuszach do odpowiedniego pola edycyjnego
- sprintf_s(buff, "%.2lf", temp_F); // konwertujemy przeliczon� temperatur� w Farenheitach na tekst
- SetWindowTextA(edit_F, buff); // wpisujemy przeliczon� temperatur� w Farenheitach do odpowiedniego pola edycyjnego
- }break;
- case FAHRENHEIT:
- {
- // sprawdzamy czy klikni�ta kontrolka dalej ma focusa
- if (GetFocus() != (HWND)lParam)
- break;
- // pobieramy temperatur� wpisan� do pola edycyjnego temperatury w Farenheitach
- GetWindowTextA(edit_F, buff, 10);
- temp_F = atof(buff); // konwertujemy pobrany tekst na liczb� (Kelwiny)
- temp_C = (5.0 / 9.0) * (temp_F - 32); // przeliczamy temperatur� z Farenheit�w na Celsjusze
- temp_K = temp_C + 273.15; // przeliczamy temperatur� z Celsjuszy na Kelwiny
- sprintf_s(buff, "%.2lf", temp_C); // konwertujemy przeliczon� temperatur� w Celsjuszach na tekst
- SetWindowTextA(edit_C, buff); // wpisujemy przeliczon� temperatur� w Celsjuszach do odpowiedniego pola edycyjnego
- sprintf_s(buff, "%.2lf", temp_K); // konwertujemy przeliczon� temperatur� w Kelwinach na tekst
- SetWindowTextA(edit_K, buff); // wpisujemy przeliczon� temperatur� w Kelwinach do odpowiedniego pola edycyjnego
- }break;
- };
- }
- break;
- case WM_SIZE:
- {
- // Przy zmianie rozmiaru ustalamy nowe wymiary i po�o�enia element�w
- RECT windowRect;
- GetClientRect(hwnd, &windowRect); // pobieramy aktualne wymiary obszaru klienckiego
- int xEdit = (windowRect.right - 50) / 2; // wsp X pocz�tku p�l edycyjnych
- int y = 10; // wsp Y pocz�tku wszystkich p�l
- int xStatic = (windowRect.right - 190) / 2; // wsp X pocz�tku p�l telstowych statycznych
- int witdhEdit = 100; // szeroko�� p�l edycyjnych
- int height = 20; // wysoko�� wszystkich p�l
- int widthStatic = 70; // szeroko�� p�l statycznych
- // ustawianie pola statycznego i edycyjnego dotycz�cych temperatury Celsjusza
- MoveWindow(static_C, xStatic, y, widthStatic, height, TRUE);
- MoveWindow(edit_C, xEdit, y, witdhEdit, height, TRUE);
- // ustawianie pola statycznego i edycyjnego dotycz�cych temperatury Kelwina
- MoveWindow(static_K, xStatic, y += height + 10, widthStatic, height, TRUE);
- MoveWindow(edit_K, xEdit, y, witdhEdit, height, TRUE);
- // ustawianie pola statycznego i edycyjnego dotycz�cych temperatury Farenheita
- MoveWindow(static_F, xStatic, y += height + 10, widthStatic, height, TRUE);
- MoveWindow(edit_F, xEdit, y, witdhEdit, height, TRUE);
- }break;
- case WM_CLOSE:
- DestroyWindow(hwnd);
- break;
- case WM_DESTROY:
- PostQuitMessage(0);
- break;
- //Ustawianie minimalnego rozmiaru okna:
- case WM_GETMINMAXINFO:
- ((MINMAXINFO *)lParam)->ptMinTrackSize.x = 260; // minimalna szeroko��
- ((MINMAXINFO *)lParam)->ptMinTrackSize.y = 200; // minimalna wysoko��
- break;
- default:
- return DefWindowProc(hwnd, msg, wParam, lParam);
- }
- return 0;
- }
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
- {
- WNDCLASSEX window;
- HWND hwnd;
- MSG msg;
- TCHAR ClassName[] = TEXT("KlasaOkna");
- TCHAR WindowTitle[] = TEXT("Przeliczanie temperatur");
- window.cbClsExtra = NULL;
- window.cbSize = sizeof(WNDCLASSEX);
- window.cbWndExtra = NULL;
- window.hbrBackground = (HBRUSH)(COLOR_WINDOW);
- window.hCursor = LoadCursor(NULL, IDC_ARROW);
- window.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- window.hIconSm = NULL;
- window.hInstance = hInstance;
- window.lpfnWndProc = WndProc;
- window.lpszClassName = ClassName;
- window.lpszMenuName = 0;
- window.style = CS_VREDRAW | CS_HREDRAW;
- if (!RegisterClassEx(&window))
- return 0;
- hwnd = CreateWindowEx(WS_EX_WINDOWEDGE, ClassName, WindowTitle, WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 200, 300, NULL, NULL, hInstance, NULL);
- if (hwnd == NULL)
- {
- UnregisterClass(ClassName, hInstance);
- return 0;
- }
- ShowWindow(hwnd, nCmdShow);
- UpdateWindow(hwnd);
- while (GetMessage(&msg, NULL, 0, 0) > 0)
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- UnregisterClass(ClassName, hInstance);
- return msg.wParam;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement