Файловый менеджер

Автор: Пользователь скрыл имя, 29 Апреля 2013 в 11:44, курсовая работа

Краткое описание

Данный программный продукт разрабатывается для того, чтобы работать с имеющимися дисками и их файловыми системами, осуществлять такие действия как копирование, перемещение, удаление файлов и папок, создание новых папок, а также наглядно отображать имеющиеся на дисках файлы и папки как в виде дерева, так и виде таблицы. Причём необходимо предусмотреть переключение между деревом и таблицей. Также необходимо дать пользователю возможность вводить путь к интересующей его папке. И необходимо отображать текущую папку с полным путём к ней. Необходимо предусмотреть возможность выбора диска из имеющихся в компьютере. Действия должны осуществляться как с помощью меню, так и с помощью пиктограмм панели управления.

Оглавление

1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ 3
1.1. Введение 3
1.2. Основания для разработки 3
1.3. Назначение разработки 3
1.4. Требования к программе или программному изделию 3
1.5. Условия эксплуатации 4
1.6. Требования к составу и параметрам технических средств 4
1.7. Требования к информационной и программной совместимости 4
1.8. Требования к программной документации 5
1.9. Стадии и этапы разработки 5
2. ИССЛЕДОВАТЕЛЬСКАЯ ЧАСТЬ 7
2.1. Постановка задачи 7
2.2. Общие сведения 7
2.3. Файловые системы 8
3. КОНСТРУКТОРСКАЯ ЧАСТЬ 12
3.1. Общие сведения 12
3.2. Руководство программиста 12
3.2.1. Структура программы 12
3.2.2. Структуры данных 13
3.2.3. Средства обмена данными 14
3.2.4. Реализация пользовательского интерфейса программы 15
3.2.5. Функции работы с файловой системой 20
4. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ 22
4.1. Обращение к программе 22
4.2. Входные данные 22
4.3. Выходные данные 22
4.4. Руководство пользователя 22
4.6.1. Назначение программы 22
4.6.2. Требования к аппаратной и программной средам 22
4.6.3. Выполнение программы 23
4.6.4. Сообщения пользователю 28
5.ЛИТЕРАТУРА 30
6.ПРИЛОЖЕНИЕ 31

Файлы: 1 файл

my_Записка.doc

— 1.21 Мб (Скачать)

return 0;

}

 

mainhwnd=hwnd; // глобальная переменная HWND

//menu

hMenu = CreateMenu();

hMenupopup = CreateMenu();

AppendMenu (hMenupopup, MF_STRING, IDM_COPY, "Copy");

AppendMenu (hMenupopup, MF_STRING, IDM_MOVE, "Move");

AppendMenu (hMenupopup, MF_STRING, IDM_RENAME, "Rename");

AppendMenu (hMenupopup, MF_STRING, IDM_MKDIR, "MakeDir");

AppendMenu (hMenupopup, MF_STRING, IDM_DELETE, "Delete");

AppendMenu (hMenupopup, MF_SEPARATOR, 0, NULL);

AppendMenu (hMenupopup, MF_STRING, IDM_REFRESH, "Refresh");

AppendMenu (hMenu, MF_POPUP, (UINT) hMenupopup, "File");

 

AppendMenu (hMenu, MF_STRING, IDM_ABOUT, "About");

 

SetMenu (hwnd,hMenu);

//end menu

 

 

    RECT rcClient;

char *ToolTipText1="Icon";//подсказка

 

    // Create the status bar.

    hwndStatus = CreateWindowEx(

        0,                       // no extended styles

        STATUSCLASSNAME,         // name of status bar class

        (LPCTSTR) NULL,          // no text when first created

        SBARS_SIZEGRIP |         // includes a sizing grip

        WS_CHILD | WS_VISIBLE |SBT_TOOLTIPS, // creates a child window

        0, 0, 0, 0,              // ignores size and position

        mainhwnd,              // handle to parent window

        (HMENU) ID_SB,       // child window identifier

        hThisInst,                   // handle to application instance

        NULL

);                   // no window creation data

 

//begin TOOLBAR!//-----------------------------------------------------

hwndToolBar=CreateToolbarEx(

hwnd,

WS_CHILD |WS_VISIBLE |

TBSTYLE_TOOLTIPS| TBSTYLE_FLAT |

WS_BORDER, ID_TOOLBAR,

3, NULL ,0,

NULL,

0,

0, 0, 0, 0,

sizeof(TBBUTTON)

);

 

hilLarge = ImageList_Create(20,20, ILC_COLOR32| ILC_MASK, 9, 0);

 

 

hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDI_TREE));

UINT iTree = ImageList_AddIcon(hilLarge, hIcon);

DeleteObject(hIcon);

 

hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDI_NEW));

UINT iNew = ImageList_AddIcon(hilLarge, hIcon);

DeleteObject(hIcon);

 

hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDI_COPY));

UINT iCopy = ImageList_AddIcon(hilLarge, hIcon);

DeleteObject(hIcon);

 

hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDI_RENAME));

UINT iRename = ImageList_AddIcon(hilLarge, hIcon);

DeleteObject(hIcon);

 

hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDI_DELETE));

UINT iDel = ImageList_AddIcon(hilLarge, hIcon);

DeleteObject(hIcon);

 

hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDI_MOVE));

UINT iMove = ImageList_AddIcon(hilLarge, hIcon);

DeleteObject(hIcon);

 

hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDI_REFRESH));

UINT iRef = ImageList_AddIcon(hilLarge, hIcon);

DeleteObject(hIcon);

 

 

btns[0].iBitmap = iTree;

btns[0].idCommand = IDI_TREE;

btns[0].fsState = TBSTATE_ENABLED;

btns[0].fsStyle = BYTE(TBSTYLE_BUTTON);

btns[0].dwData = NULL;

btns[0].iString = 0;

 

btns[1].iBitmap = 0;

btns[1].idCommand = 0;

btns[1].fsState = TBSTATE_ENABLED;

btns[1].fsStyle = BYTE(TBSTYLE_SEP);

btns[1].dwData = NULL;

btns[1].iString = 0;

 

btns[2].iBitmap = iNew;

btns[2].idCommand = IDI_NEW;

btns[2].fsState = TBSTATE_ENABLED;

btns[2].fsStyle = BYTE(TBSTYLE_BUTTON);

btns[2].dwData = NULL;

btns[2].iString = 0;

 

btns[3].iBitmap = iCopy;

btns[3].idCommand = IDI_COPY;

btns[3].fsState = TBSTATE_ENABLED;

btns[3].fsStyle = BYTE(TBSTYLE_BUTTON);

btns[3].dwData = NULL;

btns[3].iString = 0;

 

btns[4].iBitmap = iRename;

btns[4].idCommand = IDI_RENAME;

btns[4].fsState = TBSTATE_ENABLED;

btns[4].fsStyle = BYTE(TBSTYLE_BUTTON);

btns[4].dwData = NULL;

btns[4].iString = 0;

 

btns[5].iBitmap = iDel;

btns[5].idCommand = IDI_DELETE;

btns[5].fsState = TBSTATE_ENABLED;

btns[5].fsStyle = BYTE(TBSTYLE_BUTTON);

btns[5].dwData = NULL;

btns[5].iString = 0;

 

btns[6].iBitmap = iMove;

btns[6].idCommand = IDI_MOVE;

btns[6].fsState = TBSTATE_ENABLED;

btns[6].fsStyle = BYTE(TBSTYLE_BUTTON);

btns[6].dwData = NULL;

btns[6].iString = 0;

 

btns[7].iBitmap = 0;

btns[7].idCommand = 0;

btns[7].fsState = TBSTATE_ENABLED;

btns[7].fsStyle = BYTE(TBSTYLE_SEP);

btns[7].dwData = NULL;

btns[7].iString = 0;

 

btns[8].iBitmap = iRef;

btns[8].idCommand = IDI_REFRESH;

btns[8].fsState = TBSTATE_ENABLED;

btns[8].fsStyle = BYTE(TBSTYLE_BUTTON);

btns[8].dwData = NULL;

btns[8].iString = 0;

 

SendMessage(hwndToolBar, TB_SETIMAGELIST, 0, LPARAM(hilLarge));

 

SendMessage(hwndToolBar, TB_ADDBUTTONS, 9, LPARAM(btns));

 

   //end TOOLBAR!//---------------------------------------------------  

 

// Get the coordinates of the parent window's client area.

    GetClientRect(mainhwnd, &rcClient);

 

 

//Создание ComboBox-ов

hwndComboBox1 = CreateWindowEx(

0, "COMBOBOX", NULL,

WS_BORDER | WS_VISIBLE | CBS_DROPDOWNLIST |

WS_CHILD | CBS_DROPDOWN,

// No size yet--resize after setting image list.

25,      // Vertical position of Combobox

0,      // Horizontal position of Combobox

0,      // Sets the width of Combobox

100,    // Sets the height of Combobox

mainhwnd,

NULL,

hThisInst,

NULL);

 

hwndComboBox2 = CreateWindowEx(

0, "COMBOBOX", NULL,

WS_BORDER | WS_VISIBLE | CBS_DROPDOWNLIST |

WS_CHILD | CBS_DROPDOWN,

// No size yet--resize after setting image list.

0,      // Vertical position of Combobox

0,      // Horizontal position of Combobox

0,      // Sets the width of Combobox

0,    // Sets the height of Combobox

mainhwnd,

NULL,

hThisInst,

NULL);

 

 

 

   //Создание list view

hwndListView1 = CreateWindowEx(

WS_EX_CLIENTEDGE,

WC_LISTVIEW, NULL,

WS_CHILD | LVS_REPORT | LVS_EDITLABELS | LVS_SINGLESEL |

WS_VISIBLE | WS_BORDER | WS_OVERLAPPED,

0, 100, 200, 300,

mainhwnd,

(HMENU) ID_LISTVIEW1,

hThisInst,

NULL

);

 

hwndListView2 = CreateWindow(

//WS_EX_CLIENTEDGE,

WC_LISTVIEW, NULL,

WS_CHILD | LVS_REPORT | LVS_EDITLABELS | LVS_SINGLESEL |

WS_VISIBLE | WS_BORDER | WS_OVERLAPPED,

200, 100, 400, 300,

mainhwnd,

(HMENU) ID_LISTVIEW2,

hThisInst,

NULL

);

 

ListView_SetExtendedListViewStyle(hwndListView1, LVS_EX_FULLROWSELECT);

ListView_SetExtendedListViewStyle(hwndListView2, LVS_EX_FULLROWSELECT);

 

lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

lvc.iSubItem = 0;

lvc.pszText = "Name";

lvc.cx = 150;

lvc.fmt = LVCFMT_LEFT;

ListView_InsertColumn(hwndListView1, 0, &lvc);

 

lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

lvc.iSubItem = 1;

lvc.pszText = "Type";

lvc.cx = 50;

lvc.fmt = LVCFMT_LEFT;

ListView_InsertColumn(hwndListView1, 1, &lvc);

 

lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

lvc.iSubItem = 2;

lvc.pszText = "Size";

lvc.cx = 65;

lvc.fmt = LVCFMT_LEFT;

ListView_InsertColumn(hwndListView1, 2, &lvc);

 

lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

lvc.iSubItem = 3;

lvc.pszText = "Date of creation";

lvc.cx = 100;

lvc.fmt = LVCFMT_LEFT;

ListView_InsertColumn(hwndListView1, 3, &lvc);

 

lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

lvc.iSubItem = 0;

lvc.pszText = "Name";

lvc.cx = 150;

lvc.fmt = LVCFMT_LEFT;

ListView_InsertColumn(hwndListView2, 0, &lvc);

 

lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

lvc.iSubItem = 1;

lvc.pszText = "Type";

lvc.cx = 50;

lvc.fmt = LVCFMT_LEFT;

ListView_InsertColumn(hwndListView2, 1, &lvc);

 

lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

lvc.iSubItem = 2;

lvc.pszText = "Size";

lvc.cx = 65;

lvc.fmt = LVCFMT_LEFT;

ListView_InsertColumn(hwndListView2, 2, &lvc);

 

lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

lvc.iSubItem = 3;

lvc.pszText = "Date of creation";

lvc.cx = 100;

lvc.fmt = LVCFMT_LEFT;

ListView_InsertColumn(hwndListView2, 3, &lvc);

 

// Создаем списки изображений

himlSmall1 = ImageList_Create(GetSystemMetrics(SM_CXSMICON),

GetSystemMetrics(SM_CYSMICON), ILC_COLOR24 | ILC_MASK, 8, 1);

himlSmall2 = ImageList_Create(GetSystemMetrics(SM_CXSMICON),

GetSystemMetrics(SM_CYSMICON), ILC_COLOR24 | ILC_MASK, 8, 1);

// Добавляем в списки пиктограммы

// изображений папок

 

 

hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDM_CGFOLDER));

a=ImageList_AddIcon(himlSmall1, hIcon);

a=ImageList_AddIcon(himlSmall2, hIcon);

 

hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDM_CYFOLDER));

b=ImageList_AddIcon(himlSmall1, hIcon);

b=ImageList_AddIcon(himlSmall2, hIcon);

 

hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDM_UPARROW));

