Windows-приложение для просмотра графических файлов

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    277,51 Кб
  • Опубликовано:
    2015-11-14
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Windows-приложение для просмотра графических файлов

Министерство образования и науки Российской Федерации

ФГАОУ ВПО «УРАЛЬСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ

имени первого Президента России Б.Н.Ельцина»










ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

«Windows приложение для просмотра графических файлов»

Руководитель Зеленская Е.В.

Студент Семенкин Л.В.

Группа Р-38032







Екатеринбург 2010

Содержание

Введение

. Теоретическая часть

.1 Обозреватель графических файлов

.2 Библиотека классов GDI+

. Инструкция программиста

. Инструкция пользователя

. Тестирование

Заключение

Библиографический список

Приложение. Исходный текст программы

Введение

В настоящее время, обозреватель графических файлов является одной из тех программ, без которых обычный пользователь не представляет свой компьютер. Большинство людей хранит на своем компьютере фотографии, картинки и для их просмотра необходима такая программа.

Современные графические обозреватели поддерживают большое количество форматов, и имеют возможность редактирования графики, в нашем обозревателе эта функция отсутствует.

1.Теоретическая часть

.1 Обозреватель графических файлов

Обозреватель графических файлов - компьютерная программа <#"871107.files/image001.jpg">

Рис 1.

Открытие директории (рис.2)

Рис 2

Заключение

графический обозреватель файл редактирование

В данной курсовой работе была реализована программа для просмотра графических файлов. Программа оснащена набором функций: открывания как одного файла, так и директории, перелистывание файлов при помощи кнопок “далее” и “обратно”, так же пишется информация о файле: имя файла, тип и размер в байтах.

В ходе выполнения работы, мной были закреплены навыки работы с объектно-ориентированным программированием в среде .NET, в том числе я познакомился с этапами разработки программного обеспечения. Получены навыки создания приложений для ОС Windows, среди них работа с графическим интерфейсом, подключение библиотек DGIPlus.

Реализованная мною программа была разработана в рамках учебного процесса, в связи с этим не имеет высокой конкурентно способности, тем не менее, в дальнейшем возможна оптимизация работы программы, увеличения числа функций, возможность редактирования графического файла

Библиографический список

1.      Щупак Ю.А. “Win32 API. Эффективная разработка приложений” Учебник - СПб.: ПИТЕР, 2007

.        “Компьютерная документация от А до Я”://www.compdoc.ru/prog/cpp/cpplesson95/index6.shtml

Приложение

Исходный текст программы.

Файл FilesListMaker.cpp

#include "stdafx.h"

#include "FilesListMaker.h"

#include <shlwapi.h> //add lib ShLwApi.libFilesListMaker::AddFilter(TCHAR *tFilter)

{FilterToAdd;(FilterToAdd.FileExt,tFilter,FILTER_MAX_LEN);((LPWSTR)FilterToAdd.FileExt,FILTER_MAX_LEN);.push_back(FilterToAdd);

}FilesListMaker::DeleteFilter(TCHAR *tFilter)

{FilterToDel;(FilterToDel.FileExt,tFilter,FILTER_MAX_LEN);((LPWSTR)FilterToDel.FileExt,FILTER_MAX_LEN);<FileExtFilter>::iterator it=AllowedExtensions.begin();(it;it!=AllowedExtensions.end();it++)

{(!lstrcmp((*it).FileExt,FilterToDel.FileExt))

{.erase(it);;

}

}

}FilesListMaker::AddFile(TCHAR *tFullFileName)

{fnFileToAdd;(fnFileToAdd.FileName,PathFindFileName(tFullFileName),MAX_FILENAME_LEN);(fnFileToAdd.FullFilePath,tFullFileName,MAX_FULL_PATH_LEN);.push_back(fnFileToAdd);

}FilesListMaker::AddGroupOfFiles(TCHAR *tFileDir)

{fnFileToAdd;dir[MAX_FULL_PATH_LEN+2];_FIND_DATA w32SearchingFile;(&w32SearchingFile,sizeof(WIN32_FIND_DATA));(dir,tFileDir,MAX_FULL_PATH_LEN-1);(dir,_TEXT("\\*"));hFile=FindFirstFile(dir,&w32SearchingFile);(hFile!=INVALID_HANDLE_VALUE)

{(fnFileToAdd.FileName,w32SearchingFile.cFileName,(MAX_FILENAME_LEN,MAX_PATH));(fnFileToAdd.FullFilePath,tFileDir,MAX_FULL_PATH_LEN-MAX_FILENAME_LEN-1);(fnFileToAdd.FullFilePath,_TEXT("\\"));(fnFileToAdd.FullFilePath,fnFileToAdd.FileName);(FiltrateFile(fnFileToAdd.FullFilePath))

{.push_back(fnFileToAdd);

}

}(FindNextFile(hFile,&w32SearchingFile))

{(fnFileToAdd.FileName,w32SearchingFile.cFileName,(MAX_FILENAME_LEN,MAX_PATH));(fnFileToAdd.FullFilePath,tFileDir,MAX_FULL_PATH_LEN-MAX_FILENAME_LEN-1);(fnFileToAdd.FullFilePath,_TEXT("\\"));(fnFileToAdd.FullFilePath,fnFileToAdd.FileName);(FiltrateFile(fnFileToAdd.FullFilePath))

{.push_back(fnFileToAdd);

}

}(hFile);

/*vector<FileNames>::iterator it=Files.begin();(it;it!=Files.end();it++)

{(0,(*it).FullFilePath,

(*it).FileName,MB_OK);

}*/

}FilesListMaker::DeleteFileFromList(TCHAR* tFullPathToFile)

{<FileNames>::iterator it=Files.begin();(it;it!=Files.end();it++)

{.erase(it);;

}

}

}FilesListMaker::DelteFileFromListByIndex(long lIndex)

{.erase(Files.begin()+lIndex);

}FilesListMaker::ClearFileList()

{.erase(Files.begin(),Files.end());

}FilesListMaker::ClearFilterList()

{.erase(AllowedExtensions.begin(),.end());

}FilesListMaker::FiltrateFile(TCHAR *tFullPathToFile)

{FileExt[FILTER_MAX_LEN];(FileExt,PathFindExtension(tFullPathToFile),FILTER_MAX_LEN);((LPWSTR)FileExt,FILTER_MAX_LEN);<FileExtFilter>::iterator it=AllowedExtensions.begin();(it;it!=AllowedExtensions.end();it++)

{(!lstrcmp((*it).FileExt,FileExt))

{true;;

}

}false;

}* FilesListMaker::operator [](unsigned long lIndex)

{(lIndex<Files.size()&&(Files.size()>0))

{Files[lIndex].FullFilePath;

}

{(Files.size())Files[0].FullFilePath;return NULL;

}

}* FilesListMaker::GetShortNameByIndex(unsigned long lIndex)

{(lIndex<Files.size()&&(Files.size()>0))Files[lIndex].FileName;

{(Files.size())Files[0].FileName;return NULL;

}

}

Файл PictureViewer_with_GdiPlus.cpp

#include "stdafx.h"

#include "PictureViewer_with_GdiPlus.h"

#include "GDIPlusLoader.h"

#include "FilesListMaker.h"

#include <commdlg.h>

#include <shlobj.h>

#include <shlwapi.h>namespace AdvDrawing;

#define MAX_LOADSTRING 100

#define XStart 50

#define YStart 20

#define MinWidth 950

#define MinHeight 660

#define MaxWidth 1000

#define MaxHeight 700

#define OPENFILE 11

#define CHOOSEDIR 22

#define FORWARD 33

#define BACKWARD 44

#define FILESLIST 55

// Global Variables:hInst;                                                                         // current instanceszTitle[MAX_LOADSTRING];                                         // The title bar textszWindowClass[MAX_LOADSTRING];                        // the main window class name

