На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Using Progress Bars



The following example shows how to use a progress bar to indicate the progress of a lengthy file-parsing operation. The example creates a progress bar and positions it along the bottom of the parent window's client area. The height of the progress bar is based on the height of the arrow bitmap used in a scroll bar. The range is based on the size of the file divided by 2048, which is the size of each "chunk" of data read from the file. The example also sets an increment and advances the current position of the progress bar by the increment after parsing each chunk.

// ParseALargeFile - parses a large file and uses a progress bar to
// indicate the progress of the parsing operation.
// Returns TRUE if successful or FALSE otherwise.
// hwndParent - parent window of the progress bar
// lpszFileName - name of the file to parse
//
// Global variable
// g_hinst - instance handle
extern HINSTANCE g_hinst;

BOOL ParseALargeFile(HWND hwndParent, LPSTR lpszFileName)
{
RECT rcClient; // client area of parent window

int cyVScroll; // height of scroll bar arrow
HWND hwndPB; // handle of progress bar
HANDLE hFile; // handle of file
DWORD cb; // size of file and count of bytes read
LPCH pch; // address of data read from file
LPCH pchTmp; // temporary pointer

// Ensure that the common control DLL is loaded and create a
// progress bar along the bottom of the client area of the
// parent window. Base the height of the progress bar on

// the height of a scroll bar arrow.
InitCommonControls();
GetClientRect(hwndParent, &rcClient);
cyVScroll = GetSystemMetrics(SM_CYVSCROLL);
hwndPB = CreateWindowEx(0, PROGRESS_CLASS, (LPSTR) NULL,
WS_CHILD | WS_VISIBLE, rcClient.left,
rcClient.bottom - cyVScroll,
rcClient.right, cyVScroll,
hwndParent, (HMENU) 0, g_hinst, NULL);

// Open the file for reading, and retrieve the size of the file.
hFile = CreateFile(lpszFileName, GENERIC_READ, FILE_SHARE_READ,

(LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL);

if (hFile == (HANDLE) INVALID_HANDLE_VALUE)
return FALSE;

cb = GetFileSize(hFile, (LPDWORD) NULL);

// Set the range and increment of the progress bar.
SendMessage(hwndPB, PBM_SETRANGE, 0, MAKELPARAM(0, cb / 2048));
SendMessage(hwndPB, PBM_SETSTEP, (WPARAM) 1, 0);

// Parse the file.
pch = (LPCH) LocalAlloc(LPTR, sizeof(char) * 2048);

pchTmp = pch;
do {
ReadFile(hFile, pchTmp, sizeof(char) * 2048, &cb,
(LPOVERLAPPED) NULL);
.
. // Include here any code that parses the file.
.

// Advance the current position of the progress bar
// by the increment.
SendMessage(hwndPB, PBM_STEPIT, 0, 0);
} while (cb);
CloseHandle((HANDLE) hFile);

DestroyWindow(hwndPB);
return TRUE;
}



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Использование Баров Прогресса



Следующий пример показывает как, чтобы использовать бар прогресса, чтобы указывать прогресс файлового синтаксического анализа длительного действия. Пример создает бар прогресса и позиционирует это вдоль низа области клиента родительского окна. Высота бара прогресса основана в высоте побитового отображения стрелы использованной в перемещать бар. Дипазон основан в размере файла поделенного к 2048, которое - размер каждого "куска" данных был прочитан из файла. Пример также устанавливает приращение и предоставляет текущую позицию зоны прогресса приращением после синтаксического анализа каждый кусок.

// ParseALargeFile - ВЫПОЛНЯЕТ грамматический разбор большой файл и использует зону прогресса, чтобы // указывать прогресс выполняющей грамматический разбор операции.
// ИСТИНА Возврата если успешный или ЛОЖНЫЙ в противном случае.
// hwndParent - Родительское окно зоны / прогресса/ lpszFileName - имя файла, чтобы выполняться грамматический разбор
//
// Глобальная переменная // g_hinst - ручка примера extern g_hinst HINSTANCE;

BOOL ParseALargeFile(HWND hwndParent, LPSTR lpszFileName)
{
RECT rcClient; // область клиента родительского окна

int cyVScroll; // высота перемещать стрелку зоны HWND hwndPB; // ручка РУЧКИ зоны прогресса hFile; // ручка cb файла DWORD; // размер файла и счета байтов были прочитаны pch LPCH; // адрес данных был прочитан из файла LPCH pchTmp; // временный указатель

// Проверьте, что общее управление DLL загружено и создано // развиваться зону вдоль низа области клиента // родительского окна. Базируйте высоту зоны прогресса на

// высота перемещает стрелку зоны.
InitCommonControls();
GetClientRect(hwndParent, &rcClient);
cyVScroll = GetSystemMetrics(SM_CYVSCROLL);
hwndPB = CreateWindowEx(0, PROGRESS_CLASS, (LPSTR) НЕДЕЙСТВИТЕЛЬНЫЙ, WS_CHILD | WS_VISIBLE, rcClient.left, rcClient.bottom - cyVScroll, rcClient.right, cyVScroll, hwndParent, (HMENU) 0, g_hinst, НЕДЕЙСТВИТЕЛЬНЫЙ);

// Открытый файл для чтения и извлекает размер файла.
hFile = CreateFile(lpszFileName, GENERIC_READ, FILE_SHARE_READ,

(LPSECURITY_ATTRIBUTES) НЕДЕЙСТВИТЕЛЬНЫЙ, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (РУЧКА) НЕДЕЙСТВИТЕЛЬНАЯ);

если (hFile == (РУЧКА) INVALID_HANDLE_VALUE) обратная ЛОЖЬ;

cb = GetFileSize(hFile, (LPDWORD) НЕДЕЙСТВИТЕЛЬНЫЙ);

// Установленный дипазон и приращение зоны прогресса.
SendMessage(hwndPB, PBM_SETRANGE, 0, MAKELPARAM(0, cb / 2048));
SendMessage(hwndPB, PBM_SETSTEP, (WPARAM) 1, 0);

// Выполнять грамматический разбор файл.
pch = (LPCH) LocalAlloc(LPTR, sizeof(символ) * 2048);

pchTmp = pch;
сделайте {
ReadFile(hFile, pchTmp, sizeof(СИМВОЛ) * 2048, &cb, (LPOVERLAPPED) НЕДЕЙСТВИТЕЛЬНЫЙ);
.
. // Включите здесь любой код, который выполняет грамматический разбор файл.
.

// Аванс текущая позиция зоны / прогресса/ приращением.
SendMessage(hwndPB, PBM_STEPIT, 0, 0);
} пока (cb);
CloseHandle((РУЧКА) hFile);

DestroyWindow(hwndPB);
возвращайтесь ВЕРНО;
}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz