Автор: Пользователь скрыл имя, 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
BOOL FindClose(HANDLE hFindFile) – закрывает хэндл, который вернула функция FindFirstFile.
hFindFile – хэндл, который вернула функция FindFirstFile.
BOOL SetCurrentDirectory(LPCTSTR lpPathName) – функция устанавливает текущую папку.
lpPathName – путь к папке, которую необходимо сделать текущей.
DWORD_PTR SHGetFileInfo(LPCTSTR pszPath, DWORD dwFileAttributes, SHFILEINFO *psfi, UINT cbFileInfo, UINT uFlags) – возвращает информацию об элементе файловой системы, таком как файл, каталог или корневой катклог.
pszPath – путь к элементу;
dwFileAttributes – флаг или комбинация флагов;
*psfi – указатель, содержащий адрес структуры SHFILEINFO;
cbFileInfo – размер этой структуры в байтах;
uFlags – флаги, которые показывают спецификацию возвращаемой информации.
BOOL GetVolumeInformation(LPCTSTR lpRootPathName, LPTSTR lpVolumeNameBuffer, DWORD nVolumeNameSize, LPDWORD lpVolumeSerialNumber, LPDWORD lpMaximumComponentLength, LPDWORD lpFileSystemFlags, LPTSTR lpFileSystemNameBuffer, DWORD nFileSystemNameSize) – возвращает информацию о носителях.
lpRootPathName – адрес корневого каталога;
lpVolumeNameBuffer – имя буфера;
nVolumeNameSize – длина имени буфера;
lpVolumeSerialNumber – серийный номер;
lpMaximumComponentLength – максимальная длина имени файла;
lpFileSystemFlags – опции файловой системы;
lpFileSystemNameBuffer – имя буфера файловой системы;
nFileSystemNameSize – длина имени буфера файловой системы;
BOOL CreateDirectory(LPCTSTR lpPathName) – создаёт папку с указанным адресом.
lpPathName – адрес папки.
int SHFileOperation(
lpFileOp – указатель на структуру операции LPSHFILEOPSTRUCT.
Для начала работы программы необходимо запиустить файл My_Comander.exe.
Входными данными в программе является информация о дисках компьютера и файлах на этих дисках, а также сами файлы и папки.
Выходными данными программы являются результаты работы с файлами и папками дисков.
4.6.2. Требования к аппаратной и программной средам
Условия выполнения программы, полученной в результате реализации данного проекта, должны отвечать следующим требованиям:
Данный программный продукт имеет возможность работы с имеющимися дисками и их файловыми системами. Также он наглядно отображает имеющиеся на дисках файлы и папки. Программа может осуществлять следующие действия:
Для начала работы программы необходимо запиустить файл My_Comander.exe. После чего загружается окпно приложения (рис.1).
Рис 1 Окно приложения
Для построения дерева каталогов выбранного диска необходимо кликнуть кнопку «Дерево» на панели инструментов или соответствующий пункт меню, построение дерева предусмотрено для левой панели (рис.2). Выделив папку в дереве и нажав кнопку «Дерево» или пункт меню ещё раз осуществляется переход к этой папке.
Рис 2 Окно приложения с построенным дереврм каталогов
Для открытия папки или запуска файла достаточно кликнуть двойным щелчком на записи относящейся к этой папке или файлу. При этом если файл не исполняемый, а модержит информацию, он затускается той программой, которая предусмотрена для него опереационной системой. Открытие папки происходит в той же панели, и для перехода в родительскую папку необходимо кликнуть двойным щелчком на нервую в списке папку с именем «..» и значком «Up» (рис.3).
Рис 3 Открытые папки в приложении
Для копирования необходимо выделить файл или папку в одной из панелей, которая должна быть списком, и нажать кнопку «Копировать» на панели инструментов или соответствующий пункт меню.
Для перемещения необходимо выделить файл или папку в одной из панелей, которая должна быть списком, и нажать кнопку «Переместить» на панели инструментов или соответствующий пункт меню.
Для удаления необходимо выделить файл или папку в одной из панелей, которая должна быть списком, и нажать кнопку «Удалить» на панели инструментов или соответствующий пункт меню.
Для переименования необходимо выделить файл или папку в одной из панелей, которая должна быть списком, и нажать кнопку «Переименовать» на панели инструментов или соответствующий пункт меню, также можно кликнуть ещё раз по записи. При этом название объекта выделится и ставится курсор для ввода имени, после ввода нового имени достаточно нажать Enter (рис.4).
Рис 4 Редактирование имени папки
Для обновления информации о файлах и папках необходимо , и нажать кнопку «Обновить» на панели инструментов или соответствующий пункт меню.
Каждой панели соответствует свой списой дисков расположенный над ним. В нём отображается имя текущего диска этой панели. При клике на список он разворачивается и можно выбрать нужный диск (рис.5).
Рис 5 Выбор диска
Для перехода к папке по адресу имеется строка адреса. При переходах между папками там отображается адрес текущей папки текущей панели. Для перехода к нужной папке необходимо выбрать нужный диск, поставить курсор в строку адреса, ввести путь и нажать Enter. Переход осуществляется в левой панели.
Для просмотра инфорации о программе необходимо кликнуть пункт меню «About» (рис. 6).
Рис 6 Окно о программе
4.6.4. Сообщения пользователю
Рис 7 Ошибка при создании папки
Рис 8 Ошибка при открытии папки
Рис 9 Ошибка при обращении к диску
Рис 10 ошибка при смене имени
5.Литература
6.Приложение
#include "stdafx.h"
#include "resource.h"
#pragma comment(lib, "comctl32.lib")
HWND mainhwnd;
HWND hwndStatus;
HWND hwndListView1;
HWND hwndListView2;
LV_COLUMN lvc;
LV_ITEM lvi;
HWND hwndToolBar;
HWND hwndTreeView;
HWND hwndComboBox1;
HWND hwndComboBox2;
HWND hwndEdit;
HINSTANCE hInst;
WNDPROC hEditProc;
bool MyTree=0;
bool first=1;
char CurentDiskName[3];
char CurrDir1[1024];
char CurrDir2[1024];
int index1;
int index2;
int a,b,c;
LPNMHDR pNotifMessageHeader;
RECT statusRect; //размер строки состояния
UINT wStatID; //
LPNMTREEVIEW
int ComboInd;
HMENU hMenu, hMenupopup;
const IDM_COPY=100;
const IDM_RENAME=101;
const IDM_MKDIR=102;
const IDM_DELETE=103;
const IDM_ABOUT=104;
const IDM_REFRESH=105;
const IDM_MOVE=106;
const ID_TIMER1=1000;
const ID_SB=1001;
const ID_LISTVIEW1=1002;
const ID_LISTVIEW2=1003;
const ID_TREEVIEW=1004;
const ID_TOOLBAR=1005;
const ID_COMBOBOX1=1006;
const ID_COMBOBOX2=1007;
const ID_EDIT=1009;
HIMAGELIST hilLarge;
HIMAGELIST himlSmall1;
HIMAGELIST himlSmall2;
void OnResize();
void RefreshComboInf(HWND hwndCombo);
void DiskBrows();
void CreateFoldersOnDisk(HWND hwnd);
LPSTR FindFullPath (LPSTR strDrive/*[out]*/, HWND hwndTreeView, HTREEITEM htreeItem);
bool AddChildren (HWND hwndTreeView, HTREEITEM hTreeItem, LPCSTR ParentDir );
bool DelChildren (HWND hwndTreeView, HTREEITEM hTreeItem);
bool CollapseChildren(HWND hwndTreeView, HTREEITEM hTreeItem);
void FillListView(HWND hwndlv,LPCSTR ParentDir, HIMAGELIST himlSmall);
unsigned long GetFolderSize(LPCSTR ParentDir);
void OnDblClick(HWND hwndlv, char* CurrentDirectory, HIMAGELIST himlSmall);
void CreateNewFolder(HWND hwndlv, LPCSTR CurrDir, HIMAGELIST himlSmall);
void DeleteFile(HWND hwndlv, LPCSTR CurrDir);
void Renamefile(HWND hwndlv);
void CopyFile(HWND hwndlv1, HWND hwndlv2, LPCSTR CurrD1, LPCSTR CurrD2, HIMAGELIST himlSmall);
void CutFile(HWND hwndlv1, HWND hwndlv2, LPCSTR CurrD1, LPCSTR CurrD2, HIMAGELIST himlSmall);
void PasteFile(HWND hwndlv1, HWND hwndlv2, LPCSTR CurrDir,
HIMAGELIST himlSmall, LPCSTR csFileNameCopy, LPCSTR csNF, bool cut, int index);
LRESULT EditWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
void GoTo(HWND hwndlv, char* CurrentDirectory, HIMAGELIST himlSmall);
void Activate();
void DisActivate();
LRESULT CALLBACK WindowFunc(HWND , UINT, WPARAM, LPARAM);
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
typedef struct _FLAGDISK
{
DWORD dwFlag;
char* cDisk;
} FLAGDISK;
FLAGDISK FlagDisk[26] =
{
0x1, "A:\\",
0x2, "B:\\",
0x4, "C:\\",
0x8, "D:\\",
0x10, "E:\\",
0x20, "F:\\",
0x40, "G:\\",
0x80, "H:\\",
0x100, "I:\\",
0x200, "J:\\",
0x400, "K:\\",
0x800, "L:\\",
0x1000, "M:\\",
0x2000, "N:\\",
0x4000, "O:\\",
0x8000, "P:\\",
0x10000, "Q:\\",
0x20000, "R:\\",
0x40000, "S:\\",
0x80000, "T:\\",
0x100000, "U:\\",
0x200000, "V:\\",
0x400000, "W:\\",
0x800000, "X:\\",
0x1000000, "Y:\\",
0x2000000, "Z:\\"
};
BOOL IsDiskInDrive ( LPTSTR lpszDrive );
char szWinName[] = "MyCom"; // имя класса окна
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode)
{
HWND hwnd;
MSG msg;
WNDCLASSEX wcl;
HICON hIcon; //for toolbar
TBBUTTON btns[9];
hInst = hThisInst;
InitCommonControls();
//определение класса окна
wcl.hInstance = hThisInst; //работа с данным экземпляром
wcl.lpszClassName = szWinName; //имя класса окна
wcl.lpfnWndProc = WindowFunc; // оконная функция
wcl.style = CS_HREDRAW|CS_VREDRAW; // стиль
wcl.cbSize = sizeof(WNDCLASSEX); //установка размера
wcl.hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDI_G)); //большие иконки
wcl.hIconSm = LoadIcon(hThisInst, MAKEINTRESOURCE(IDI_G)); //маленькие иконки
wcl.hCursor = LoadCursor(NULL, IDC_ARROW); //стиль курсора
wcl.lpszMenuName = NULL; //нет меню
wcl.cbClsExtra = 0; //дополнительной
wcl.cbWndExtra = 0; //информации нет
wcl.hbrBackground = (HBRUSH) (COLOR_BTNFACE+1); //фон окна
if (!RegisterClassEx(&wcl)) return 0;
//класс окна зарегистрирован, создаем окно
hwnd = CreateWindow(
szWinName,
"My_Comander",
WS_OVERLAPPEDWINDOW,
100,
100,
800,
600,
HWND_DESKTOP,
NULL,
hThisInst,
NULL
);
if (!hwnd)
{
MessageBox(NULL, "Cannot create window", "Error", MB_ICONEXCLAMATION | MB_OK);