Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
моя записка.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
681.98 Кб
Скачать

Список использованной литературы

  1. Ганеев, Р.М. Проектирование интерфейса пользователя средствами WIN32 API. / Р.М. Ганеев – М.: Горячая линия - Телеком, 2002. — 338 с.

  2. Дамп памяти [Электронный ресурс]. - 2012. - Режим доступа http://ru.wikipedia.org/wiki/Дамп_памяти - Загл. с экрана.

  3. Джосьютис, Н. C++ Стандартная библиотека. Для профессионалов/ Н. Джосьютис – Санкт-Петербург: Питер, 2004 – 730 с.

  4. Климов, А. Русский_проект: Функции Windows Api. / А. Климов – Санкт-Петербург: Питер, 1999-2000. – 552с.

  5. Методические указания к выполнению дипломного проекта для студентов специальностей 1 40 01 01 «Программное обеспечение информационных технологий» и 1 40 01 02 «Информационные системы и технологии» / Сост. О.В. Бугай, И.А. Бухвалова, А.Т. Ковальков, Ю.Б. Попова, Н.А. Разорёнов, И.Н. Шунько. – БНТУ, 2008. – 29 с.

  6. Рихтер, Дж. Windows для профессионалов: программирование для Windows 95 и Windows NT 4 на базе WIN32 API; / Дж. Рихтер – М.: Издательский отдел “Русская редакция” TOO “Channel Trading Ltd”, 1997. – 712 с.

  7. Сорока, Т. Русский справочник по Win 32 API / Т. Сорока. – Санкт-Петербург: BHV, 2001-2002. – 345 с.

  8. Что такое DLL и зачем они нужны? [Электронный ресурс]. - 2012. - Режим доступа http://www.inattack.ru/article/chto-takoe-dll-i-zachem-oni-nuzhnyi/13.html#.T7tXmFLVv - Загл. с экрана.

  9. BMP [Электронный ресурс]. - 2012. - Режим доступа http://ru.wikipedia.org/wiki/BMP - Загл. с экрана.

Список листов графической части

Лист 1 – Схема алгоритма функции StructBmp(HWND).

Лист 2 – Схема алгоритма функции SaveBmp(HWND).

Лист 3 – Тестирование приложений

Лист 4 – Тестирование приложений

Приложение а

ЛИСТИНГ ПРОЕКТА

Код bmp.cpp(dll):

#include <windows.h>

#include <TCHAR.h>

#include <stdio.h>

#include "resource.h"

#include "DllBmp.h"

extern "C" _declspec(dllexport) void StructBmp(HWND hdlg)

{

OPENFILENAME fn;

DWORD dwCount;

TCHAR szFile[256]; // переменная для хранения имени выбранного файла

BYTE bytes[10000];

char temp[10] = "\0";

char damp[10000] = "\0";

tagBITMAPFILEHEADER tbFH;

tagBITMAPINFOHEADER tbIH;

tagRGBQUAD tR;

ZeroMemory(&tbFH, sizeof(tagBITMAPFILEHEADER));

ZeroMemory(&tbIH, sizeof(tagBITMAPINFOHEADER));

ZeroMemory(&tR, sizeof(tagRGBQUAD));

TCHAR buffer[10000];

// инициализация полей струтктуры OPENFILENAME

eroMemory(&fn, sizeof(fn));

fn.lStructSize = sizeof(fn);

fn.hwndOwner = hdlg;

fn.lpstrFile = szFile;

fn.lpstrFile[0] = '\0';

fn.nMaxFile = sizeof(szFile);

fn.lpstrFilter = L"AlZl\0*.*\0BMPt\0*.BMP\0";

fn.nFilterIndex = 1;

fn.lpstrFileTitle = NULL;

fn.nMaxFileTitle = 0;

fn.lpstrInitialDir = NULL;

fn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

if (GetOpenFileName(&fn)==TRUE)

{

HANDLE hFile = CreateFile(fn.lpstrFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);

ReadFile(hFile, &tbFH, sizeof(tagBITMAPFILEHEADER), &dwCount, NULL);

ReadFile(hFile, &tbIH, sizeof(tagBITMAPINFOHEADER), &dwCount, NULL);

ReadFile(hFile, &tR, sizeof(tagRGBQUAD), &dwCount, NULL);

int i = wsprintf(buffer, _T(" Заголовок BMP файла. \r\n\r\n"));

i += wsprintf(buffer + i, _T("Тип файла 0x%4d\r\n"), tbFH.bfType);

i += wsprintf(buffer + i, _T("Длина файла в Байта %4d\r\n"), tbFH.bfSize);

i += wsprintf(buffer + i, _T("Cмещение до битов изображения %d\r\n\r\n"), tbFH.bfOffBits);

i += wsprintf(buffer + i, _T("Ширина изображения в пикселах %d\r\n"), tbIH.biWidth);

i += wsprintf(buffer + i, _T("Высота изображения в пикселах %d\r\n"), tbIH.biHeight);

i += wsprintf(buffer + i, _T("Количество бит на пиксел %d\r\n"), tbIH.biBitCount);

i += wsprintf(buffer + i, _T("Тип сжатия для сжатых изображений %s\r\n"), tbIH.biCompression ? L"BI_RLE8\0" : L"BI_RGB\0");

i += wsprintf(buffer + i, _T("Размер изображения %d\r\n"), tbIH.biSizeImage);

i += wsprintf(buffer + i, _T("Число плоскостей для целевого устройства %d\r\n"), tbIH.biPlanes);

i += wsprintf(buffer + i, _T("Горизонтальное разрешение в DPI %d\r\n"), tbIH.biXPelsPerMeter);

i += wsprintf(buffer + i, _T("Вертикальное разрешение в DPI %d\r\n"), tbIH.biYPelsPerMeter);

i += wsprintf(buffer + i, _T("Количество цветов в политре %d\r\n"), tbIH.biClrUsed);

i += wsprintf(buffer + i, _T("Колличество важных цветов RGB_QUAD %d\r\n"), tbIH.biClrImportant);

i += wsprintf(buffer + i, _T(" Палитра BMP файла. \r\n\r\n"));

i += wsprintf(buffer + i, _T("Синий: %d\r\n"), tR.rgbBlue);

i += wsprintf(buffer + i, _T("Зеленый: %d\r\n"), tR.rgbGreen);

i += wsprintf(buffer + i, _T("Красный: %d\r\n"), tR.rgbRed);

i += wsprintf(buffer + i, _T("Резервный: %d\r\n"), tR.rgbReserved);

SetDlgItemText(hdlg, IDC_EDIT_BMP, buffer);

ReadFile(hFile, bytes, 10000, &dwCount, NULL);

for(int i = 0; i < dwCount; i++)

{

_itoa(bytes[i], temp, 16);

strcat(damp, temp);

strcat(damp, " ");

}

SetDlgItemTextA(hdlg, IDC_EDIT_DAMP, damp);

MessageBox(hdlg,L"Файл успешно открыт!",L"Сообщение", MB_OK);

}

}

