windows 吗?Progress Bar Control 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);
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;
}