Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Progress Bar and wiNApi

1.8K
15 апреля 2006 года
Death Knight
139 / / 19.02.2006
Как с помощью WinApi Создать и подключить прогресс Бар к своей проге?
406
15 апреля 2006 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by Death Knight
Как с помощью WinApi Создать и подключить прогресс Бар к своей проге?



Вот пример из MSDN(у тя вообще он есть,ты им пользуешся?):

// 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);
// TODO: Write an error handler to check that all the
// requested data was read.
.
.
// 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;
}

1.8K
16 апреля 2006 года
Death Knight
139 / / 19.02.2006
Цитата:
Originally posted by vitaly2003s
Вот пример из MSDN(у тя вообще он есть,ты им пользуешся?):

// 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);
// TODO: Write an error handler to check that all the
// requested data was read.
.
.
// 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;
}



Спасибо. Буду пробовать, а MSDN у меня будет гдe-то через неделю, и то за January 2000.

406
16 апреля 2006 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by Death Knight
Спасибо. Буду пробовать, а MSDN у меня будет гдe-то через неделю, и то за January 2000.


Ниче страшного,все функции тебе нужные там будут.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог