📄 ext32dlg.cpp
字号:
int i;
char *Tmp;
_getdcwd(_getdrive(), cPath, _MAX_PATH);
::SetWindowText(ghDispFold, cPath);
if(!gbStopThread){
for(i=0; i<NumFileSpec; i++){
if((FFHan = FindFirstFile(FileSpec, &FindStruct)) != INVALID_HANDLE_VALUE){
if((FindStruct.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)==0){
ProcessExt(&FindStruct);
gdNumFiles++;
}
}
if(FFHan != NULL){
while(FindNextFile(FFHan, &FindStruct) && !gbStopThread){
if((FindStruct.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)==0){
ProcessExt(&FindStruct);
gdNumFiles++;
}
}
FindClose(FFHan);
}
}
if(!gbSubDir)
return;
if((FFHan = FindFirstFile("*.*", &FindStruct)) == INVALID_HANDLE_VALUE){
_chdir(".."); //Now find the directories
return;
}
do{
Tmp = ((FindStruct.cAlternateFileName[0] == 0) ? \
(char *)&(FindStruct.cFileName):(char *)&(FindStruct.cAlternateFileName));
if(((FindStruct.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0) && (Tmp[0] != '.')){
//If the path could be found then enter it!
if(!_chdir(FindStruct.cFileName))
OurFindFile(FileSpec, NumFileSpec);
}
}while(FindNextFile(FFHan, &FindStruct) && !gbStopThread);
FindClose(FFHan);
}
_chdir("..");
return;
}
void ProcessExt(WIN32_FIND_DATA *ff)
{
char Ext[4]={" "};
char *Tmp;
int i;
Tmp = ((ff->cAlternateFileName[0] == 0) ? (char *)&(ff->cFileName):(char *)&(ff->cAlternateFileName));
for(i=0;i<13;i++){
if (Tmp[i]=='.' || Tmp[i]==0)
break;
}
if(Tmp[i]=='.'){
strcpy(Ext, &Tmp[i+1]);
}
UpdateExt(Ext, ff);
}
void UpdateExt(char *Exten, WIN32_FIND_DATA *ff)
{
EXTINFO *pTempExt = gpExtMem;
int i;
unsigned long TmpVal;
// HICON hIcon;
SHFILEINFO psfi;
for(i=0; i<gdNumExt; i++)
{
if (!strcmp(pTempExt->Extens, Exten))
{
//Now the string comparison succeeds
pTempExt->ExtSize += ff->nFileSizeLow;
pTempExt->ExtClust += ff->nFileSizeLow%gdBytesPerClust ? (ff->nFileSizeLow/gdBytesPerClust+1)*gdBytesPerClust:ff->nFileSizeLow;
pTempExt->ExtCount++;
return;
}
pTempExt++;
}
unsigned short j=0;
// hIcon = ExtractAssociatedIcon(ghInstance, ff->cFileName, &j);
SHGetFileInfo(ff->cFileName, 0, &psfi, sizeof(SHFILEINFO), SHGFI_TYPENAME|SHGFI_ICON|SHGFI_SYSICONINDEX|SHGFI_LARGEICON);
if(!psfi.hIcon)
ghImageList.Add(hIconMain);
else
ghImageList.Add(psfi.hIcon);
strcpy(pTempExt->cType, psfi.szTypeName);
strcpy(pTempExt->Extens, Exten);
pTempExt->ExtSize += ff->nFileSizeLow;
pTempExt->ExtClust += ff->nFileSizeLow%gdBytesPerClust ? (ff->nFileSizeLow/gdBytesPerClust+1)*gdBytesPerClust:ff->nFileSizeLow;
pTempExt->ExtCount++;
gdNumExt++;
char TmpStr[10];
wsprintf(TmpStr, "%u", gdNumExt);
::SetWindowText(ghNumExt, TmpStr);
}
void PrintExtInfo(void)
{
EXTINFO *pTempExt = gpExtMem;
int Ext=0;
DWORD ldBytes=0, ldBytesDisk=0;
LV_ITEM lvI; // list view item structure
for(int i=0; i<gdNumExt; i++){
lvI.mask = LVIF_TEXT | LVIF_IMAGE |LVIF_STATE |LVIF_PARAM;
lvI.iItem = i;
lvI.iSubItem = EXTNAME;
lvI.pszText = LPSTR_TEXTCALLBACK; //pTempExt->Extens;
lvI.cchTextMax = MAX_PATH; //4;
lvI.iImage = i;
lvI.state = 0;
lvI.stateMask = 0;
lvI.lParam = (LPARAM) &(pTempExt[i]);
gdTotClust += ((EXTINFO *)lvI.lParam)->ExtClust;
m_ListCtrl.InsertItem(&lvI);
lvI.iSubItem = EXTSIZE;
m_ListCtrl.SetItemText(i, EXTSIZE, LPSTR_TEXTCALLBACK);
lvI.iSubItem = EXTCOUNT;
m_ListCtrl.SetItemText(i, EXTCOUNT, LPSTR_TEXTCALLBACK);
lvI.iSubItem = EXTCLUST;
m_ListCtrl.SetItemText(i, EXTCLUST, LPSTR_TEXTCALLBACK);
lvI.iSubItem = EXTTYPE;
m_ListCtrl.SetItemText(i, EXTTYPE, LPSTR_TEXTCALLBACK);
}
}
/****************************************************************************
*
* FUNCTION: NotifyHandler(HWND, UINT, UINT, LONG)
*
* PURPOSE: This function is the handler for the WM_NOTIFY that is
* sent to the parent of the list view window.
*
****************************************************************************/
LRESULT CExt32Dlg::NotifyHandler(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LV_DISPINFO *pLvdi = (LV_DISPINFO *)lParam;
NM_LISTVIEW *pNm = (NM_LISTVIEW *)lParam;
EXTINFO *pExt = (EXTINFO *)(pLvdi->item.lParam);
static char szText[10];
switch(pLvdi->hdr.code)
{
case LVN_GETDISPINFO:
switch (pLvdi->item.iSubItem)
{
case EXTNAME:
pLvdi->item.pszText = pExt->Extens;
break;
case EXTSIZE:
wsprintf(szText, "%lu", pExt->ExtSize);
pLvdi->item.pszText = szText;
break;
case EXTCOUNT:
wsprintf(szText, "%lu", pExt->ExtCount);
pLvdi->item.pszText = szText;
break;
case EXTCLUST:
wsprintf(szText, "%lu", pExt->ExtClust);
pLvdi->item.pszText = szText;
break;
case EXTTYPE:
pLvdi->item.pszText = pExt->cType;
break;
default:
break;
}
break;
/* case LVN_BEGINLABELEDIT:
{
HWND hWndEdit;
// Get the handle to the edit box.
hWndEdit = (HWND)SendMessage(hWnd, LVM_GETEDITCONTROL,
0, 0);
// Limit the amount of text that can be entered.
SendMessage(hWndEdit, EM_SETLIMITTEXT, (WPARAM)20, 0);
}
break;
case LVN_ENDLABELEDIT:
// Save the new label information
if ((pLvdi->item.iItem != -1) &&
(pLvdi->item.pszText != NULL))
lstrcpy(pExt->szAddress, pLvdi->item.pszText);
break; */
case LVN_COLUMNCLICK:
// The user clicked a column header - sort by this criterion.
gbAscOrder = ~gbAscOrder;
m_ListCtrl.SortItems(ListViewCompareProc, (LPARAM)(pNm->iSubItem));
break;
// case LVN_HOTTRACK:
// return 1;
case LVN_ITEMCHANGED:
{
LVITEM lv;
char cExtSize[10];
int i;
char TmpStr[100];
UINT uExtSize = 0;
/* for(i=0;i<gdNumExt;i++){
if(m_ListCtrl.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED){
lv.iSubItem = EXTCLUST;
lv.iItem = i;
lv.mask = LVIF_TEXT;
lv.pszText = cExtSize;
::SendMessage(m_ListCtrl.m_hWnd, LVM_GETITEMTEXT, i, (LPARAM)&lv);
uExtSize += atoi(lv.pszText);
}
}*/
wsprintf(TmpStr, "%d Extensions found, %lu Kb Real Filesize, %lu Files", gdNumExt,
gdTotClust/1024, gdNumFiles);
::SetWindowText(ghDispFold, TmpStr);
}
break;
// case LVN_ITEMACTIVATE:{
// char TmpStr[20];
// m_ListCtrl.DeleteItem(0);
// wsprintf(TmpStr, "lParam %d", lParam);
// AfxMessageBox(TmpStr);
// }
// break;
default:
break;
}
return 0L;
}
LRESULT CExt32Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == WM_NOTIFY)
NotifyHandler(message, wParam, lParam);
return CDialog::WindowProc(message, wParam, lParam);
}
/****************************************************************************
*
* FUNCTION: ListViewCompareProc(LPARAM, LPARAM, LPARAM)
*
* PURPOSE: Callback function that sorts depending on the column click
*
****************************************************************************/
int CALLBACK CExt32Dlg::ListViewCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
EXTINFO *pExt1 = (EXTINFO *)lParam1;
EXTINFO *pExt2 = (EXTINFO *)lParam2;
LPSTR lpStr1, lpStr2;
int iResult;
if (pExt1 && pExt2)
{
switch( lParamSort)
{
case EXTNAME:
lpStr1 = pExt1->Extens;
lpStr2 = pExt2->Extens;
if(gbAscOrder)
iResult = strcmpi(lpStr1, lpStr2);
else
iResult = strcmpi(lpStr2, lpStr1);
break;
case EXTSIZE:
if(gbAscOrder)
iResult = pExt1->ExtSize - pExt2->ExtSize;
else
iResult = pExt2->ExtSize - pExt1->ExtSize;
break;
case EXTCOUNT:
if(gbAscOrder)
iResult = pExt1->ExtCount - pExt2->ExtCount;
else
iResult = pExt2->ExtCount - pExt1->ExtCount;
break;
case EXTCLUST:
if(gbAscOrder)
iResult = pExt1->ExtClust - pExt2->ExtClust;
else
iResult = pExt2->ExtClust - pExt1->ExtClust;
break;
case EXTTYPE:
lpStr1 = pExt1->cType;
lpStr2 = pExt2->cType;
if(gbAscOrder)
iResult = strcmpi(lpStr1, lpStr2);
else
iResult = strcmpi(lpStr2, lpStr1);
break;
default:
iResult = 0;
break;
}
}
return(iResult);
}
void CALLBACK IconTimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
// SetIcon(Icon[AnimNum], FALSE);
::SendMessage(hWndMain, WM_SETICON, (WPARAM) ICON_SMALL, (LPARAM) Icon[AnimNum]);
// SendMessage(hWndDlgIcon, WM_SETICON, (WPARAM) ICON_BIG, (LPARAM) Icon[AnimNum]);
if(++AnimNum == 4)
AnimNum = 0;
}
void InitTimerIcon(void)
{
SetTimer(hWndMain, 0, 250, IconTimerProc);
}
void FinishTimerIcon(void)
{
KillTimer(hWndMain, 0);
AnimNum = 0;
// SetIcon(m_hIcon, FALSE); // Set small icon
SendMessage(hWndMain, WM_SETICON, (WPARAM) ICON_SMALL, (LPARAM) hIconMain);
// SendMessage(hWndDlgIcon, WM_SETICON, (WPARAM) ICON_BIG, (LPARAM) hIconMain);
}
/*id FileReport(void)
{
char TmpStr[100];
wsprintf(TmpStr, "%lu Extensions, %lu Files, %lu Kb Real Filesize", gdNumExt, gdNumFiles, TotClus/1024);
SetWindowText(hWndDispFold, TmpStr);
}
*/
void CExt32Dlg::OnAbout()
{
// TODO: Add your control notification handler code here
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -