From 2486677738f4f984a60e1c34518d4827d154fb05 Mon Sep 17 00:00:00 2001 From: Shulga Konstantin Date: Wed, 16 Sep 2020 17:05:55 +0300 Subject: [PATCH 1/2] chore: add project files for the second lab --- Lab_2/Lab_2.sln | 31 +++++++ Lab_2/Lab_2/Lab_2.cpp | 78 ++++++++++++++++ Lab_2/Lab_2/Lab_2.vcxproj | 147 ++++++++++++++++++++++++++++++ Lab_2/Lab_2/Lab_2.vcxproj.filters | 22 +++++ 4 files changed, 278 insertions(+) create mode 100644 Lab_2/Lab_2.sln create mode 100644 Lab_2/Lab_2/Lab_2.cpp create mode 100644 Lab_2/Lab_2/Lab_2.vcxproj create mode 100644 Lab_2/Lab_2/Lab_2.vcxproj.filters diff --git a/Lab_2/Lab_2.sln b/Lab_2/Lab_2.sln new file mode 100644 index 0000000..5c0a6e1 --- /dev/null +++ b/Lab_2/Lab_2.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30309.148 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Lab_2", "Lab_2\Lab_2.vcxproj", "{347A8B03-40B8-4219-977E-6550BE4D640A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {347A8B03-40B8-4219-977E-6550BE4D640A}.Debug|x64.ActiveCfg = Debug|x64 + {347A8B03-40B8-4219-977E-6550BE4D640A}.Debug|x64.Build.0 = Debug|x64 + {347A8B03-40B8-4219-977E-6550BE4D640A}.Debug|x86.ActiveCfg = Debug|Win32 + {347A8B03-40B8-4219-977E-6550BE4D640A}.Debug|x86.Build.0 = Debug|Win32 + {347A8B03-40B8-4219-977E-6550BE4D640A}.Release|x64.ActiveCfg = Release|x64 + {347A8B03-40B8-4219-977E-6550BE4D640A}.Release|x64.Build.0 = Release|x64 + {347A8B03-40B8-4219-977E-6550BE4D640A}.Release|x86.ActiveCfg = Release|Win32 + {347A8B03-40B8-4219-977E-6550BE4D640A}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {91E0611B-8506-473F-B004-3EE512BA5016} + EndGlobalSection +EndGlobal diff --git a/Lab_2/Lab_2/Lab_2.cpp b/Lab_2/Lab_2/Lab_2.cpp new file mode 100644 index 0000000..e64e1e6 --- /dev/null +++ b/Lab_2/Lab_2/Lab_2.cpp @@ -0,0 +1,78 @@ +#include + +constexpr auto WINDOW_NAME = "Lab_2"; + +ATOM RegisterWindowClass(HINSTANCE); +BOOL InitWindowInstance(HINSTANCE, int); +LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); + +int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR cmdLine, int cmdShowMode) +{ + UNREFERENCED_PARAMETER(hPrevInstance); + UNREFERENCED_PARAMETER(cmdLine); + + MSG msg; + + RegisterWindowClass(hInstance); + + if (!InitWindowInstance(hInstance, cmdShowMode)) + return FALSE; + + while (GetMessage(&msg, NULL, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + return (int)msg.wParam; +} + +ATOM RegisterWindowClass(HINSTANCE hInstance) +{ + WNDCLASSEX windowClassEx; + + windowClassEx.cbSize = sizeof(WNDCLASSEX); + windowClassEx.style = CS_HREDRAW | CS_VREDRAW; + windowClassEx.lpfnWndProc = WndProc; + windowClassEx.cbClsExtra = 0; + windowClassEx.cbWndExtra = 0; + windowClassEx.hInstance = hInstance; + windowClassEx.hIcon = LoadIcon(0, IDI_WINLOGO);; + windowClassEx.hCursor = LoadCursor(0, IDC_ARROW); + windowClassEx.hbrBackground = (HBRUSH)(COLOR_WINDOW); + windowClassEx.lpszMenuName = 0; + windowClassEx.lpszClassName = WINDOW_NAME; + windowClassEx.hIconSm = 0; + + return RegisterClassEx(&windowClassEx); +} + +BOOL InitWindowInstance(HINSTANCE hInstance, int cmdShowMode) +{ + HWND hWnd; + + hWnd = CreateWindow(WINDOW_NAME, WINDOW_NAME, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); + + if (!hWnd) + return FALSE; + + ShowWindow(hWnd, cmdShowMode); + UpdateWindow(hWnd); + + return TRUE; +} + +LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_DESTROY: + PostQuitMessage(0); + return 0; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + + return 0; +} diff --git a/Lab_2/Lab_2/Lab_2.vcxproj b/Lab_2/Lab_2/Lab_2.vcxproj new file mode 100644 index 0000000..1de8592 --- /dev/null +++ b/Lab_2/Lab_2/Lab_2.vcxproj @@ -0,0 +1,147 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {347a8b03-40b8-4219-977e-6550be4d640a} + Lab2 + 10.0 + + + + Application + true + v142 + MultiByte + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/Lab_2/Lab_2/Lab_2.vcxproj.filters b/Lab_2/Lab_2/Lab_2.vcxproj.filters new file mode 100644 index 0000000..b3b5d3c --- /dev/null +++ b/Lab_2/Lab_2/Lab_2.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file From 24b8d8924c9ea352861aae76bef7ad1f1113fc65 Mon Sep 17 00:00:00 2001 From: Shulga Konstantin Date: Wed, 2 Dec 2020 18:15:00 +0300 Subject: [PATCH 2/2] feat: implement the second lab --- Lab_2/Lab_2/Lab_2.cpp | 88 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 82 insertions(+), 6 deletions(-) diff --git a/Lab_2/Lab_2/Lab_2.cpp b/Lab_2/Lab_2/Lab_2.cpp index e64e1e6..46c507d 100644 --- a/Lab_2/Lab_2/Lab_2.cpp +++ b/Lab_2/Lab_2/Lab_2.cpp @@ -1,16 +1,81 @@ #include +#include +#include + +using namespace std; + +#define BACKGROUND_COLOR COLOR_WINDOW constexpr auto WINDOW_NAME = "Lab_2"; +constexpr auto PATH_TO_FILE = "D:\\text.txt"; +constexpr auto NUM_OF_COLUMNS = 4; +constexpr auto NUM_OF_ROWS = 6; ATOM RegisterWindowClass(HINSTANCE); BOOL InitWindowInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); -int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR cmdLine, int cmdShowMode) +string _listOfData[NUM_OF_COLUMNS * NUM_OF_ROWS]; +int _userWindowWidth = 0; +int _userWindowHeight = 0; + +void GetDataFromFile() +{ + int requiredNumOfLines = NUM_OF_COLUMNS * NUM_OF_ROWS; + + ifstream file(PATH_TO_FILE); + + int i = 0; + while (getline(file, _listOfData[i]) && i < requiredNumOfLines) + i++; + + file.close(); +} + +void DrawTableWithText(HWND hWnd) { - UNREFERENCED_PARAMETER(hPrevInstance); - UNREFERENCED_PARAMETER(cmdLine); + RECT rect; + PAINTSTRUCT paintStruct; + HDC hdc = BeginPaint(hWnd, &paintStruct); + + int columnWidth = _userWindowWidth / NUM_OF_COLUMNS; + int tableHeight = 0; + + for (int i = 0; i < NUM_OF_ROWS; i++) + { + int currentMaxColumnHeight = 0; + + for (int j = 0; j < NUM_OF_COLUMNS; j++) + { + SetTextColor(hdc, RGB(128, 57, 30)); + + LPCSTR dataItem = _listOfData[NUM_OF_COLUMNS * i + j].c_str(); + int lengthOfDataItem = strlen(dataItem); + SetRect(&rect, j * columnWidth + 1, tableHeight + 1, (j + 1) * columnWidth - 1, _userWindowHeight); + int strHeight = DrawTextA(hdc, dataItem, lengthOfDataItem, &rect, DT_WORDBREAK); + + if (strHeight > currentMaxColumnHeight) + currentMaxColumnHeight = strHeight; + + } + + tableHeight += currentMaxColumnHeight; + + MoveToEx(hdc, 0, tableHeight, NULL); + LineTo(hdc, _userWindowWidth, tableHeight); + } + + for (int i = 1; i < NUM_OF_COLUMNS; i++) + { + int columnPosition = i * columnWidth; + MoveToEx(hdc, columnPosition, 0, NULL); + LineTo(hdc, columnPosition, tableHeight); + } +} + +int APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR cmdLine, _In_ int cmdShowMode) +{ MSG msg; RegisterWindowClass(hInstance); @@ -39,7 +104,7 @@ ATOM RegisterWindowClass(HINSTANCE hInstance) windowClassEx.hInstance = hInstance; windowClassEx.hIcon = LoadIcon(0, IDI_WINLOGO);; windowClassEx.hCursor = LoadCursor(0, IDC_ARROW); - windowClassEx.hbrBackground = (HBRUSH)(COLOR_WINDOW); + windowClassEx.hbrBackground = CreateSolidBrush(GetSysColor(BACKGROUND_COLOR)); windowClassEx.lpszMenuName = 0; windowClassEx.lpszClassName = WINDOW_NAME; windowClassEx.hIconSm = 0; @@ -58,7 +123,6 @@ BOOL InitWindowInstance(HINSTANCE hInstance, int cmdShowMode) return FALSE; ShowWindow(hWnd, cmdShowMode); - UpdateWindow(hWnd); return TRUE; } @@ -67,6 +131,18 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { + case WM_CREATE: + GetDataFromFile(); + break; + case WM_PAINT: + { + DrawTableWithText(hWnd); + break; + } + case WM_SIZE: + _userWindowWidth = LOWORD(lParam); + _userWindowHeight = HIWORD(lParam); + break; case WM_DESTROY: PostQuitMessage(0); return 0; @@ -75,4 +151,4 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) } return 0; -} +} \ No newline at end of file