// Forward declarations of functions included in this code module:                                     MyRegisterClass(HINSTANCE hInstance);                                   InitInstance(HINSTANCE, int);CALLBACK     WndProc(HWND, UINT, WPARAM, LPARAM);_PTR CALLBACK       About(HWND, UINT, WPARAM, LPARAM);Paint(HDC hdc, const RECT* rect, TCHAR* tFileName, HWND hWnd);APIENTRY _tWinMain(HINSTANCE hInstance,hPrevInstance,lpCmdLine,nCmdShow)

{GdiPlus;_PARAMETER(hPrevInstance);_PARAMETER(lpCmdLine);

// TODO: Place code here.msg;hAccelTable;

// Initialize global strings(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);(hInstance, IDC_PICTUREVIEWER_WITH_GDIPLUS, szWindowClass, MAX_LOADSTRING);(hInstance);

// Perform application initialization:(!InitInstance (hInstance, nCmdShow))

{FALSE;

}= LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_PICTUREVIEWER_WITH_GDIPLUS));

// Main message loop:(GetMessage(&msg, NULL, 0, 0))

{(msg.message==WM_DESTROY)

{.~GDIPlusLoader();

}(!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

{(&msg);(&msg);

}

}(int) msg.wParam;

}

//

// FUNCTION: MyRegisterClass()

//

// PURPOSE: Registers the window class.

//

// COMMENTS:

//

// This function and its usage are only necessary if you want this code

// function that was added to Windows 95. It is important to call this function

// so that the application will get 'well formed' small icons associated

// with it.

//MyRegisterClass(HINSTANCE hInstance)

{wcex;.cbSize = sizeof(WNDCLASSEX);.style                     = CS_HREDRAW | CS_VREDRAW;.lpfnWndProc       = WndProc;.cbClsExtra                   = 0;.cbWndExtra          = 0;.hInstance               = hInstance;.hIcon                           = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_PICTUREVIEWER_WITH_GDIPLUS));.hCursor                = LoadCursor(NULL, IDC_ARROW);.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);.lpszMenuName = MAKEINTRESOURCE(IDC_PICTUREVIEWER_WITH_GDIPLUS);.lpszClassName    = szWindowClass;.hIconSm               = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));RegisterClassEx(&wcex);

}

//

// FUNCTION: InitInstance(HINSTANCE, int)

//

// PURPOSE: Saves instance handle and creates main window

//

// COMMENTS:

//

// In this function, we save the instance handle in a global variable and

// create and display the main program window.

//InitInstance(HINSTANCE hInstance, int nCmdShow)

{hWnd;= hInstance; // Store instance handle in our global variable= CreateWindow(szWindowClass, szTitle,_OVERLAPPEDWINDOW,, YStart, MinWidth, MinHeight,, NULL, hInstance, NULL);(!hWnd)

{FALSE;

}(hWnd, nCmdShow);(hWnd);TRUE;

}

//

// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)

//

// PURPOSE: Processes messages for the main window.

//

// WM_COMMAND     - process the application menu

// WM_PAINT     - Paint the main window

// WM_DESTROY        - post a quit message and return

//

//CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

#define RELATIVE_X_OPForDBUTTON_COORD 4.2

#define RELATIVE_Y_OPForDBUTTON_COORD 14

#define BUTTON_WIDTH 38

#define BUTTON_HEIGHT 38

#define BUTTON_SPACING 40wmId, wmEvent;ps;RECT clRect;RECT* rWinSize;int CurWidth,CurHeight;long lListIndex=0;FilesListMaker GraphFiles;hdc;HWND hOpenFBut,hChooseDirBut,,hBackwBut,hFilesListLb;HBITMAP hOpFIc,hChDIc, hForwBIc, hBackwBIc;OPENFILENAME ofnOpenGr;BROWSEINFO biPath;ITEMIDLIST* iList;TCHAR FullPath[MAX_FULL_PATH_LEN], FileName[MAX_FILENAME_LEN];dwErr;txt[10];(message)