extern "C" _declspec(dllexport) void InfoBmp(HWND hdlg)

{

TCHAR bufer[10000];

int j = wsprintf(bufer, _T("№№ байтов | Описание \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("1-2 | Заголовок bmp-файла \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("3-6 | Размер файла на диске \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("7-10 | Зарезервировано \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("11-14 | Смещение от начала структуры \r\n | BITMAPFILEHEADER до битовой карты \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("15-18 | Число байт,и занимаемых структурой \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("19-22 | Ширина рисунка, в пикселах \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("23-26 | Высота рисунка, в пикселах \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("27-28 | Количество битовых плоскостей \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("29-30 | Число битов, характеризующих 1 пиксел \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("31-34 | Тип сжатия (BI_RGB, BI_RLE8, BI_RLE4,\r\n | BI_BITFIELDS, BI_JPEG) \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("35-38 | Размер рисунка (в байтах) \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("39-42 | biXPelsPerMeter \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("43-46 | biYPelsPerMeter \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("47-50 | Количество цветов в палитре,\r\n | котрые могут использоватся в рисунке. \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("51-54 | Количество цветов в палитре, \r\n |котрые действительно используются в рисунке. \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("55-118 | Палитра \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

j += wsprintf(bufer + j, _T("119 и далее | Цветовая характеристика каждого пиксела по строкам \r\n"));

j += wsprintf(bufer + j, _T("---------------------------------------------------------- \r\n"));

SetDlgItemText(hdlg, IDC_BMP, bufer);

}

extern "C" _declspec(dllexport) void SaveBmp(HWND hdlg)

{

OPENFILENAME fn; // структура диалогового окна

TCHAR szFile[260]; // переменная для хранения имени выбранного файла

DWORD dwCount;

wchar_t text[10000] = _T("\0");

// инициализация полей струтктуры OPENFILENAME

ZeroMemory(&fn, sizeof(fn));

fn.lStructSize = sizeof(fn);

fn.hwndOwner = hdlg;

fn.lpstrFile = szFile;

fn.lpstrFile[0] = '\0';

fn.nMaxFile = sizeof(szFile);

fn.lpstrFilter = L"All\0*.*\0txt\0*.TXT\0";

fn.nFilterIndex = 1;

fn.lpstrFileTitle = NULL;

fn.nMaxFileTitle = 0;

fn.lpstrInitialDir = NULL;

fn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

if (GetSaveFileName(&fn)==TRUE)

{

wchar_t str[10000];

wchar_t rn[] = _T("\r\n");

GetDlgItemTextW(hdlg, IDC_EDIT_BMP, (LPWSTR)str, 2*SendDlgItemMessage(hdlg, IDC_EDIT_BMP, WM_GETTEXTLENGTH, 0, 0));

wcscat(text,str); wcscat(text,rn);

ZeroMemory(&str, sizeof(str));

GetDlgItemTextW(hdlg, IDC_EDIT_DAMP, (LPWSTR)str, 2*SendDlgItemMessage(hdlg, IDC_EDIT_DAMP, WM_GETTEXTLENGTH, 0, 0));

wcscat(text,str); wcscat(text,rn);

ZeroMemory(&str, sizeof(str));

GetDlgItemTextW(hdlg, IDC_BMP, (LPWSTR)str, 2*SendDlgItemMessage(hdlg, IDC_BMP, WM_GETTEXTLENGTH, 0, 0));

wcscat(text,str); wcscat(text,rn);

HANDLE hFile = CreateFile(fn.lpstrFile, GENERIC_READ | GENERIC_WRITE,

0, NULL, CREATE_ALWAYS, 0, NULL);

WriteFile(hFile, text, sizeof(text), &dwCount, NULL);

CloseHandle(hFile);

MessageBox(hdlg,(_T(" %d"),fn.lpstrFile),L"Данные сохранены в:", MB_OK);

}

}

Код заголовочного файла “DllBmp.h”

#include <windows.h>

#include <stdio.h>

extern "C" _declspec(dllexport) void StructBmp(HWND);

extern "C" _declspec(dllexport) void InfoBmp(HWND);

extern "C" _declspec(dllexport) void SaveBmp(HWND);