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