{WM_CREATE:=CreateWindow(_TEXT("BUTTON"),,_CHILD|BS_PUSHBUTTON|BS_BITMAP,//WS_CHILD,

,48,_WIDTH,_HEIGHT,,(OPENFILE),(NULL),NULL);(hOpenFBut,SW_SHOW);=CreateWindow(_TEXT("BUTTON"),,_CHILD|BS_PUSHBUTTON|BS_BITMAP,

,48+BUTTON_SPACING,_WIDTH,_HEIGHT,hWnd,(CHOOSEDIR),(NULL),NULL);(hChooseDirBut,SW_SHOW);=CreateWindow(_TEXT("BUTTON"),,_CHILD|BS_PUSHBUTTON|BS_BITMAP,

,570,_WIDTH,_HEIGHT,hWnd,(FORWARD),(NULL),NULL);(hForwBut,SW_SHOW);=CreateWindow(_TEXT("BUTTON"),,_CHILD|BS_PUSHBUTTON|BS_BITMAP,

,570,_WIDTH,_HEIGHT,hWnd,(BACKWARD),(NULL),NULL);(hBackwBut,SW_SHOW);=CreateWindow(_TEXT("LISTBOX"),

_TEXT("Список файлов"),_CHILD,//|LBS_DISABLENOSCROLL ,//|LBS_MULTICOLUMN,

,180,

,//BUTTON_WIDTH,

,//BUTTON_HEIGHT,,(FILESLIST),(NULL),NULL);(hFilesListLb,SW_SHOW);=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_OPFILE));=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_OPDIR));=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_FORW));=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BACKW));(hOpenFBut,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hOpFIc);(hChooseDirBut,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hChDIc);(hForwBut,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hForwBIc);(hBackwBut,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hBackwBIc);

//dwErr=GetLastError();

//swprintf(txt,10,L"%d",dwErr);

//MessageBox(0,txt,_TEXT(" "),MB_OK);(hOpenFBut);.AddFilter(_TEXT(".BMP"));.AddFilter(_TEXT(".JPEG"));.AddFilter(_TEXT(".JPG"));.AddFilter(_TEXT(".TIFF"));.AddFilter(_TEXT(".GIF"));.AddFilter(_TEXT(".PNG"));.lStructSize=sizeof(OPENFILENAME);.lpstrFile=FullPath;.nMaxFile=MAX_FULL_PATH_LEN;.lpstrFileTitle=FileName;.nMaxFileTitle=MAX_FILENAME_LEN;;WM_COMMAND:= LOWORD(wParam);= HIWORD(wParam);

// Parse the menu selections:(wmId)

{IDM_EXIT:(hWnd);;OPENFILE:(GetOpenFileName(&ofnOpenGr))

{

//MessageBox(hWnd,FullPath,FileName,MB_OK);(hFilesListLb,LB_ADDSTRING,0,(LPARAM)FileName);.AddFile(FullPath);

}++;(hFilesListLb,LB_SETCURSEL,(WPARAM)lListIndex,0);(hWnd,&clRect,TRUE);(hWnd);;CHOOSEDIR:=SHBrowseForFolder(&biPath);(iList,FullPath);.AddGroupOfFiles(FullPath);(long i=0; i<GraphFiles.GetFilesListSize();i++)(hFilesListLb,LB_ADDSTRING,0,

(LPARAM)GraphFiles.GetShortNameByIndex(i));=0;(hFilesListLb,LB_SETCURSEL,lListIndex,0);(hWnd,&clRect,TRUE);(hWnd);;FORWARD:(lListIndex<GraphFiles.GetFilesListSize()-1)++;lListIndex=0;(hFilesListLb,LB_SETCURSEL,lListIndex,0);(hWnd,&clRect,TRUE);(hWnd);;BACKWARD:(lListIndex)-;lListIndex=0;(hFilesListLb,LB_SETCURSEL,lListIndex,0);(hWnd,&clRect,TRUE);(hWnd);;FILESLIST:(hWnd,&clRect,TRUE);(hWnd);;

};;WM_PAINT:= BeginPaint(hWnd, &ps);(hWnd,&clRect);(hdc,&clRect,GraphFiles[lListIndex], hWnd);(hWnd, &ps);;WM_SIZING:=(RECT*)lParam;(rWinSize->right>MaxWidth)

{>right=MaxWidth;=MaxWidth;

}(rWinSize->bottom>MaxHeight)

{>bottom=MaxHeight;=MaxHeight;

}(rWinSize->right<MinWidth)

{>right=MinWidth;=MinWidth;

}(rWinSize->bottom<MinHeight)

{>bottom=MinHeight;=MinHeight;

}

{=rWinSize->bottom;=rWinSize->right;

}(hOpenFBut,HWND_TOP,

(int)((double)CurWidth/RELATIVE_X_OPForDBUTTON_COORD),

(int)((double)CurHeight/RELATIVE_Y_OPForDBUTTON_COORD),_WIDTH,BUTTON_HEIGHT,SWP_SHOWWINDOW);(hChooseDirBut,HWND_TOP,

(int)((double)CurWidth/RELATIVE_X_OPForDBUTTON_COORD),

(int)((double)CurHeight/RELATIVE_Y_OPForDBUTTON_COORD)+BUTTON_SPACING,_WIDTH,BUTTON_HEIGHT,SWP_SHOWWINDOW);(hForwBut,HWND_TOP,

(int)((double)CurWidth*0.7),

(int)((double)CurWidth*0.4),

(int)((double)(CurHeight-CurHeight/6.2)),_WIDTH,BUTTON_HEIGHT,SWP_SHOWWINDOW);(hFilesListLb,HWND_TOP,

(int)((double)CurWidth*0.005),

(int)((double)(CurHeight-CurHeight/1.36)),

(int)((double)CurWidth*0.17),

(int)((double)(CurHeight-CurHeight/2.5)),_SHOWWINDOW);;WM_SYSCOMMAND:(LOWORD(wParam))

{SC_MAXIMIZE:;:DefWindowProc(hWnd, message, wParam, lParam);;

};WM_DESTROY:(0);;:DefWindowProc(hWnd, message, wParam, lParam);

}0;

}Paint(HDC hdc, const RECT* rect, TCHAR* tFileName, HWND hWnd)

{

#define VERT_DIVIZOR 5

#define HOR_SPLITTER_DIVIZOR 4

#define IMAGE_BORDER_DIVIZOR 5

#define RIGHT_BORDER 3.5

#define BOTTOM_BORDER 3.5

#define INFO_LEN 50tTitle[]=_TEXT("Выберите изображение для просмотра:");tInfoStr1Title[]=_TEXT("Имя файла: ");tInfoStr2Title[]=_TEXT("Тип файла: ");tInfoStr3Title[]=_TEXT("Размер: ");tInfoStr1[INFO_LEN];tInfoStr2[INFO_LEN];tInfoStr3[INFO_LEN];tBuf1[INFO_LEN], tBuf2[INFO_LEN];tFList[]=_TEXT("Cписок файлов: ");iVLine=(int)((double)(rect->right/VERT_DIVIZOR));iHorSplitLine=(int)((double)(rect->bottom/HOR_SPLITTER_DIVIZOR));_FILE_ATTRIBUTE_DATA FileData;graph(hdc);MainPen(Color::Silver,3);BorderPen(Color::OrangeRed,3);Format;.SetAlignment(Gdiplus::StringAlignmentNear);//StringAlignment);.SetLineAlignment(StringAlignmentNear);mainFont(_TEXT("Arial"),22,FontStyleItalic);suppFont(_TEXT("Arial"),8,FontStyleItalic);clRect((REAL)rect->left,(REAL)rect->top,

(REAL)rect->right,(REAL)rect->bottom);GrBrush(clRect,Color(130,255,0,0),(255,0,0,255),);BgBrush(Color::LightGray);.FillRectangle(&BgBrush,clRect);TitleRect((REAL)iVLine+50,10,(REAL)rect->right,20+22);InfoRect1((REAL)10,10,(REAL)iVLine-5,16);InfoRect2((REAL)10,36,(REAL)iVLine-5,16);InfoRect3((REAL)10,62,(REAL)iVLine-5,16);FilesListRect((REAL)10,iHorSplitLine+10,(REAL)iVLine-5,16);.DrawString(tTitle,sizeof(tTitle)/sizeof(TCHAR)-1,

&mainFont,TitleRect,&Format,&GrBrush);.DrawString(tFList,sizeof(tFList)/sizeof(TCHAR)-1,

&suppFont,FilesListRect,&Format,&GrBrush);(tFileName==NULL)

