Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции-ТРПС.doc
Скачиваний:
13
Добавлен:
15.11.2018
Размер:
810.5 Кб
Скачать

13.3. Вспомогательные функции

int InitApplication (LPCTSTR szClass) // Регистрация класса главного окна { WNDCLASS wc; ::ZeroMemory(&wc, sizeof(wc)); wc.style = 0; wc.lpfnWndProc = WndProc; wc.hInstance = g_hInst; wc.hIcon = ::LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = ::LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); wc.lpszClassName = szClass;

return ::RegisterClass(&wc); }

LPTSTR StrFromRC (int IDstr) // Загружает строку из ресурсов приложения. { static TCHAR szBuff[256]; ::LoadString(g_hInst, (UINT)IDstr, szBuff, sizeof(szBuff)); return szBuff; }

void ViewError (HWND hWnd) // Отображает сообщение о любой системной ошибке. { TCHAR szErrs[16*1024]; ::FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), szErrs, sizeof(szErrs), NULL);

::MessageBox((hWnd) ? hWnd : GetFocus(), szErrs, StrFromRC(IDS_ERROR), MB_OK | MB_ICONSTOP); }

void SwitchButton (HWND hWnd, TCHAR chMode) // "Переключает" кнопки, // скрывая одну и показывая другую. { HWND hButBeg = ::GetDlgItem(hWnd, ID_BUTT_BEG); HWND hButEnd = ::GetDlgItem(hWnd, ID_BUTT_END); if (!hButBeg || !hButEnd) return;

if (chMode == TEXT('B')) { ::ShowWindow(hButBeg, SW_SHOW); ::ShowWindow(hButEnd, SW_HIDE); } else { ::ShowWindow(hButBeg, SW_HIDE); ::ShowWindow(hButEnd, SW_SHOW); } }

HWND CreateListView (HWND hwndParent) // Создает элемент ListView { DWORD dwStyle = WS_CHILD | WS_BORDER | WS_TABSTOP | WS_VISIBLE | LVS_REPORT | LVS_NOSORTHEADER;

HWND hwndList = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, // class name TEXT(""), dwStyle, 0, 0, 0, 0, hwndParent, (HMENU)ID_LISTVIEW, g_hInst, NULL); if(!hwndList) return NULL;

ResizeListView(hwndList, hwndParent);

// Создаем 4 колонки. LV_COLUMN lvColumn; int col = 0; lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvColumn.fmt = LVCFMT_LEFT; lvColumn.cx = 240; lvColumn.pszText = TEXT("Файл"); ListView_InsertColumn(hwndList, col++, &lvColumn);

lvColumn.fmt = LVCFMT_LEFT; lvColumn.cx = 60; lvColumn.pszText = TEXT("Статус"); ListView_InsertColumn(hwndList, col++, &lvColumn);

lvColumn.fmt = LVCFMT_RIGHT; lvColumn.cx = 80; lvColumn.pszText = TEXT("Длина"); ListView_InsertColumn(hwndList, col++, &lvColumn);

lvColumn.fmt = LVCFMT_RIGHT; lvColumn.cx = 120; lvColumn.pszText = TEXT("Дата"); ListView_InsertColumn(hwndList, col++, &lvColumn);

return hwndList; }

void ResizeListView (HWND hwndList, HWND hwndParent) // Изменяет размеры элемента ListView { if (!hwndList) return;

RECT rc; int lr_offs = 8, top_offs = 36; ::GetClientRect(hwndParent, &rc); ::SetWindowPos (hwndList, NULL, lr_offs, top_offs, rc.right - rc.left - 2*lr_offs, rc.bottom - rc.top - lr_offs - top_offs, SWP_NOZORDER); }

void InitListView (HWND hwndList) // Инициализация элемента ListView { if (!hwndList) return;

ListView_DeleteAllItems(hwndList); ListView_SetItemCount(hwndList, 256); ::UpdateWindow(hwndList); }

int InsertListRow (HWND hwndList, NEW_FILE_DATA *pData) // Добавляет одну строку для элемента ListView { if (!hwndList) return -1;

LVITEM item; ::ZeroMemory(&item, sizeof(item)); item.mask = LVIF_TEXT; item.iItem = 0; item.pszText = pData->szName;

item.iItem = ListView_InsertItem(hwndList, &item);

if (item.iItem > -1) { item.iSubItem = 1; item.pszText = pData->szCheck; ListView_SetItem(hwndList, &item);

item.iSubItem = 2; item.pszText = pData->szLen; ListView_SetItem(hwndList, &item);

item.iSubItem = 3; item.pszText = pData->szDate; ListView_SetItem(hwndList, &item);

UINT mask = LVIS_FOCUSED | LVIS_SELECTED; ListView_SetItemState (hwndList, -1, 0, mask); ListView_SetItemState (hwndList, item.iItem, mask, mask); ListView_EnsureVisible(hwndList, item.iItem, FALSE); ::UpdateWindow(hwndList); }

return item.iItem; }

void UpdateCheckRow (HWND hwndList, int nItem, LPTSTR szCheck) // Обновляет колонку статуса для "nItem"-той строки { if (!hwndList || nItem < 0 || ListView_GetItemCount(hwndList) <= nItem) return;

LVITEM item; ::ZeroMemory(&item, sizeof(item)); item.mask = LVIF_TEXT; item.iItem = nItem; item.iSubItem = 1; item.pszText = szCheck; ListView_SetItem(hwndList, &item); ListView_EnsureVisible(hwndList, item.iItem, FALSE); ::UpdateWindow(hwndList); }