Автор: Пользователь скрыл имя, 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
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_
ListView_
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(
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(
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(
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(
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(
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(
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(
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(
// Создаем списки изображений
himlSmall1 = ImageList_Create(
GetSystemMetrics(SM_CYSMICON), ILC_COLOR24 | ILC_MASK, 8, 1);
himlSmall2 = ImageList_Create(
GetSystemMetrics(SM_CYSMICON), ILC_COLOR24 | ILC_MASK, 8, 1);
// Добавляем в списки пиктограммы
// изображений папок
hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDM_CGFOLDER))
a=ImageList_AddIcon(
a=ImageList_AddIcon(
hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDM_CYFOLDER))
b=ImageList_AddIcon(
b=ImageList_AddIcon(
hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDM_UPARROW));
c=ImageList_AddIcon(
c=ImageList_AddIcon(
//Добавляем эти ImageList-ы
ListView_SetImageList(
ListView_SetImageList(
// конец описания 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_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(
//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,
FillListView(hwndListView2,
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],
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_
TreeView_Expand( //что у него развёрнут корень
hwndTreeView,
hSelectedItem,
TVE_EXPAND
);
first=0;
}
if (!MyTree)
FillListView(hwndListView1,
}
if (LOWORD (wParam)==IDI_NEW || LOWORD (wParam)==IDM_MKDIR)
{
if (GetFocus()==hwndListView1)
CreateNewFolder(hwndListView1,
if (GetFocus()==hwndListView2)
CreateNewFolder(hwndListView2,
}
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,
if (GetFocus()==hwndListView2)
CopyFile(hwndListView2,
}
if (LOWORD (wParam)==IDI_MOVE || LOWORD (wParam)==IDM_MOVE)
{
if (GetFocus()==hwndListView1)
CutFile(hwndListView1,
if (GetFocus()==hwndListView2)
CutFile(hwndListView2,
}
if (LOWORD (wParam)==IDI_REFRESH || LOWORD (wParam)==IDM_REFRESH)
{
FillListView(hwndListView1,
FillListView(hwndListView2,
}
if ( HWND(lParam) == hwndComboBox1 ) //источник - ComboBox1
{
if (HIWORD(wParam) == CBN_SELCHANGE)
{
strcpy(Drive,CurentDiskName);
RefreshComboInf(hwndComboBox1)
if (IsDiskInDrive(CurentDiskName)
{
strcpy(CurrDir1,
index1=SendMessage(
SetWindowText(hwndEdit, CurrDir1);
if (MyTree)
{
TreeView_DeleteAllItems(
CreateFoldersOnDisk(hwnd);//по
hSelectedItem=TreeView_
TreeView_Expand( //что у него развёрнут корень
hwndTreeView,
hSelectedItem,
TVE_EXPAND
);
}
else
{
FillListView(hwndListView1,
}
}
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,
index2=SendMessage(
FillListView(hwndListView2,
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-
break;
}
if ( hSender == hwndTreeView ) //источник - TreeView
{
switch(pNotifMessageHeader->
{
case TVN_ITEMEXPANDING: //разворачи
SendMessage(hwndStatus, SB_SETTEXT, (WPARAM) 0, (LPARAM) "Scanning directory structure..." ); //отображаем в строке состояния процесс поиска
ptrNotifMessageTreeView = (LPNMTREEVIEW) lParam; //получаем указатель на узел
if ( ptrNotifMessageTreeView->
{
hSelectedItem = TreeView_GetChild(
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(
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(
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->
{
CollapseChildren(hwndTreeView, ptrNotifMessageTreeView->
hSelectedItem = TreeView_GetChild(
while ( hSelectedItem )
{
DelChildren(hwndTreeView, hSelectedItem);
hSelectedItem = TreeView_GetNextSibling(
}
}
SendMessage(hwndStatus, SB_SETTEXT, (WPARAM) 0 | 0, (LPARAM) "Ready" ); //отображаем в строке состояния готовность
break;
case TVN_SELCHANGED: //выбор узла
ptrNotifMessageTreeView = (LPNMTREEVIEW) lParam; //получаем указатель на узел
hSelectedItem = ptrNotifMessageTreeView->
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);