{.DrawString(tInfoStr1Title,sizeof(tInfoStr1Title)/sizeof(TCHAR)-1,

&suppFont,InfoRect1,&Format,&GrBrush);.DrawString(tInfoStr2Title,sizeof(tInfoStr2Title)/sizeof(TCHAR)-1,

&suppFont,InfoRect2,&Format,&GrBrush);.DrawString(tInfoStr3Title,sizeof(tInfoStr3Title)/sizeof(TCHAR)-1,

&suppFont,InfoRect3,&Format,&GrBrush);

}

{(tFileName,GetFileExInfoStandard,&FileData);(tInfoStr3,tInfoStr3Title);(tBuf1,10,L"%d",FileData.nFileSizeLow);(tInfoStr3,tBuf1);(tInfoStr3,_TEXT(" байт"));(tInfoStr2,tInfoStr2Title);(tBuf1,PathFindExtension(tFileName),INFO_LEN);(tInfoStr2,tBuf1);(tInfoStr1,tInfoStr1Title);(tBuf1,PathFindFileName(tFileName),INFO_LEN);(tInfoStr1,tBuf1);.DrawString(tInfoStr1,-1,

&suppFont,InfoRect1,&Format,&GrBrush);.DrawString(tInfoStr2,-1,

&suppFont,InfoRect2,&Format,&GrBrush);.DrawString(tInfoStr3,-1,//sizeof(tInfoStr3)/sizeof(TCHAR)-1,

&suppFont,InfoRect3,&Format,&GrBrush);

}VerticalLine[2]={Point(iVLine,0),(iVLine,rect->bottom)};HorSplitLine[2]={Point(0,iHorSplitLine),(iVLine,iHorSplitLine)};.DrawLines(&BorderPen,VerticalLine,(VerticalLine)/sizeof(Point));.DrawLines(&BorderPen,HorSplitLine,(HorSplitLine)/sizeof(Point));PictureBorder((REAL)iVLine+50,(REAL)((int)((double)(rect->bottom/IMAGE_BORDER_DIVIZOR))+10),

(REAL)(rect->right-((int)((double)(rect->right/RIGHT_BORDER)))),

(REAL)(rect->bottom-((int)((double)(rect->bottom/BOTTOM_BORDER)))));.DrawRectangle(&MainPen,PictureBorder);(tFileName==NULL)

{.FillRectangle(&SolidBrush(Color::WhiteSmoke),);

}PicRect;(tFileName!=NULL)

{img(tFileName);.DrawImage(&img,PictureBorder);

}

Файл GdiPlusLoader.cpp

#include "stdafx.h"

#include "GdiPlusLoader.h"

#pragma comment(lib,"gdiplus.lib")

#ifndef DEBUG

#pragma comment(lib,"gdiplus.lib")

//#pragma comment(linker,"/delayload:gdiplus.dll")

#endifAdvDrawing

{::GDIPlusLoader()

{=true;::GdiplusStartupInput gdipInput;

__try

{::GdiplusStartup(&upToken,&gdipInput,0);

}

__except(1)

{=false;

}

}::~GDIPlusLoader()

{(bSuccessInit) Gdiplus::GdiplusShutdown(upToken);

}

}

Похожие работы на - Windows-приложение для просмотра графических файлов

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!