c=ImageList_AddIcon(himlSmall1, hIcon);

c=ImageList_AddIcon(himlSmall2, hIcon);

 

 

//Добавляем эти ImageList-ы

 

ListView_SetImageList(hwndListView1, himlSmall1, LVSIL_SMALL);

ListView_SetImageList(hwndListView2, himlSmall2, LVSIL_SMALL);

 

 

// конец описания List View

 

//TreeView

 

hwndTreeView = CreateWindowEx(

WS_EX_CLIENTEDGE,

WC_TREEVIEW, NULL,

WS_CHILD | LVS_REPORT |

WS_VISIBLE | WS_BORDER | WS_OVERLAPPED | TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT,

0, 0, 0, 0,

mainhwnd,

(HMENU) ID_TREEVIEW,

hThisInst,

NULL

);

 

HIMAGELIST himl;  // handle to image list

 

    // Create the image list.

 

himl = ImageList_Create(GetSystemMetrics(SM_CXSMICON),

    GetSystemMetrics(SM_CYSMICON), ILC_COLOR24 | ILC_MASK, 8, 1);

 

hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDM_YFOLDER));

ImageList_AddIcon(himl, hIcon);

 

hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDM_CYFOLDER));

ImageList_AddIcon(himl, hIcon);

 

    // Associate the image list with the tree-view control.

    TreeView_SetImageList(hwndTreeView, himl, TVSIL_NORMAL);

 

//end of TreeView definition

  

//описание Edit

hwndEdit = CreateWindow(

    "EDIT",     // predefined class

    NULL,       // no window title

    WS_CHILD | WS_VISIBLE | 

    ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL,

    0, 0, 0, 0, // set size in WM_SIZE message

    mainhwnd,       // parent window

    (HMENU) ID_EDIT, // edit control ID

    hThisInst,

    NULL);                // pointer not needed

 

hEditProc = (WNDPROC) SetWindowLong(hwndEdit, GWL_WNDPROC, (LONG) EditWndProc);

 

OnResize();

DiskBrows();

strcat(CurrDir2,"C:\\");

strcat(CurrDir1,"C:\\");

 

index1=1;

index2=1;

 

SendMessage( hwndComboBox1, CB_SETCURSEL, index1, 0);//выбираем Диск С:

SendMessage( hwndComboBox2, CB_SETCURSEL, index2, 0);//выбираем Диск С:

SetWindowText(hwndEdit, CurrDir2);

SendMessage(hwndStatus, SB_SETTEXT, (WPARAM) 0 | 0, (LPARAM) "Ready" ); //отображаем в строке состояния готовность

ShowWindow(hwnd, nWinMode); 

FillListView(hwndListView1,CurrDir1,himlSmall1);

FillListView(hwndListView2,CurrDir2,himlSmall2);

 

UpdateWindow(hwnd);

 

while (GetMessage(&msg, NULL, 0, 0))

    {

TranslateMessage(&msg);

DispatchMessage(&msg);

    }

    return msg.wParam;

}

 

 

 

LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam,

                              LPARAM lParam)

