Работа с текстовой информацией при программировании в Windows

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

Работа с текстовой информацией при программировании в Windows

1. Введение в API-программирование

(application programming interface) - интерфейс прикладного программирования (иногда интерфейс программирования приложений). Другими словами, это те возможности (функции, переменные, константы, классы), которые предоставляет приложение для использования прикладными программами.определяет функциональность, которую предоставляет программа (модуль, библиотека), при этом API позволяет абстрагироваться от того, как именно эта функциональность реализована.

Если программу (модуль, библиотеку) рассматривать как чёрный ящик, то API - это множество «ручек», которые доступны пользователю данного ящика, которые он может вертеть и дёргать, при этом ящик будет производить какие-то определенные действия понятные и необходимые пользователю, но пользователь, при этом, не имеет даже представления о их реализации.

Программные компоненты взаимодействуют друг с другом посредством API. При этом обычно компоненты образуют иерархию - высокоуровневые компоненты используют API низкоуровневых компонентов, а те, в свою очередь, используют API ещё более низкоуровневых компонентов.

API операционных систем

Практически все операционные системы (Unix, Windows, Mac OS, и т.д.) имеют API, с помощью которого программисты могут создавать приложения для этой операционной системы. Главный API операционных систем - это множество системных вызовов.

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

Widows API

Windows API - общее наименование целого набора базовых функций интерфейсов программирования приложений операционных систем семейств Windows (от Windows 3.11 до Windows 98) и Windows NT корпорации «Microsoft». Является самым прямым способом взаимодействия приложений с Windows.

Работа через Windows API - это наиболее близкий к системе способ взаимодействия с ней из прикладных программ.- 32х разрядный API для современных версий Windows. Самая популярная ныне версия. Win32 появился вместе с Windows NT и затем был перенесён (в несколько ограниченном виде) в системы серии Windows 9x.- 64-разрядная версия Win32, содержащая дополнительные функции для использования на 64-разрядных компьютерах.

Структура API-программ

Центральным понятием программирования в среде Windows является сообщение. Система посылает сообщение приложению, а то, в свою очередь, должно правильно отреагировать на него. Получателями сообщений являются функции окон приложения, на программирование которых и уходит большая часть времени при разработке API-приложений.

Классическая структура API-программы определяется четырьмя компонентами: инициализация; цикл ожидания, или цикл обработки сообщений; функция главного окна; другие функции. В простейшем случае последний компонент может отсутствовать. Два первых компонента располагаются в функции WinMain, остальные реализуются отдельными функциями.

Описание используемых API-функций

GetCommandLine

Функция извлекает командную строку для текущего процесса. Величина возвращаемого значения - указатель на строку.

Синтаксис:GetCommandLine(VOID) // У этой функции нет параметров.

Функция извлекает дескриптор указанного модуля, если файл был отображен в адресном пространстве вызывающего процесса. В случае успешного завершения возвращает идентификатор модуля; 0 - в противном случае.

Синтаксис:

GetModuleHandle (

ModuleName: PChar // Имя модуля (заканчивающееся пустым символом).

THandle;

InitCommonControls

Регистрирует указанные классы стандартного органа управления из динамически подключаемой библиотеки (DLL) стандартных органов управления. Возвращает значение ИСТИНА (TRUE) в случае успешного завершения, или иначе ЛОЖЬ (FALSE).

СинтаксисInitCommonControlsEx (lpInitCtrls

);

ExitProcess

Функция заканчивает работу процесса и всех его потоков. У этой функции нет возвращаемого значения.

Синтаксис:

VOID ExitProcess (

UINT uExitCode // код выхода для всех потоков

);

Функция вызывается системой как начальная точка входа, для базирующейся на Win32, прикладной программы. Если функция достигла цели, она завершается тогда, когда примет сообщение WM_QUIT, она должно возвратить значение выхода, содержащееся в параметре этого сообщения wParam. Если функция завершается перед вводом цикла сообщения, она должна возвратить 0.

Синтаксис:WINAPI WinMain

(hInstance, // дескриптор текущего экземпляра окнаhPrevInstance, // дескриптор предыдущего экземпляра окнаlpCmdLine, // указатель на командную строкуnCmdShow // показывает состояние окна

);

Функция загружает указанный ресурс значка из исполняемого (.exe) файла, связанного с экземпляром приложения. Если функция завершается успешно, возвращаемое значение - дескриптор недавно загруженного значка. Если функция завершается ошибкой, возвращаемое значение - NULL. Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.

Синтаксис:

HICON LoadIcon (

HINSTANCE hInstance, // Дескриптор экземпляра модуля

LPCTSTR lpIconName // Указатель на строку

);

GetStockObject

Функция извлекает дескриптор одного из предопределенных (стандартных) перьев, кистей, шрифтов или палитр. Если функция завершается успешно, возвращаемое значение - дескриптор затребованного логического объекта. Если функция завершается с ошибкой, возвращаемое значение - ПУСТО (NULL).

Синтаксис:

HGDIOBJ GetStockObject (

int fnObject // тип предопределенного объекта

);

LoadCursor

Функция загружает заданный ресурс курсора из исполняемого (.EXE) файла, связанного с экземпляром прикладной программы. Если функция завершается успешно, возвращаемое значение - дескриптор недавно загруженного курсора. Если функция завершается ошибкой, возвращаемое значение - ПУСТО (NULL).

Синтаксис:

HCURSOR LoadCursor (

HINSTANCE hInstance, // Дескриптор экземпляра модуля

LPCTSTR lpCursorName // Указатель на строку

);

RegisterClassEx

Регистрирует класс окна для последующего использования при вызове CreateWindowEx функции.

Синтаксис:

ATOM WINAPI RegisterClass (

WNDCLASS * lpWndClass // Указатель на WNDCLASS структуры.

);

GetSystemMetrics

Создает перекрывающее, всплывающее или дочернее окно с расширенным стилем окна. Если функция успешно завершила работу, возвращаемое значение - дескриптор созданного окна. Если функция завершилась ошибкой, возвращаемое значение - ПУСТО (NULL).

Синтаксис:CreateWindowEx (dwExStyle, // улучшенный стиль окнаlpClassName, // указатель на зарегистрированное имя классаlpWindowName, // указатель на имя окнаdwStyle, // стиль окнаx, // горизонтальная позиция окнаy, // вертикальная позиция окнаnWidth, // ширина окнаnHeight, // высота окнаhWndParent, // дескриптор родительского или окна владельцаhMenu, // дескриптор меню или ID дочернего окнаhInstance, // дескриптор экземпляра прикладной программыlpParam // указатель на данные создания окна

);

SetMenu

Функция назначает новое меню для заданного окна.

Синтаксис

BOOL SetMenu (

HWND hWnd, // Дескриптор окна, к которому назначается меню.

);

ShowWindow

Показать окно, установить статус показа. Если окно перед этим было видимо, возвращается значение - не 0. Если окно перед этим было не видимо, возвращаемое значение - 0.

Синтаксис:ShowWindow (hWnd, // дескриптор окнаnCmdShow // состояние показа окна

);

UpdateWindow

Функция обновляет рабочую область заданного окна, отправляя сообщение WM_PAINT окну, если регион обновления окна не пуст. Функция отправляет сообщение WM_PAINT непосредственно оконной процедуре указанного окна, обходя очередь приложения. Если регион обновления пуст, никакое сообщение не отправляется. Если функция завершается успешно, возвращаемое значение - не 0. Если функция завершается ошибкой, возвращаемое значение - 0.

Синтаксис:

BOOL UpdateWindow (

HWND hWnd // Дескриптор окна.

);

GetMessage

Получить очередное сообщение из очереди сообщений данного приложения.

Синтаксис:

BOOL GetMessage (

LPMSG lpMsg, // указатель на структуру

HWND hWnd, // указатель окна чьи сообщения нужно обрабатывать

UINT wMsgFilterMin, // номер мимимального сообщения для выборки

UINT wMsgFilterMax // номер максимального сообщения для выборки

);

TranslateMessage

Транслировать клавиатурные сообщения в ASCII-коды. Если сообщение переведено (то есть символьное сообщение помещено в очереди сообщений потока), величина возвращаемого значения не 0. Если сообщение не переведено (то есть символьное сообщение не помещено в очереди сообщений потока), величина возвращаемого значения - 0.

Синтаксис:

BOOL TranslateMessage (

const MSG* lpMsg // Указатель на структуру MSG, которая содержит информацию о сообщении извлеченную из очереди сообщений вызывающего потока при помощи использования функции GetMessage.

);

DispatchMessage

Вернуть управление Windows с передачей сообщения предназначенному окну. Величина возвращаемого значения определяется значением, которое возвращает оконная процедура. Несмотря на то, что это значение зависит от отправляемого сообщения, возвращаемое значение, как правило, игнорируется.

Синтаксис:DispatchMessage (MSG *lpmsg // указатель на структуру с сообщением

);

SendMessage

Функция отправляет заданное сообщение окну или окнам. Функция вызывает оконную процедуру для заданного окна и не возвращает значение до тех пор, пока оконная процедура не обработает сообщение. Чтобы отправить сообщение и возвратить немедленно значение, используйте функцию SendMessageCallback или SendNotifyMessage. Чтобы поместить сообщение в очередь сообщений потока и возвратить немедленно значение, используйте функцию PostMessage или PostThreadMessage.

Синтаксис

LRESULT SendMessage (

HWND hWnd, // Дескриптор окна

UINT Msg, // Определяет сообщение, которое будет отправлено

WPARAM wParam, // Определяет дополнительную конкретизирующую сообщение информацию

LPARAM lParam // Определяет дополнительную конкретизирующую сообщение информацию

);

SetWindowText

Функция изменяет текст заголовка заданного окна (если таковой имеется). Если определяемое окно - орган управления, то изменяется его текст. Однако SetWindowText не может изменить текст органа управления в другом приложении.

СинтаксисSetWindowText (hWnd, // дескриптор окна или элемента управленияlpString // адрес строчки

);

SetFocus

Функция устанавливает фокус клавиатуры в заданном окне. Окно должно быть связано с очередью сообщений вызывающего потока.

СинтаксисSetFocus

(HWND hWnd // дескриптор окна, которому передается фокус

);

SetWindowLong

Функция заменяет атрибуты указанного окна. Функция также устанавливает и 32-разрядное (long) значение при заданном смещении в дополнительную память окна.

Синтаксис

LONG SetWindowLong (

HWND hWnd, // Дескриптор окна

int nIndex, // Определяет отсчитываемое от нуля смещение устанавливаемого значения

LONG dwNewLong // Устанавливает заменяемое значение

);

MoveWindow

Функция изменяет позицию и габариты определяемого окна. Для окна верхнего уровня, позиция и габариты отсчитываются относительно левого верхнего угла экрана. Для дочернего окна, они - относительно левого верхнего угла рабочей области родительского окна.

СинтаксисMoveWindow (hWnd, // дескриптор окнаx, // позиция по горизонталиy, // позиция по вертикали

int nWidth, // ширинаnHeight, // высота

BOOL bRepaint // флажок перекраски

);

Функция возвращает координаты клиентской области окна. Клиентские координаты определяют верхний левый и правый нижний углы клиентской области. Поскольку клиентские координаты относительны левому углу клиентской области окна, то координаты верхнего левого угла является (0, 0).

BOOL GetClientRect (hWnd, // дескриптор окна

LPRECT lpRect // адрес структуры для клиентских координат

);

Функция указывает системе, что поток сделал запрос на то, чтобы завершить свою работу (выйти). Это обычно используется в ответ на сообщение WM_DESTROY.

СинтаксисPostQuitMessage (nExitCode // Определяет код завершения прикладной программы

);

Функция вызывается оконной процедурой по умолчанию, чтобы обеспечить обработку по умолчанию любого сообщения окна, которые приложение не обрабатывает. Эта функция гарантирует то, что обрабатывается каждое сообщение. Функция DefWindowProc вызывается с теми же самыми параметрами, принятыми оконной процедурой.

LRESULT DefWindowProc (

HWND hWnd, // Дескриптор оконной процедуры

UINT Msg, // сообщениеwParam, lParam

);

CreateFile

Функция создает или открывает каталог, физический диск, том, буфер консоли, коммуникационный ресурс, почтовый слот или именованный канал. Если функция завершается успешно, возвращаемое значение - открытый дескриптор заданного файла. Если функция завершается с ошибкой, возвращаемое значение - INVALID_HANDLE_VALUE.

Синтаксис:

HANDLE CreateFile (

LPCTSTR lpFileName, // имя файла - указатель на символьную строку с нулем в конце, устанавливающую имя объекта, который создается или открываться

DWORD dwDesiredAccess, // режим доступа (чтение, запись или то и другое)

DWORD dwShareMode, // режим совместного доступа (чтение, запись, оба или никакого действия)

LPSECURITY_ATTRIBUTES lpSecurityAttributes, // Указатель на структуру SECURITY_ATTRIBUTES, которая устанавливает может ли возвращенный дескриптор быть унаследован дочерними процессами

DWORD dwCreationDisposition, // как действовать

DWORD dwFlagsAndAttributes, // атрибуты и флажки файла

HANDLE hTemplateFile // Дескриптор файла шаблона с правом доступа GENERIC_READ

);

GetFileSize

Функция извлекает размер указанного файла. Размер файла, который может быть сообщен при помощи этой функции ограничивается значением двойного слова (DWORD). Если функция завершается успешно, возвращаемое значение - младшая часть двойного слова размера файла, и если параметр lpFileSizeHigh - не ПУСТО (NULL), функция помещает старшую часть двойного слова размера файла в переменную, на которую указывает этот параметр. Если функция завершается ошибкой, и lpFileSizeHigh равен ПУСТО (NULL), возвращаемое значение - INVALID_FILE_SIZE. Если функция завершается ошибкой, и lpFileSizeHigh - не ПУСТО (NULL), возвращаемое значение - INVALID_FILE_SIZE.

Синтаксис:GetFileSize (hFile, // дескриптор файла, размер которого должен возвратиться.lpFileSizeHigh // указатель на переменную, в которой возвращается старшее слово размера файла.

);

CloseHandle

Функция закрывает дескриптор открытого объекта, созданный функцией CreateFile. Если функция завершается успешно, величина возвращаемого значения - не 0. Если функция завершается с ошибкой, величина возвращаемого значения - 0.

Синтаксис:

BOOL CloseHandle (

HANDLE hObject // дескриптор открытого объекта

);

MessageBox

Отображается модальное диалоговое окно, которое содержит системный значок, набор кнопок, а также краткое заявление конкретного сообщения, например, статуса или об ошибке. В окне сообщения возвращает целое число, указывающее кнопку, нажатую пользователем. Если функция завершается ошибкой, возвращаемое значение равняется 0.

Синтаксис:

Int MessageBox (

HWND HWND, // Дескриптор владельца окна в окне сообщения. Если этот параметр - ПУСТО (NULL), окно сообщения не имеет окна владельца.

LPCTSTR lpText, // Указатель на символьную строку с нулем в конце, которая содержит сообщение показываемое на экране.

LPCTSTR lpCaption, // Указатель на символьную строку с нулем в конце, которая содержит заголовок диалогового окна (окна сообщения).

UINT uType // Содержание и поведение диалогового окна.

);

SysAllocStringByteLen

Принимает на входе строку ANSI и возвращает содержащую ее BSTR. Не выполняет никаких преобразований ANSI-Unicode.

BSTR SysAllocStringByteLen (

char FAR* psz, // Заканчивающаяся нулем строка, которую нужно скопировать, или NULL, если новая строка должна остаться неинициализированной.int len // Число байт, которые нужно скопировать из psz. После скопированных символов добавляется нулевой символ, т.е. всего выделяется len +1 байт

);

ReadFile

Функция читает данные из файла или того, что было создано функцией CreateFile, начиная с позиции, обозначенной указателем файла.

Синтаксис:ReadFile (hFile, // дескриптор файла, который читаетсяlpBuffer, // Указатель на буфер, который принимает прочитанные данные из файлаnNumberOfBytesToRead, // число байтов, которые читаются из файлаlpNumberOfBytesRead, // число прочитанных байтовlpOverlapped // асинхронный буфер

);

WriteFile

Функция пишет данные в файл с места, обозначенного указателем позиции в файле. Если функция завершается успешно, величина возвращаемого значения - не 0. Если функция завершается с ошибкой, величина возвращаемого значения - 0.

Синтаксис:WriteFile (hFile, // дескриптор файлаlpBuffer, // Указатель на буфер, содержащий данные, которые будут записаны в файлnNumberOfBytesToWrite, // число байтов, которые будут записаны в файлlpNumberOfBytesWritten, // число записанных байтовlpOverlapped // асинхронный буфер

);

DeleteFile

Функция удаляет существующий файл. Если функция завершается успешно, возвращаемое значение - не 0. Если функция завершается с ошибкой, величина возвращаемого значения - 0.

Синтаксис:DeleteFile (lpFileName // Указатель на символьную строку с нулем в конце, которая определяет имя удаляемого файла

);

GetWindowTextLength

Функция возвращает обратно длину, в символах, текста строки заголовка заданного окна (если окно имеет область заголовка). Если определяемое окно - орган управления, функция возвращает обратно длину текста внутри элемента управления. Однако, GetWindowTextLength не может получить длину текста поля редактирования текста в другом приложении.

СинтаксисGetWindowTextLength (hWnd // дескриптор окна или панели

// управления с текстом

);

SysFreeString

Освобождает строку, выделенную ранее с помощью SysAllocString, SysAllocString-ByteLen, SysReAllocString, SysAllocStringLen и SysReAllocStringLen.SysFreeString

(bstr // Выделенная ранее BSTR либо NULL. В последнем случае функция просто возвращает управление.

);

DestroyWindow

Функция разрушает заданное окно. Функция отправляет сообщения WM_DESTROY и WM_NCDESTROY окну, чтобы деактивировать его и удалить фокус клавиатуры из него. Функция также уничтожает меню окна, очищает очередь потоков сообщений, уничтожает таймеры, удаляет монопольное использование буфера обмена и разрывает цепочку просмотра окон буфера обмена (если окно имеет наверху цепочку просмотров).

Если заданное окно - родитель или владелец окон, DestroyWindow автоматически уничтожает связанные дочерние или находящиеся в собственности окна, когда она уничтожает окно владельца или родителя. Функция сначала уничтожает дочерние или находящиеся в собственности окна, а затем она уничтожает окно владельца или родителя.

Функция DestroyWindow уничтожает также и немодальные диалоговые окна, созданные функцией CreateDialog.

СинтаксисDestroyWindow (hWnd // дескриптор для разрушения окна

);

CallWindowProc

Функция передает информацию сообщения процедуре заданного окна.

СинтаксисCallWindowProc (lpPrevWndFunc, // указатель на предыдущую процедуруhWnd, // дескриптор окнаMsg, // сообщениеwParam, // первый параметр сообщенияlParam // второй параметр сообщения

GetOpenFileName

Функция создает диалоговое окно Открыть (Open), которое позволяет пользователю определить открываемый диск, каталог и имя файла или имена ряда файлов. Если пользователь задает имя файла и щелкает по кнопке ОК, возвращаемое значение не нуль. Буфер, указанный членом lpstrFile структуры OPENFILENAME содержит полный путь и имя файла, которые определил пользователь. Если пользователь прервал работу или закрыл диалоговое окно Открыть (Open) или произошла ошибка, возвращаемое значение - 0.

Синтаксис:GetOpenFileName (lpofn // Указатель на структуру OPENFILENAME, которая содержит информацию, используемую для инициализации диалогового окна. Когда GetOpenFileName возвращает значение, эта структура содержит информацию о файле, выбранном пользователем.

);

GetSaveFileName

Функция создает стандартное диалоговое окно Сохранить (Save), которое позволяет пользователю определить диск, каталог и имя файла, которое нужно сохранить. Если пользователь задает имя файла и щелкает по кнопке ОК и функция завершается успешно, возвращаемое значение не 0.

Синтаксис:

BOOL GetSaveFileName (

LPOPENFILENAME lpofn // Указатель на структуру OPENFILENAME, которая содержит информацию, используемую, чтобы инициализировать диалоговое окно. Когда GetSaveFileName возвращает значение, эта структура содержит информацию о выбранном пользователем файле.

2. Текст программы

программирование программа ассемблер текстовый

qikpad.asm

386flat, stdcall; 32 bit memory model casemap:none; чувствительно к регистру

include qikpad.inc; локально включаем этот файл

code:GetModuleHandle, NULLhInstance, eaxGetCommandLineCommandLine, eaxInitCommonControlsWinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULTExitProcess, eaxproc hInst:DWORD,:DWORD,:DWORD,:DWORD

;====================

; положим LOCALs в stack

;====================wc:WNDCLASSEXmsg:MSGWwd:DWORDWht:DWORDWtx:DWORDWty:DWORDclBuffer[128]:BYTE

;==================================================

; Заполните WNDCLASSEX структуры с необходимыми переменными

;==================================================LoadIcon, hInst, 500; иконка IDhIcon, eaxszClassName, «QikPad_Class»wc.cbSize, sizeof WNDCLASSEXwc.style, CS_HREDRAW or CS_VREDRAW \CS_BYTEALIGNWINDOWwc.lpfnWndProc, offset WndProcwc.cbClsExtra, NULLwc.cbWndExtra, NULLm wc.hInstance, hInstGetStockObject, HOLLOW_BRUSHwc.hbrBackground, eaxwc.lpszMenuName, NULLwc.lpszClassName, offset szClassNamem wc.hIcon, hIconLoadCursor, NULL, IDC_ARROWwc.hCursor, eaxm wc.hIconSm, hIconRegisterClassEx, ADDR wc

;================================

; Центр окна следующих размеров

;================================

mov Wwd, 800

mov Wht, 600GetSystemMetrics, SM_CXSCREENTopXY, Wwd, eaxWtx, eaxGetSystemMetrics, SM_CYSCREENTopXY, Wht, eaxWty, eaxCreateWindowEx, WS_EX_LEFT,szClassName,szUntitled,_OVERLAPPEDWINDOW,, Wty, Wwd, Wht,, NULL,, NULLhWnd, eaxLoadMenu, hInst, 600; menu IDSetMenu, hWnd, eaxGetAppPath, ADDR PthBuffer GetCL, 1, ADDR clBuffer

; -

; Возвращаемое значение 1 является сигналом успешной работы

; -eax == 1Read_File_In, ADDR clBuffer, hEditShowWindow, hWnd, SW_SHOWNORMALUpdateWindow, hWnd

;=========================================

; повторять, пока PostQuitMessage передает

;=========================================:GetMessage, ADDR msg, NULL, 0,0eax, 0ExitLoopTranslateMessage, ADDR msgDispatchMessage, ADDR msgStartLoop:msg.wParamendpproc hWin:DWORD,:DWORD,:DWORD,:DWORDvar:DWORDcaW:DWORDcaH:DWORDtbh:DWORDsbh:DWORDwWid:DWORDwHgt:DWORDhDC:DWORDRct:RECTtbab:TBADDBITMAPtbb:TBBUTTONbuffer1 [128]:BYTE; these are two spare buffersbuffer2 [128]:BYTE; for text manipulation etc.uMsg == WM_COMMAND

;======== menu commands ========wParam == 1000_File:SendMessage, hEdit, EM_GETMODIFY, 0,0eax == TRUEConfirmation, hWineax == IDYESSaveFileeax == IDCANCELeax, 0SetWindowText, hEdit, NULLSetWindowText, hWin, ADDR szUntitledSendMessage, hStatus, SB_SETTEXT, 2, NULLwParam == 1001_File:SendMessage, hEdit, EM_GETMODIFY, 0,0eax == TRUEConfirmation, hWineax == IDYESSaveFileeax == IDCANCELeax, 0@Fdb «Open A File», 0db «All files», 0, «*.*», 0,

«Text files», 0, «*.TEXT», 0,0

@@:FillBuffer, ADDR szFileName, length szFileName, 0GetFileName, hWin, ADDR szTitleO, ADDR szFilterOszFileName[0], 0;<< ноль если нажата dlgbox@FRead_File_In, ADDR szFileName, hEditSetWindowText, hWin, ADDR szFileName

@@:wParam == 1002SaveFilewParam == 1003SaveFileAswParam == 1010SendMessage, hWin, WM_SYSCOMMAND, SC_CLOSE, NULLwParam == 1900AboutwParam == 1100_Undo:SendMessage, hEdit, WM_UNDO, 0,0wParam == 1101_Cut:SendMessage, hEdit, WM_CUT, 0,0wParam == 1102_Copy:SendMessage, hEdit, WM_COPY, 0,0wParam == 1103_Paste:SendMessage, hEdit, WM_PASTE, 0,0wParam == 1104SendMessage, hEdit, WM_CLEAR, 0,0wParam == 1105WordWrap

;====== end menu commands ======uMsg == WM_SETFOCUSSetFocus, hEdituMsg == WM_CREATEDo_Status, hWinWrapFlag, 0EditML, NULL, 0,30,300,200, hWin, 700, WrapFlaghEdit, eaxSetWindowLong, hEdit, GWL_WNDPROC, EditProclpEditProc, eaxuMsg == WM_SIZEMoveWindow, hStatus, 0,0,0,0, TRUERct.bottomtbh; toolbar heightGetClientRect, hStatus, ADDR RctRct.bottomsbh; status bar heightGetClientRect, hWin, ADDR RctRct.rightwWidRct.bottomwHgteax, tbhwHgt, eaxeax, sbhwHgt, eaxtbh, 2wHgt, 2MoveWindow, hEdit, 0, tbh, wWid, wHgt, TRUEuMsg == WM_CLOSESendMessage, hEdit, EM_GETMODIFY, 0,0eax == TRUEConfirmation, hWineax == IDYESSaveFileeax == IDCANCELeax, 0uMsg == WM_DESTROYPostQuitMessage, NULL0DefWindowProc, hWin, uMsg, wParam, lParamendpproc wDim:DWORD, sDim:DWORDsDim, 1; divide screen dimension by 2wDim, 1; divide window dimension by 2eax, wDim; copy window dimension into eaxsDim, eax; sub half win dimension from half screen dimensionsDimendpproc szMsg:DWORD, tx:DWORD, ty:DWORD, wd:DWORD, ht:DWORD,:DWORD, ID:DWORD, Wrap:DWORDhCtl:DWORDhFnt:DWORDeStyle:DWORDCtlStyle, «EDIT»eStyle, WS_VISIBLE or WS_CHILDWINDOW or \_VSCROLL or ES_NOHIDESEL or \_AUTOVSCROLL or ES_MULTILINEWrap == 0eStyle, WS_HSCROLL or ES_AUTOHSCROLLCreateWindowEx, WS_EX_CLIENTEDGE, ADDR CtlStyle, szMsg,, tx, ty, wd, ht, hParent, ID, hInstance, NULLhCtl, eaxGetStockObject, SYSTEM_FIXED_FONThFnt, eaxSendMessage, hCtl, WM_SETFONT, hFnt, TRUEeax, hCtlendp_File_In proc lpszDiskFile:DWORD, hEditControl:DWORDhFile:DWORDhMem$:DWORDln:DWORDbr:DWORDtxtBuffer[64]:BYTECreateFile, lpszDiskFile, GENERIC_READ, FILE_SHARE_READ,, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULLhFile, eaxGetFileSize, hFile, NULLln, eaxln > 32767CloseHandle, hFiletooBig, «Файл слишком большой!!!»MessageBox, hWnd, ADDR tooBig, ADDR szDisplayName, MB_OKeax, eaxSysAllocStringByteLen, 0, lnhMem$, eaxReadFile, hFile, hMem$, ln, ADDR br, NULLSetWindowText, hEditControl, hMem$SysFreeString, hMem$CloseHandle, hFilelnstr, ADDR szOpenedAteaxMemCopy, ADDR szOpenedAt, ADDR txtBuffer, eaxdwtoa, ln, ADDR sizeBufferlstrcat, ADDR txtBuffer, ADDR sizeBufferlstrcat, ADDR txtBuffer, ADDR bytesSendMessage, hStatus, SB_SETTEXT, 2, ADDR txtBuffer_File_In endpproc hMain:DWORDConfirmMsg, «File not saved, save it now?»MessageBox, hMain, ADDR ConfirmMsg, ADDR szDisplayName,_YESNOCANCEL or MB_ICONQUESTIONendp_2_Disk proc lpszFile_Name:DWORDln:DWORDhMem$:DWORDhFile:DWORDbw:DWORD txtBuffer[64]

; -

; обрезает файл до нулевой длины, если он существует

; -CreateFile, lpszFile_Name,; Указатель на имя файла_WRITE,; режим доступа (чтение-запись)

NULL,

NULL,; указатель на атрибуты безопасности

CREATE_ALWAYS,; как создать_ATTRIBUTE_NORMAL,; атрибуты файловhFile, eaxGetWindowTextLength, hEditln, eaxlnSysAllocStringByteLen, 0, lnhMem$, eaxGetWindowText, hEdit, hMem$, lnWriteFile, hFile, hMem$, ln, ADDR bw, NULLSysFreeString, hMem$CloseHandle, hFileSendMessage, hEdit, EM_SETMODIFY, FALSE, 0lnstr, ADDR szSavedAteaxMemCopy, ADDR szSavedAt, ADDR txtBuffer, eaxdwtoa, ln, ADDR sizeBufferlstrcat, ADDR txtBuffer, ADDR sizeBufferlstrcat, ADDR txtBuffer, ADDR bytesSendMessage, hStatus, SB_SETTEXT, 2, ADDR txtBuffer_2_Disk endpproc@Fdb «Save file as», 0db «All files», 0, «*.*», 0,

«Text files», 0, «*.TEXT», 0,0

@@:FillBuffer, ADDR szFileName, length szFileName, 0SaveFileName, hWnd, ADDR szTitleS, ADDR szFilterSszFileName[0], 0;<< ноль, если нажата dlgbox@FWrite_2_Disk, ADDR szFileNameSetWindowText, hWnd, ADDR szFileName

@@:endpprocbuffer[128]:BYTE

; -

; проверить, есть ли название

; -

invoke GetWindowText, hWnd, ADDR buffer, 128

invoke lstrcmp, ADDR buffer, ADDR szUntitledeax == 0SaveFileAsWrite_2_Disk, ADDR bufferendpprocmFlag:DWORDln:DWORDhMem$:DWORDSendMessage, hEdit, EM_GETMODIFY, 0,0mFlag, eaxGetWindowTextLength, hEditln, eaxlnSysAllocStringByteLen, 0, lnhMem$, eaxGetWindowText, hEdit, hMem$, lnDestroyWindow, hEditWrapFlag == 0WrapFlag, 1WrapON,» Wrap ON»SendMessage, hStatus, SB_SETTEXT, 1, ADDR WrapONWrapFlag == 1WrapFlag, 0WrapOFF,» Wrap OFF»SendMessage, hStatus, SB_SETTEXT, 1, ADDR WrapOFFEditML, NULL, 0,30,300,200, hWnd, 700, WrapFlaghEdit, eaxSetWindowLong, hEdit, GWL_WNDPROC, EditProclpEditProc, eaxSendMessage, hWnd, WM_SIZE, 0,0SetWindowText, hEdit, hMem$SysFreeString, hMem$SendMessage, hEdit, EM_SETMODIFY, mFlag, 0SetFocus, hEditendpproc hCtl:DWORD,:DWORD,:DWORD,:DWORDuMsg == WM_KEYUPwParam == VK_F1AboutwParam == VK_F9WordWrapwParam == VK_ESCAPESendMessage, hWnd, WM_SYSCOMMAND, SC_CLOSE, NULL0CallWindowProc, lpEditProc, hCtl, uMsg, wParam, lParamendpprocAboutMsg, «Текстовый редактор Граховой Анастасии», 13,10,\

«Анастасия © 2013»ShellAbout, hWnd, ADDR szDisplayName, ADDR AboutMsg, hIconendpstart

filedlgs.asm

GetFileName PROTO:DWORD,:DWORD,:DWORDPROTO:DWORD,:DWORD,:DWORDPROTO:DWORD,:DWORD,:BYTEdb 260 dup(0)OPENFILENAME <>; structureproc hParent:DWORD, lpTitle:DWORD, lpFilter:DWORDofn.lStructSize, sizeof OPENFILENAMEm ofn.hWndOwner, hParentm ofn.hInstance, hInstancem ofn.lpstrFilter, lpFilterm ofn.lpstrFile, offset szFileNameofn.nMaxFile, sizeof szFileNamem ofn.lpstrTitle, lpTitleofn. Flags, OFN_EXPLORER or OFN_FILEMUSTEXIST or \_LONGNAMESGetOpenFileName, ADDR ofnendpproc hParent:DWORD, lpTitle:DWORD, lpFilter:DWORDofn.lStructSize, sizeof OPENFILENAMEm ofn.hWndOwner, hParentm ofn.hInstance, hInstancem ofn.lpstrFilter, lpFilterm ofn.lpstrFile, offset szFileNameofn.nMaxFile, sizeof szFileNamem ofn.lpstrTitle, lpTitleofn. Flags, OFN_EXPLORER or OFN_LONGNAMESGetSaveFileName, ADDR ofnendpproc lpBuffer:DWORD, lenBuffer:DWORD, TheChar:BYTEediedi, lpBuffer; адрес буфераecx, lenBuffer; длина буфераal, TheChar; загрузить др. с характером stosb; написать тип в буфере до тех пор пока ECX = 0

pop ediendp

rsrc.rc

#include «\masm32\include\resource.h»

ICON MOVEABLE PURE LOADONCALL DISCARDABLE «MAINICON.ico»

MENUEX MOVEABLE IMPURE LOADONCALL DISCARDABLE«&Файл», 0«&Создать», 1000 «&Открыть…», 1001

MENUITEM «&Сохранить…», 1002

MENUITEM «Сохранить &как», 1003

MENUITEM «», 0x0800 /*MFT_SEPARATOR*/«&Закрыть», 1010«&Правка», 0«&Отменить\tCtrl+Z», 1100«», 0x0800 /*MFT_SEPARATOR*/«&Вырезать\tCtrl+X», 1101«&Копировать\tCtrl+C», 1102«&Вставить\tCtrl+V», 1103«&Удалить\tDelete», 1104«&Справка», 0«&О блокноте», 1900

Вывод

В результате выполнения данной курсовой работы был изучен один из разделов операционной системы - работа с текстовой информацией при программировании в Windows. Была написана программа на 32-битном ассемблере с применением API-функций.

Похожие работы на - Работа с текстовой информацией при программировании в Windows

 

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