///////////////////////////////////////////////////////////////////////////// // Copyright (C) 1993-1996 Microsoft Corporation. All Rights Reserved. // // MODULE: fldrprop.cpp // // PURPOSE: Implements the property sheets for news groups and mail // folders. // #include "pch.hxx" #include "resource.h" #include "fldrprop.h" #include #include #include "storutil.h" #include "storecb.h" #include "newsdlgs.h" #include "shared.h" #include "demand.h" ///////////////////////////////////////////////////////////////////////////// // Private types // // FOLDERPROP_INFO // // This struct contains the information needed to invoke and display the info // on a property sheet for a mail folder. typedef struct { //LPTSTR pszFolder; //CIMAPFolderMgr *pFM; //LPCFOLDERIDLIST pfidl; FOLDERID idFolder; HICON hIcon; BOOL fDirty; } FOLDERPROP_INFO, *PFOLDERPROP_INFO; // GROUPPROP_INFO // // This struct contains the information needed to invoke and display the info // on a property sheet for a news group. typedef struct { LPTSTR pszServer; LPTSTR pszGroup; FOLDERID idFolder; //LPCFOLDERIDLIST pfidl; //CSubList *pSubList; HICON hIcon; } GROUPPROP_INFO, *PGROUPPROP_INFO; ///////////////////////////////////////////////////////////////////////////// // Private function prototypes // INT_PTR CALLBACK GroupProp_GeneralDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); INT_PTR CALLBACK GroupProp_UpdateDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); INT_PTR CALLBACK FolderProp_GeneralDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); INT_PTR CALLBACK NewsProp_CacheDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL FolderProp_GetFolder(HWND hwnd, PFOLDERPROP_INFO pfpi, FOLDERID idFolder); ///////////////////////////////////////////////////////////////////////////// // // FUNCTION: GroupProp_Create() // // PURPOSE: Invokes a property sheet which displays properties for the // specified group. // // PARAMETERS: // hwndParent - Handle of the window that should be the dialog's // parent. // pfidl - fully qualified pidl to the newsgroup // // RETURN VALUE: // TRUE - The dialog was successfully displayed // FALSE - The dialog failed. // BOOL GroupProp_Create(HWND hwndParent, FOLDERID idFolder, BOOL fUpdatePage) { GROUPPROP_INFO gpi; BOOL fReturn; HIMAGELIST himl, himlSmall; HICON hIcon, hIconSmall; FOLDERINFO Folder; FOLDERINFO Store; LONG iIcon; PROPSHEETPAGE psp[3], *ppsp; PROPSHEETHEADER psh; Assert(IsWindow(hwndParent)); fReturn = FALSE; if (FAILED(g_pStore->GetFolderInfo(idFolder, &Folder))) return FALSE; if (FAILED(GetFolderStoreInfo(Folder.idFolder, &Store))) { g_pStore->FreeRecord(&Folder); return FALSE; } iIcon = GetFolderIcon(&Folder); // TODO: we should probably just have a global image list for this... himl = ImageList_LoadBitmap(g_hLocRes, MAKEINTRESOURCE(idbFoldersLarge), 32, 0, RGB(255, 0, 255)); if (himl != NULL) { hIcon = ImageList_GetIcon(himl, GetFolderIcon(&Folder), ILD_NORMAL); if (hIcon != NULL) { himlSmall = ImageList_LoadBitmap(g_hLocRes, MAKEINTRESOURCE(idbFolders), 16, 0, RGB(255, 0, 255)); if (himlSmall != NULL) { hIconSmall = ImageList_GetIcon(himlSmall, iIcon, ILD_NORMAL); if (hIconSmall != NULL) { gpi.pszServer = Store.pszName; gpi.pszGroup = Folder.pszName; gpi.idFolder = idFolder; gpi.hIcon = hIcon; ppsp = psp; ZeroMemory(psp, sizeof(psp)); ppsp->dwSize = sizeof(PROPSHEETPAGE); ppsp->dwFlags = PSP_DEFAULT; ppsp->hInstance = g_hLocRes; ppsp->pszTemplate = MAKEINTRESOURCE(iddGroupProp_General); ppsp->pfnDlgProc = GroupProp_GeneralDlgProc; ppsp->lParam = (LPARAM) &gpi; ppsp++; if (!!(Folder.dwFlags & FOLDER_SUBSCRIBED)) { ppsp->dwSize = sizeof(PROPSHEETPAGE); ppsp->dwFlags = PSP_DEFAULT; ppsp->hInstance = g_hLocRes; ppsp->pszTemplate = MAKEINTRESOURCE(iddGroupProp_Update); ppsp->pfnDlgProc = GroupProp_UpdateDlgProc; ppsp->lParam = (LPARAM) &gpi; ppsp++; } else { fUpdatePage = FALSE; } ppsp->dwSize = sizeof(PROPSHEETPAGE); ppsp->dwFlags = PSP_DEFAULT; ppsp->hInstance = g_hLocRes; ppsp->pszTemplate = MAKEINTRESOURCE(iddNewsProp_Cache); ppsp->pfnDlgProc = NewsProp_CacheDlgProc; ppsp->lParam = (LPARAM) &gpi; ppsp++; psh.dwSize = sizeof(PROPSHEETHEADER); psh.dwFlags = PSH_USEHICON | PSH_PROPSHEETPAGE | PSH_PROPTITLE | PSH_USEPAGELANG; psh.hwndParent = hwndParent; psh.hInstance = g_hLocRes; psh.hIcon = hIconSmall; psh.pszCaption = gpi.pszGroup; psh.nPages = (int) (ppsp - psp); psh.nStartPage = fUpdatePage ? 1 : 0; psh.ppsp = psp; fReturn = (0 != PropertySheet(&psh)); DestroyIcon(hIconSmall); } ImageList_Destroy(himlSmall); } DestroyIcon(hIcon); } ImageList_Destroy(himl); } g_pStore->FreeRecord(&Folder); g_pStore->FreeRecord(&Store); return (fReturn); } // // FUNCTION: FolderProp_Create() // // PURPOSE: Invokes a property sheet which displays properties for the // specified folder. // // PARAMETERS: // hwndParent - Handle of the window that should be the dialog's // parent. // pfidl - fully qualified pidl to the folder // // RETURN VALUE: // TRUE - The dialog was successfully displayed // FALSE - The dialog failed. // BOOL FolderProp_Create(HWND hwndParent, FOLDERID idFolder) { FOLDERPROP_INFO fpi = {0}; GROUPPROP_INFO gpi = {0}; BOOL fReturn; HIMAGELIST himl, himlSmall; HICON hIcon, hIconSmall; LONG iIcon; FOLDERINFO Folder; PROPSHEETPAGE psp[3], *ppsp; PROPSHEETHEADER psh; Assert(IsWindow(hwndParent)); fReturn = FALSE; if (FAILED(g_pStore->GetFolderInfo(idFolder, &Folder))) return FALSE; iIcon = GetFolderIcon(&Folder); // TODO: we should probably just have a global image list for this... himl = ImageList_LoadBitmap(g_hLocRes, MAKEINTRESOURCE(idbFoldersLarge), 32, 0, RGB(255, 0, 255)); if (himl != NULL) { hIcon = ImageList_GetIcon(himl, iIcon, ILD_NORMAL); if (hIcon != NULL) { himlSmall = ImageList_LoadBitmap(g_hLocRes, MAKEINTRESOURCE(idbFolders), 16, 0, RGB(255, 0, 255)); if (himlSmall != NULL) { hIconSmall = ImageList_GetIcon(himlSmall, iIcon, ILD_NORMAL); if (hIconSmall != NULL) { if (FolderProp_GetFolder(hwndParent, &fpi, idFolder)) { fpi.hIcon = hIcon; fpi.fDirty = FALSE; fpi.idFolder = idFolder; ppsp = psp; ZeroMemory(psp, sizeof(psp)); ppsp->dwSize = sizeof(PROPSHEETPAGE); ppsp->dwFlags = PSP_DEFAULT; ppsp->hInstance = g_hLocRes; ppsp->pszTemplate = MAKEINTRESOURCE(iddFolderProp_General); ppsp->pfnDlgProc = FolderProp_GeneralDlgProc; ppsp->lParam = (LPARAM) &fpi; ppsp++; if (Folder.tyFolder != FOLDER_LOCAL) { gpi.hIcon = fpi.hIcon; gpi.idFolder = fpi.idFolder; ppsp->dwSize = sizeof(PROPSHEETPAGE); ppsp->dwFlags = PSP_DEFAULT; ppsp->hInstance = g_hLocRes; ppsp->pszTemplate = MAKEINTRESOURCE(iddFolderProp_Update); ppsp->pfnDlgProc = GroupProp_UpdateDlgProc; ppsp->lParam = (LPARAM) &gpi; ppsp++; ppsp->dwSize = sizeof(PROPSHEETPAGE); ppsp->dwFlags = PSP_DEFAULT; ppsp->hInstance = g_hLocRes; ppsp->pszTemplate = MAKEINTRESOURCE(iddNewsProp_Cache); ppsp->pfnDlgProc = NewsProp_CacheDlgProc; ppsp->lParam = (LPARAM) &gpi; ppsp++; } psh.dwSize = sizeof(PROPSHEETHEADER); psh.dwFlags = PSH_USEHICON | PSH_PROPSHEETPAGE | PSH_PROPTITLE | PSH_USEPAGELANG; psh.hwndParent = hwndParent; psh.hInstance = g_hLocRes; psh.hIcon = hIconSmall; psh.pszCaption = Folder.pszName; psh.nPages = (int) (ppsp - psp); psh.nStartPage = 0; psh.ppsp = psp; fReturn = (0 != PropertySheet(&psh)); } DestroyIcon(hIconSmall); } ImageList_Destroy(himlSmall); } DestroyIcon(hIcon); } ImageList_Destroy(himl); } g_pStore->FreeRecord(&Folder); return (fReturn); } INT_PTR CALLBACK GroupProp_GeneralDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { PGROUPPROP_INFO pgpi = (PGROUPPROP_INFO) GetWindowLongPtr(hwnd, DWLP_USER); TCHAR szBuffer[CCHMAX_STRINGRES]; TCHAR szRes[CCHMAX_STRINGRES]; FOLDERINFO Folder; switch (uMsg) { case WM_INITDIALOG: // Stuff the group name and server name into the dialog's extra bytes pgpi = (PGROUPPROP_INFO) ((PROPSHEETPAGE*) lParam)->lParam; SetWindowLongPtr(hwnd, DWLP_USER, (LPARAM) pgpi); // Intl Stuff SetIntlFont(GetDlgItem(hwnd, IDC_FOLDER_FILE)); // Fill in what blanks we know SetDlgItemText(hwnd, IDC_GROUPNAME_STATIC, pgpi->pszGroup); // Put a default value into the string first AthLoadString(idsGroupPropStatusDef, szBuffer, ARRAYSIZE(szBuffer)); // Get the folder info if (SUCCEEDED(g_pStore->GetFolderInfo(pgpi->idFolder, &Folder))) { // Is there a file if (Folder.pszFile) { // Locals CHAR szRootDir[MAX_PATH]; // Get the store root if (SUCCEEDED(GetStoreRootDirectory(szRootDir, ARRAYSIZE(szRootDir)))) { // Locals CHAR szFilePath[MAX_PATH + MAX_PATH]; // Make the file path if (SUCCEEDED(MakeFilePath(szRootDir, Folder.pszFile, c_szEmpty, szFilePath, ARRAYSIZE(szFilePath)))) SetDlgItemText(hwnd, IDC_FOLDER_FILE, szFilePath); } } // Load the status string and fill in the blanks AthLoadString(idsFolderPropStatus, szRes, ARRAYSIZE(szRes)); // Format the string wnsprintf(szBuffer, ARRAYSIZE(szBuffer), szRes, Folder.cMessages, Folder.cUnread); // Cleanup g_pStore->FreeRecord(&Folder); } // Set the group status info SetDlgItemText(hwnd, IDC_STATUS_STATIC, szBuffer); // Set the icon correctly SendDlgItemMessage(hwnd, IDC_FOLDER_ICON, STM_SETICON, (WPARAM)pgpi->hIcon, 0); return (TRUE); } return (FALSE); } INT_PTR CALLBACK GroupProp_UpdateDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { PGROUPPROP_INFO pgpi = (PGROUPPROP_INFO) GetWindowLongPtr(hwnd, DWLP_USER); BOOL fEnabled; DWORD dwFlags; FOLDERINFO Folder; switch (uMsg) { case WM_INITDIALOG: // Stuff the group name and server name into the dialog's extra bytes pgpi = (PGROUPPROP_INFO) ((PROPSHEETPAGE*) lParam)->lParam; SetWindowLongPtr(hwnd, DWLP_USER, (LPARAM) pgpi); // Get the Folder Info if (SUCCEEDED(g_pStore->GetFolderInfo(pgpi->idFolder, &Folder))) { fEnabled = (Folder.dwFlags & (FOLDER_DOWNLOADHEADERS | FOLDER_DOWNLOADNEW | FOLDER_DOWNLOADALL)); Button_SetCheck(GetDlgItem(hwnd, IDC_GET_CHECK), fEnabled); Button_Enable(GetDlgItem(hwnd, IDC_NEWHEADERS_RADIO), fEnabled); Button_Enable(GetDlgItem(hwnd, IDC_NEWMSGS_RADIO), fEnabled); Button_Enable(GetDlgItem(hwnd, IDC_ALLMSGS_RADIO), fEnabled); // Check the right radio button if (fEnabled) { if (Folder.dwFlags & FOLDER_DOWNLOADHEADERS) Button_SetCheck(GetDlgItem(hwnd, IDC_NEWHEADERS_RADIO), TRUE); else if (Folder.dwFlags & FOLDER_DOWNLOADNEW) Button_SetCheck(GetDlgItem(hwnd, IDC_NEWMSGS_RADIO), TRUE); else if (Folder.dwFlags & FOLDER_DOWNLOADALL) Button_SetCheck(GetDlgItem(hwnd, IDC_ALLMSGS_RADIO), TRUE); } else { Button_SetCheck(GetDlgItem(hwnd, IDC_NEWHEADERS_RADIO), TRUE); } g_pStore->FreeRecord(&Folder); } return (TRUE); case WM_COMMAND: switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDC_GET_CHECK: // Check to see whether this is actually checked or not fEnabled = Button_GetCheck(GET_WM_COMMAND_HWND(wParam, lParam)); // Enable or disable the radio buttons Button_Enable(GetDlgItem(hwnd, IDC_NEWHEADERS_RADIO), fEnabled); Button_Enable(GetDlgItem(hwnd, IDC_NEWMSGS_RADIO), fEnabled); Button_Enable(GetDlgItem(hwnd, IDC_ALLMSGS_RADIO), fEnabled); // Fall through... case IDC_NEWHEADERS_RADIO: case IDC_NEWMSGS_RADIO: case IDC_ALLMSGS_RADIO: PropSheet_Changed(GetParent(hwnd), hwnd); return (TRUE); } return (FALSE); case WM_NOTIFY: switch (((NMHDR FAR *) lParam)->code) { case PSN_APPLY: if (SUCCEEDED(g_pStore->GetFolderInfo(pgpi->idFolder, &Folder))) { dwFlags = Folder.dwFlags; // Remove the previous flags Folder.dwFlags &= ~(FOLDER_DOWNLOADHEADERS | FOLDER_DOWNLOADNEW | FOLDER_DOWNLOADALL); if (Button_GetCheck(GetDlgItem(hwnd, IDC_GET_CHECK))) { if (Button_GetCheck(GetDlgItem(hwnd, IDC_NEWHEADERS_RADIO))) Folder.dwFlags |= FOLDER_DOWNLOADHEADERS; else if (Button_GetCheck(GetDlgItem(hwnd, IDC_NEWMSGS_RADIO))) Folder.dwFlags |= FOLDER_DOWNLOADNEW; else if (Button_GetCheck(GetDlgItem(hwnd, IDC_ALLMSGS_RADIO))) Folder.dwFlags |= FOLDER_DOWNLOADALL; } if (Folder.dwFlags != dwFlags) g_pStore->UpdateRecord(&Folder); g_pStore->FreeRecord(&Folder); } PropSheet_UnChanged(GetParent(hwnd), hwnd); SetDlgMsgResult(hwnd, WM_NOTIFY, PSNRET_NOERROR); return (TRUE); } return (FALSE); } return (FALSE); } INT_PTR CALLBACK FolderProp_GeneralDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { PFOLDERPROP_INFO pfpi = (PFOLDERPROP_INFO) GetWindowLongPtr(hwnd, DWLP_USER); TCHAR szBuffer[CCHMAX_STRINGRES]; TCHAR szRes[CCHMAX_STRINGRES]; TCHAR szRes2[64]; TCHAR szFldr[CCHMAX_FOLDER_NAME + 1]; FOLDERINFO Folder; HRESULT hr; HWND hwndEdit; HLOCK hLock; switch (uMsg) { case WM_INITDIALOG: // Stuff the folder name into the dialog's extra bytes pfpi = (PFOLDERPROP_INFO) ((PROPSHEETPAGE*) lParam)->lParam; SetWindowLongPtr(hwnd, DWLP_USER, (LPARAM) pfpi); // Put a default value into the string AthLoadString(idsFolderPropStatusDef, szBuffer, ARRAYSIZE(szBuffer)); hwndEdit = GetDlgItem(hwnd, IDC_FOLDERNAME_EDIT); SetIntlFont(hwndEdit); SetIntlFont(GetDlgItem(hwnd, IDC_FOLDER_FILE)); if (SUCCEEDED(g_pStore->GetFolderInfo(pfpi->idFolder, &Folder))) { if (Folder.pszFile) { CHAR szRootDir[MAX_PATH]; if (SUCCEEDED(GetStoreRootDirectory(szRootDir, ARRAYSIZE(szRootDir)))) { CHAR szFilePath[MAX_PATH + MAX_PATH]; if (SUCCEEDED(MakeFilePath(szRootDir, Folder.pszFile, c_szEmpty, szFilePath, ARRAYSIZE(szFilePath)))) SetDlgItemText(hwnd, IDC_FOLDER_FILE, szFilePath); } } AthLoadString(idsFolderPropStatus, szRes, ARRAYSIZE(szRes)); wnsprintf(szBuffer, ARRAYSIZE(szBuffer), szRes, Folder.cMessages, Folder.cUnread); if (FOLDER_IMAP != Folder.tyFolder && Folder.tySpecial == FOLDER_NOTSPECIAL) { SendMessage(hwndEdit, EM_SETREADONLY, (WPARAM)FALSE, 0); SendMessage(hwndEdit, EM_LIMITTEXT, CCHMAX_FOLDER_NAME, 0); } SetWindowText(hwndEdit, Folder.pszName); g_pStore->FreeRecord(&Folder); } // Set the group status info SetDlgItemText(hwnd, IDC_STATUS_STATIC, szBuffer); // Need to set the specified icon SendDlgItemMessage(hwnd, IDC_FOLDER_ICON, STM_SETICON, (WPARAM)pfpi->hIcon, 0); pfpi->fDirty = FALSE; return (TRUE); case WM_COMMAND: if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE) { PropSheet_Changed(GetParent(hwnd), hwnd); pfpi->fDirty = TRUE; } break; case WM_NOTIFY: NMHDR* pnmhdr = (NMHDR*) lParam; switch (pnmhdr->code) { case PSN_APPLY: // Bug #13121 - Only try to change the folder name if the // the propsheet is dirty. if (pfpi->fDirty) { GetDlgItemText(hwnd, IDC_FOLDERNAME_EDIT, szFldr, sizeof(szFldr) / sizeof(TCHAR)); if (!FAILED(hr = RenameFolderProgress(hwnd, pfpi->idFolder, szFldr, NOFLAGS))) SetDlgMsgResult(hwnd, WM_NOTIFY, PSNRET_NOERROR); else AthErrorMessageW(hwnd, MAKEINTRESOURCEW(idsAthenaMail), MAKEINTRESOURCEW(idsErrRenameFld), hr); pfpi->fDirty = FALSE; } return (0); case PSN_KILLACTIVE: SetDlgMsgResult(hwnd, WM_NOTIFY, 0L); return (0); } break; } return (FALSE); } // // FUNCTION: FolderProp_GetFolder() // // PURPOSE: This function is used by the Folder Property dialog to get // the store object and folder handle for callers who did not // already provide this information. // // PARAMETERS: // hwnd - Handle of the property sheet window // pfpi - Pointer to the FOLDERPROP_INFO struct that stores the prop // sheet's information. // pfidl - fully qualified pidl of folder // pfidlLeaf - leaf pidl of folder // // RETURN VALUE: // TRUE - The information was retrieved // FALSE - The information was not available // BOOL FolderProp_GetFolder(HWND hwnd, PFOLDERPROP_INFO pfpi, FOLDERID idFolder) { pfpi->idFolder = idFolder; return (TRUE); } INT_PTR CALLBACK NewsProp_CacheDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { FOLDERINFO Folder; PGROUPPROP_INFO pgpi = (PGROUPPROP_INFO) GetWindowLongPtr(hwnd, DWLP_USER); CHAR szRes[255]; CHAR szMsg[255 + 255]; switch (uMsg) { case WM_INITDIALOG: // Stuff the group name and server name into the dialog's extra bytes pgpi = (PGROUPPROP_INFO) ((PROPSHEETPAGE*) lParam)->lParam; SetWindowLongPtr(hwnd, DWLP_USER, (LPARAM) pgpi); SendDlgItemMessage(hwnd, IDC_FOLDER_ICON, STM_SETICON, (WPARAM)pgpi->hIcon, 0); // Disable the Reset button EnableWindow(GetDlgItem(hwnd, idbReset), FALSE); // Get the folder information if (SUCCEEDED(g_pStore->GetFolderInfo(pgpi->idFolder, &Folder))) { // News if (FOLDER_NEWS == Folder.tyFolder) { // If Its news, enable the EnableWindow(GetDlgItem(hwnd, idbReset), TRUE); } // Free the Folder Infp g_pStore->FreeRecord(&Folder); } // Locals DisplayFolderSizeInfo(hwnd, RECURSE_INCLUDECURRENT, pgpi->idFolder); // Done break; case WM_COMMAND: BOOL fRet = FALSE; UINT nCmd = GET_WM_COMMAND_ID(wParam, lParam); HCURSOR hCur = SetCursor(LoadCursor(NULL, IDC_WAIT)); // Bug 12513. Need to disable button, when process command switch (GET_WM_COMMAND_ID(wParam, lParam)) { case idbCompactCache: { if (SUCCEEDED(CleanupFolder(GetParent(hwnd), RECURSE_INCLUDECURRENT, pgpi->idFolder, CLEANUP_COMPACT))) DisplayFolderSizeInfo(hwnd, RECURSE_INCLUDECURRENT, pgpi->idFolder); fRet = TRUE; } break; case idbRemove: case idbReset: case idbDelete: { // Get Folder Info if (SUCCEEDED(g_pStore->GetFolderInfo(pgpi->idFolder, &Folder))) { // Get Command UINT idCommand=GET_WM_COMMAND_ID(wParam, lParam); UINT idString; CLEANUPFOLDERTYPE tyCleanup; // Remove if (idbRemove == idCommand) { idString = idsConfirmDelBodies; tyCleanup = CLEANUP_REMOVEBODIES; } // Delete else if (idbDelete == idCommand) { idString = idsConfirmDelMsgs; tyCleanup = CLEANUP_DELETE; } // Remove else { Assert(idbReset == idCommand); idString = idsConfirmReset; tyCleanup = CLEANUP_RESET; } // Load the String AthLoadString(idString, szRes, ARRAYSIZE(szRes)); // Format with the Folder Name wnsprintf(szMsg, ARRAYSIZE(szMsg), szRes, Folder.pszName); // Confirm if (IDYES == AthMessageBox(hwnd, MAKEINTRESOURCE(idsAthena), szMsg, NULL, MB_YESNO | MB_ICONEXCLAMATION)) { // Cleanup the Folder if (SUCCEEDED(CleanupFolder(hwnd, RECURSE_INCLUDECURRENT, pgpi->idFolder, tyCleanup))) { // Reset Information DisplayFolderSizeInfo(hwnd, RECURSE_INCLUDECURRENT, pgpi->idFolder); } } // Free Folder Information g_pStore->FreeRecord(&Folder); } // Message Handled fRet = TRUE; } break; } SetCursor(hCur); if(fRet) return 1; break; } return (FALSE); }