{

static RECT   Rect;

TV_ITEM    TV_Item;

HWND    hSender; //дескриптор элемента, от которого пришло сообщение

char    LongPath[1000]; //полное имя файла

char    strRootDrive[100]; //корневой диск для файла

char    Drive[4];

HTREEITEM   hSelectedItem;

LV_DISPINFO *pdi;

char csName[256],csFirst[256],csSDir[]="<DIR>",csNameFile[256];

   int iError;

 

switch (message)

{

case WM_CREATE:

SetTimer(hwnd, ID_TIMER1, 100,(TIMERPROC) NULL);

hInst =((LPCREATESTRUCT) lParam)->hInstance;

 

break;

case WM_SIZE:

SendMessage(hwndToolBar, message, wParam, lParam);

SendMessage(hwndStatus, message, wParam, lParam);

OnResize();

break;

 

case WM_COMMAND:

if (LOWORD (wParam)==IDM_ABOUT)

   MessageBox(mainhwnd,

   "Курсовая работа по  курсу «Программирование под  Windows»:\n"

   "Файловый менеджер\n"

   "Copyright (c) 2005 Goliath Co.,Ltd.\n"

   "Эту программу написал Жиров Дмитрий\n\n", "About", MB_ICONINFORMATION);

 

 

 

if (LOWORD (wParam)==IDI_TREE ) //for toolbar

{

MyTree=!(MyTree);

OnResize();

if (MyTree)

{

RefreshComboInf(hwndComboBox1);//определение выбранного диска

CreateFoldersOnDisk(hwnd);//построение нового дерева

hSelectedItem=TreeView_GetRoot(hwndTreeView);//сообщение TreeView

TreeView_Expand(        //что у него развёрнут корень

hwndTreeView,

hSelectedItem,

TVE_EXPAND

);

first=0;

}

if (!MyTree)

FillListView(hwndListView1,CurrDir1,himlSmall1);

 

}

if (LOWORD (wParam)==IDI_NEW || LOWORD (wParam)==IDM_MKDIR)

{

if (GetFocus()==hwndListView1)

CreateNewFolder(hwndListView1,CurrDir1,himlSmall1);

if (GetFocus()==hwndListView2)

CreateNewFolder(hwndListView2,CurrDir2,himlSmall2);

}

if (LOWORD (wParam)==IDI_DELETE || LOWORD (wParam)==IDM_DELETE)

{

if (GetFocus()==hwndListView1)

DeleteFile(hwndListView1, CurrDir1);

if (GetFocus()==hwndListView2)

DeleteFile(hwndListView2, CurrDir2);

}

if (LOWORD (wParam)==IDI_RENAME || LOWORD (wParam)==IDM_RENAME)

{

if (GetFocus()==hwndListView1)

Renamefile(hwndListView1);

if (GetFocus()==hwndListView2)

Renamefile(hwndListView2);

}

if (LOWORD (wParam)==IDI_COPY || LOWORD (wParam)==IDM_COPY)

{

if (GetFocus()==hwndListView1)

CopyFile(hwndListView1,hwndListView2,CurrDir1,CurrDir2,himlSmall2);

if (GetFocus()==hwndListView2)

CopyFile(hwndListView2,hwndListView1,CurrDir2,CurrDir1,himlSmall1);

}

if (LOWORD (wParam)==IDI_MOVE || LOWORD (wParam)==IDM_MOVE)

{

if (GetFocus()==hwndListView1)

CutFile(hwndListView1,hwndListView2,CurrDir1,CurrDir2,himlSmall2);

if (GetFocus()==hwndListView2)

CutFile(hwndListView2,hwndListView1,CurrDir2,CurrDir1,himlSmall1);

}

if (LOWORD (wParam)==IDI_REFRESH || LOWORD (wParam)==IDM_REFRESH)

{

FillListView(hwndListView1,CurrDir1,himlSmall1);

FillListView(hwndListView2,CurrDir2,himlSmall2);

}

if ( HWND(lParam) == hwndComboBox1 )  //источник - ComboBox1

{

if (HIWORD(wParam) == CBN_SELCHANGE)

{

strcpy(Drive,CurentDiskName);

RefreshComboInf(hwndComboBox1);//определение выбранного диска

if (IsDiskInDrive(CurentDiskName))

{

strcpy(CurrDir1,CurentDiskName);

index1=SendMessage(hwndComboBox1,CB_GETCURSEL,0,0);

SetWindowText(hwndEdit, CurrDir1);

if (MyTree)

{

TreeView_DeleteAllItems(hwndTreeView);//удаление элементов из TreeView

CreateFoldersOnDisk(hwnd);//построение нового дерева

hSelectedItem=TreeView_GetRoot(hwndTreeView);//сообщение TreeView

TreeView_Expand(        //что у него развёрнут корень

hwndTreeView,

hSelectedItem,

TVE_EXPAND

);

}

else

{

FillListView(hwndListView1,CurrDir1,himlSmall1);

 

}

}

else

{

MessageBox(NULL,

"Диск не готов",

"Ошибка" ,

MB_ICONERROR | MB_OK | MB_TASKMODAL);

strcpy(CurentDiskName,Drive);

SendMessage( hwndComboBox1, CB_SETCURSEL, index1, 0);

}

};

};

if ( HWND(lParam) == hwndComboBox2 )  //источник - ComboBox2

{

if (HIWORD(wParam) == CBN_SELCHANGE)

{

strcpy(Drive,CurentDiskName);

RefreshComboInf(hwndComboBox2);

if (IsDiskInDrive(CurentDiskName))

{

strcpy(CurrDir2,CurentDiskName);

index2=SendMessage(hwndComboBox2,CB_GETCURSEL,0,0);

FillListView(hwndListView2,CurrDir2,himlSmall2);

SetWindowText(hwndEdit, CurrDir2);

}

else

{

 

strcpy(CurentDiskName,Drive);

SendMessage( hwndComboBox2, CB_SETCURSEL, index2, 0);

MessageBox(NULL,

"Диск не готов",

"Ошибка" ,

MB_ICONERROR | MB_OK | MB_TASKMODAL);

}

};

};

break;

 

case WM_NOTIFY:  //сообщение об изменении состояния элемента

pNotifMessageHeader = (LPNMHDR) lParam;  //определяем структуру сообщения

hSender = pNotifMessageHeader->hwndFrom; //определяем элемент-источник

 

switch (pNotifMessageHeader->code)

{

case TTN_NEEDTEXT:

LPTOOLTIPTEXT lpToolTipText;

lpToolTipText = (LPTOOLTIPTEXT)lParam;

lpToolTipText->hinst = hInst;

lpToolTipText->lpszText = MAKEINTRESOURCE(lpToolTipText->hdr.idFrom);

break;

}

if ( hSender == hwndTreeView )  //источник - TreeView

{

switch(pNotifMessageHeader->code)

{

case TVN_ITEMEXPANDING: //разворачивание или сворачивание узла

 

SendMessage(hwndStatus, SB_SETTEXT, (WPARAM) 0, (LPARAM) "Scanning directory structure..." ); //отображаем в строке состояния процесс поиска

ptrNotifMessageTreeView = (LPNMTREEVIEW) lParam; //получаем указатель на узел

if ( ptrNotifMessageTreeView->action == TVE_EXPAND ) //разворачивание узла

{

hSelectedItem = TreeView_GetChild(hwndTreeView, ptrNotifMessageTreeView->itemNew.hItem);  //берём первого потомка

TV_Item.mask = TVIF_HANDLE | TVIF_TEXT | TVIF_IMAGE;

TV_Item.hItem = hSelectedItem;

TV_Item.pszText = LongPath;

TV_Item.cchTextMax = 1000;

TV_Item.iImage=(1);

TV_Item.iSelectedImage = (0);

TreeView_GetItem(hwndTreeView, &TV_Item);

AddChildren (hwndTreeView, hSelectedItem, LongPath );

 

hSelectedItem = TreeView_GetNextSibling(hwndTreeView, hSelectedItem); //берём следующий узел на данном уровне

TV_Item.hItem = hSelectedItem;

TV_Item.pszText = LongPath;

TV_Item.cchTextMax = 1000;

TV_Item.iImage=(1);

TV_Item.iSelectedImage = (0);

TreeView_GetItem(hwndTreeView, &TV_Item);

 

while ( hSelectedItem )

{

AddChildren (hwndTreeView, hSelectedItem, LongPath );

hSelectedItem = TreeView_GetNextSibling(hwndTreeView, hSelectedItem); //берём следующий узел на данном уровне

TV_Item.hItem = hSelectedItem;

TV_Item.pszText = LongPath;

TV_Item.iImage=(1);

TV_Item.iSelectedImage = (0);

TV_Item.cchTextMax = 1000;

TreeView_GetItem(hwndTreeView, &TV_Item);

}

 

}

 

if ( ptrNotifMessageTreeView->action == TVE_COLLAPSE ) //сворачивание узла

{

CollapseChildren(hwndTreeView, ptrNotifMessageTreeView->itemNew.hItem);

hSelectedItem = TreeView_GetChild(hwndTreeView, ptrNotifMessageTreeView->itemNew.hItem);  //берём первого потомка

 

while ( hSelectedItem )

{

DelChildren(hwndTreeView, hSelectedItem);

hSelectedItem = TreeView_GetNextSibling(hwndTreeView, hSelectedItem); //берём следующий узел на данном уровне

}

 

}

 

SendMessage(hwndStatus, SB_SETTEXT, (WPARAM) 0 | 0, (LPARAM) "Ready" ); //отображаем в строке состояния готовность

break;

 

case TVN_SELCHANGED: //выбор узла

ptrNotifMessageTreeView = (LPNMTREEVIEW) lParam; //получаем указатель на узел

hSelectedItem = ptrNotifMessageTreeView->itemNew.hItem;

TV_Item.mask = TVIF_HANDLE | TVIF_TEXT | TVIF_IMAGE;

TV_Item.hItem = hSelectedItem;

TV_Item.pszText = strRootDrive;

TV_Item.cchTextMax = 99;

TV_Item.iImage=(1);

TV_Item.iSelectedImage = (0);

TreeView_GetItem(hwndTreeView, &TV_Item);

Информация о работе Файловый менеджер