Listing 2: ProgressThread.cpp
Creating a progress monitoring dialog
//============================================================================== // Multiple threads unsigned long g_lThreadID; HWND g_hProgDlg; // In your user command you can start to create the thread: #define WM_BEGIN_PROGRESS (WM_USER+100) #define WM_FINISHED (WM_USER+101) BOOL CALLBACK DlgProgressProc (HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); static unsigned __stdcall DeviceProgressThread(void *arg); BOOL MonitorDProgressThread (void); //================== Begin of Resource ===================================== // Move this to your resource file IDD_PROGRESS_DLG DIALOG DISCARDABLE 0, 0, 131, 67 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "ProgressDlg" FONT 9, "Tahoma" BEGIN RTEXT "Folder:",IDC_STATIC,5,7,26,9 LTEXT "",IDC_PATH,33,7,93,9 RTEXT "File:",IDC_STATIC_SCAN,9,21,22,8 LTEXT "",IDC_FILENAME,33,20,93,9 CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32", WS_BORDER,5,33,121,8 LTEXT "0 file(s) found",IDC_FILE_FOUND,10,46,65,8 PUSHBUTTON "Cancel",IDCANCEL,79,43,47,14 END //================= End of Resource =============================== int CreateProgressDlg () { int nRetVal = TRUE; if(!DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_PROGRESS_DLG), g_hWnd, <BR> (DLGPROC)DlgProgressProc)) nRetVal = FALSE; return nRetVal; } //in your dialog box call back function you will need to do: BOOL CALLBACK DlgProgressProc (HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) { BOOL bRtnVal = FALSE; switch (iMessage) { case WM_INITDIALOG: g_hProgDlg = hDlg; // Startup the thread to show the process PostMessage(hDlg, WM_BEGIN_PROGRESS, 0L, 0L); break; case WM_BEGIN_PROGRESS: CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)DeviceProgressThread, (LPVOID)0, 0, &g_lThreadID); break; case WM_FINISHED: EndDialog(hDlg, (int)lParam); break; } return bRtnVal; } unsigned __stdcall ProgressThreadAction (void *arg) { UNREFERENCED_PARAMETER(arg); BOOL bResult = MonitorDProgressThread (); PostMessage (g_hProgDlg, WM_FINISHED, 0L, bResult); ExitThread (bResult); return bResult; } BOOL MonitorDProgressThread () { BOOL bRtnVal = TRUE; TCHAR tchAttachments; DWORD dwUsed = 0; ULARGE_INTEGER ulBytes, ulTOfBytes, ulTOfFreeBytes; // TODO: Add your code here..... if(GetFileAttributes(TEXT("\\Storage Card")) != 0xFFFFFFFF) { if(GetDiskFreeSpaceEx(TEXT("\\Storage Card"), &ulBytesAvailable, &ulTOfBytes, &ulTOfFreeBytes)) { dwUsed+= (DWORD)ulTOfBytes.LowPart - ulBytes.LowPart; } } ..... return bRtnVal; } //End of File