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

Рассмотрение Windows API, его основные функции и возможности. Основные элементы управления окном: кнопки, списки, окна редактирования, статические тексты. Работа с текстовой информацией при программировании в Windows. Описание алгоритма работы программы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 10.02.2015
Размер файла 850,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

6

Размещено на http://www.allbest.ru

Министерство образования РФ

Государственное образовательное учреждение

высшего профессионального образования

«Ижевский государственный технический университет имени М.Т. Калашникова»

Кафедра Вычислительная Техника

Пояснительная записка

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

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

Ижевск 2014

Введение

Windows пpедоставляет множество возможностей чеpез Windows API (Application Programming Interface). Windows API - это большая коллекция полезных функций, pасполагающихся в ОС и готовых для использования пpогpаммами. Эти функции находятся в динамически подгpужаемых библиотеках (DLL), таких как kernel32.dll, user32.dll и gdi32.dll. Kernel32.dll содеpжит API функции, взаимодействующие с памятью и упpавляющие пpоцессами. User32.dll контpолиpует пользовательский интеpфейс. Gdi32.dll ответственнен за гpафические опеpации. Кpоме этих тpех "основных", существуют также дpугие dll, котоpые можно использовать. Windows-пpогpаммы динамически подсоединяются к этим библиотекам, то есть код API функций не включается в исполняемый файл. Инфоpмация находится в библиотеках импоpта. Необходимо слинковать пpогpаммы с пpавильными библиотеками импоpта, иначе они не смогут найти эти функции. Когда Windows пpогpамма загpужается в память, Windows читает инфоpмацию, сохpаненную в пpогpамме. Эта инфоpмация включает имена функций, котоpые пpогpамма использует и DLL, в котоpых эти функции pасполагаются. Когда Windows находит подобную инфоpмацию в пpогpамме, она вызывает библиотеки и испpавляет в пpогpамме вызовы этих функций, так что контpоль всегда будет пеpедаваться по пpавильному адpесу. Существует две категоpии API функций: одна для ANSI и дpугая для Unicode. Hа конце имен API функций для ANSI стоит "A", напpимеp, MessageBoxA. В конце имен функций для Unicode находится "W". Windows 95 от пpиpоды поддеpживает ANSI и WIndows NT Unicode. Обычно имеем дело с ANSI стpоками (массивы символов, оканчивающиеся на NULL). Размеp ANSI-символа - 1 байт. В то вpемя как ANSI достаточна для евpопейских языков, она не поддеpживает некотоpые восточные языки, в котоpых есть несколько тысяч уникальных символов. В этих случаях в дело вступает UNICODE. Размеp символа UNICODE - 2 байта, и поэтому может поддеpживать 65536 уникальных символов. Hо по большей части, будет использоваться include-файл, котоpый может опpеделить и выбpать подходящую для платфоpмы функцию.

Главным элементом программы в среде Windows является окно. Для каждого окна определяется своя процедура (исходя из терминологии, принятой в MS-DOS, такую процедуру следует назвать «процедурой прерывания», для Windows же принята другая терминология - процедура обратного вызова CALLBACK) обработки сообщений.

Окно может содержать элементы управления: кнопки, списки, окна редактирования, статические тексты и др. Эти элементы, по сути, также являются окнами, но обладающими особыми свойствами. События, происходящие с этими элементами (и самим окном), приводят к приходу сообщений в процедуру окна.

ОС Windows использует линейную адресацию памяти. Другими словами, всю память можно рассматривать как один сегмент. Для программиста на языке ассемблера это означает, что адрес любой ячейки памяти будет определяться содержимым одного 32-битного регистра, например EBX.

Следствием этого является то, что мы фактически не ограничены в объёме данных, кода или стека (объёме локальных переменных). Сегменты в тексте программы играют теперь другую роль. Они позволяют задать отдельным фрагментам кода (секциям) определённые свойства: запрет на запись, общий доступ и т. д.

ОС Windows является многозадачной средой. Каждая задача имеет своё адресное пространство и свою очередь сообщений. Более того, даже в рамках одной программы может быть осуществлена многозадачность - любая процедура может быть запущена как самостоятельная задача.

1. Назначение и область применения

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

алгоритм windows программирование редактирование

2. Технические характеристики

2.1 Постановка задачи на разработку программы

Работа с текстовой информацией при программировании в Windows одна из самых важных задач при разработке пользовательского интерфейса. Поэтому для реализации программы - «Текстовый редактор», необходимо в первую очередь знать основные приёмы работы с текстом в ОС Windows.

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

Таким образом, в алгоритме программы должна рассматриваться классическая структура программы под Windows: регистрация класса окна, создание главного окна, цикл обработки очереди сообщений, процедура главного окна.

2.2 Описание алгоритма и функционирования программы

В этом подразделе будет изложен подробный текстовый алгоритм разрабатываемой программы и его описание.

2.2.1 Описание алгоритма работы программы

В пункте 2.1. была приведена классическая структура программы под Windows. Разберём эти разделы по порядку:

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

Создание главного окна. На основе зарегистрированного класса с помощью функции CreateWindowsEx можно создать экземпляр окна. Как можно заметить, это весьма напоминает объектную модель программирования (ООП).

Цикл обработки очереди сообщений. Этот раздел является основным в работе программы под Windows. Его можно рассмотреть по порядку:

- Принять очередное сообщение из ряда сообщений данного приложения (GetMessage);

- Транслировать принятое сообщение в правильный порядок дополнительных сообщений (TranslateMessage);

- Передать оттранслированное сообщение, как порядок дополнительных сообщений, процедуре главного окна (DispatchMessage).

- Выход из цикла осуществляется посылкой окну сообщения WM_QUIT, которое функция GetMessage определит как конец обработки очереди сообщений.

Процедура главного окна. Данная процедура является основным приёмником управляющих сообщений, посылаемых от операционной системы окну.

2.2.2 Алгоритм функционирования программы

1. Инициализация программы;

2. Регистрация класса окна;

3. Создание и показ окна;

4. Цикл обработки сообщений;

5. Выход из программы.

2.3 Описание и обоснование выбора метода организации входных и выходных данных

Все типы данных и их структуры организованы в соответствии со стандартами, принятыми в Microsoft API.

Для программы, входными данными являются:

- данные, передаваемые функциями API;

- сообщения, передаваемые от ОС;

- текстовые файлы;

- текст, вводимый пользователем.

Выходными данными являются:

- главное окно;

- окно редактирования;

- результат обработки текста.

3. Листинг программы

3.1 Листинг файла rsrc.rc

#include "\masm32\include\resource.h"

500 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "MAINICON.ICO"

750 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "TOOLBAR.BMP"

600 MENUEX MOVEABLE IMPURE LOADONCALL DISCARDABLE

BEGIN

POPUP "&File", , , 0

BEGIN

MENUITEM "&New", 1000

MENUITEM "&Open", 1001

MENUITEM "", , 0x0800 /*MFT_SEPARATOR*/

MENUITEM "&Save", 1002

MENUITEM "Save &As", 1003

MENUITEM "", , 0x0800 /*MFT_SEPARATOR*/

MENUITEM "&Exit", 1010

END

POPUP "&Edit",,,0

BEGIN

MENUITEM "&Undo\tCtrl+Z",1100

MENUITEM "", , 0x0800 /*MFT_SEPARATOR*/

MENUITEM "&Cut\tCtrl+X",1101

MENUITEM "C&opy\tCtrl+C",1102

MENUITEM "&Paste\tCtrl+V",1103

MENUITEM "", , 0x0800 /*MFT_SEPARATOR*/

MENUITEM "&Delete\tDelete",1104

MENUITEM "", , 0x0800 /*MFT_SEPARATOR*/

MENUITEM "&Wordwrap\tF9", 1105

END

POPUP "&Help", , , 0

BEGIN

MENUITEM "&About", 1900

END

END

3.2 Листинг файла qikpad.asm

.386

.model flat, stdcall

option casemap :none

include qikpad.inc

; #########################################################################

.code

start:

invoke GetModuleHandle, NULL

mov hInstance, eax

invoke GetCommandLine

mov CommandLine, eax

invoke InitCommonControls

invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT

invoke ExitProcess,eax

; #########################################################################

WinMain proc hInst :DWORD,

hPrevInst :DWORD,

CmdLine :DWORD,

CmdShow :DWORD

LOCAL wc :WNDCLASSEX

LOCAL msg :MSG

LOCAL Wwd :DWORD

LOCAL Wht :DWORD

LOCAL Wtx :DWORD

LOCAL Wty :DWORD

LOCAL clBuffer[128] :BYTE

invoke LoadIcon,hInst,500

mov hIcon, eax

szText szClassName,"QikPad_Class"

mov wc.cbSize, sizeof WNDCLASSEX

mov wc.style, CS_HREDRAW or CS_VREDRAW \

or CS_BYTEALIGNWINDOW

mov wc.lpfnWndProc, offset WndProc

mov wc.cbClsExtra, NULL

mov wc.cbWndExtra, NULL

m2m wc.hInstance, hInst

invoke GetStockObject,HOLLOW_BRUSH

mov wc.hbrBackground, eax

mov wc.lpszMenuName, NULL

mov wc.lpszClassName, offset szClassName

m2m wc.hIcon, hIcon

invoke LoadCursor,NULL,IDC_ARROW

mov wc.hCursor, eax

m2m wc.hIconSm, hIcon

invoke RegisterClassEx, ADDR wc

mov Wwd, 500

mov Wht, 350

invoke GetSystemMetrics,SM_CXSCREEN

invoke TopXY,Wwd,eax

mov Wtx, eax

invoke GetSystemMetrics,SM_CYSCREEN

invoke TopXY,Wht,eax

mov Wty, eax

invoke CreateWindowEx,WS_EX_LEFT,

ADDR szClassName,

ADDR szUntitled,

WS_OVERLAPPEDWINDOW,

Wtx,Wty,Wwd,Wht,

NULL,NULL,

hInst,NULL

mov hWnd,eax

invoke LoadMenu,hInst,600

invoke SetMenu,hWnd,eax

invoke GetAppPath,ADDR PthBuffer

invoke GetCL,1, ADDR clBuffer

.if eax == 1

invoke Read_File_In,ADDR clBuffer,hEdit

.endif

invoke ShowWindow,hWnd,SW_SHOWNORMAL

invoke UpdateWindow,hWnd

StartLoop:

invoke GetMessage,ADDR msg,NULL,0,0

cmp eax, 0

je ExitLoop

invoke TranslateMessage, ADDR msg

invoke DispatchMessage, ADDR msg

jmp StartLoop

ExitLoop:

return msg.wParam

WinMain endp

; #########################################################################

WndProc proc hWin :DWORD,

uMsg :DWORD,

wParam :DWORD,

lParam :DWORD

LOCAL var :DWORD

LOCAL caW :DWORD

LOCAL caH :DWORD

LOCAL tbh :DWORD

LOCAL sbh :DWORD

LOCAL wWid :DWORD

LOCAL wHgt :DWORD

LOCAL hDC :DWORD

LOCAL Rct :RECT

LOCAL tbab :TBADDBITMAP

LOCAL tbb :TBBUTTON

LOCAL buffer1[128] :BYTE

LOCAL buffer2[128] :BYTE

.if uMsg == WM_COMMAND

.if wParam == 50

jmp New_File

.elseif wParam == 51

jmp Open_File

.elseif wParam == 52

invoke SaveFile

.elseif wParam == 53

jmp Edit_Cut

.elseif wParam == 54

jmp Edit_Copy

.elseif wParam == 55

jmp Edit_Paste

.elseif wParam == 56

jmp Edit_Undo

.endif

;======== menu commands ========

.if wParam == 1000

New_File:

invoke SendMessage,hEdit,EM_GETMODIFY,0,0

.if eax == TRUE

invoke Confirmation,hWin

.if eax == IDYES

invoke SaveFile

.elseif eax == IDCANCEL

mov eax, 0

ret

.endif

.endif

invoke SetWindowText,hEdit,NULL

invoke SetWindowText,hWin,ADDR szUntitled

invoke SendMessage,hStatus,SB_SETTEXT,2,NULL

.elseif wParam == 1001

Open_File:

invoke SendMessage,hEdit,EM_GETMODIFY,0,0

.if eax == TRUE

invoke Confirmation,hWin

.if eax == IDYES

invoke SaveFile

.elseif eax == IDCANCEL

mov eax, 0

ret

.endif

.endif

jmp @F

szTitleO db "Open A File",0

szFilterO db "All files",0,"*.*",0,

"Text files",0,"*.TEXT",0,0

@@:

invoke FillBuffer,ADDR szFileName,length szFileName,0

invoke GetFileName,hWin,ADDR szTitleO,ADDR szFilterO

cmp szFileName[0],0

je @F

invoke Read_File_In,ADDR szFileName,hEdit

invoke SetWindowText,hWin,ADDR szFileName

@@:

.elseif wParam == 1002

invoke SaveFile

.elseif wParam == 1003

invoke SaveFileAs

.endif

.if wParam == 1010

invoke SendMessage,hWin,WM_SYSCOMMAND,SC_CLOSE,NULL

.elseif wParam == 1900

invoke About

.endif

.if wParam == 1100

Edit_Undo:

invoke SendMessage,hEdit,WM_UNDO,0,0

.elseif wParam == 1101

Edit_Cut:

invoke SendMessage,hEdit,WM_CUT,0,0

.elseif wParam == 1102

Edit_Copy:

invoke SendMessage,hEdit,WM_COPY,0,0

.elseif wParam == 1103

Edit_Paste:

invoke SendMessage,hEdit,WM_PASTE,0,0

.elseif wParam == 1104

invoke SendMessage,hEdit,WM_CLEAR,0,0

.elseif wParam == 1105

invoke WordWrap

.endif

;====== end menu commands ======

.elseif uMsg == WM_SETFOCUS

invoke SetFocus,hEdit

.elseif uMsg == WM_SYSCOLORCHANGE

invoke Do_ToolBar,hWin

.elseif uMsg == WM_CREATE

invoke Do_ToolBar,hWin

invoke Do_Status,hWin

mov WrapFlag, 0

invoke EditML,NULL,0,30,300,200,hWin,700,WrapFlag

mov hEdit, eax

invoke SetWindowLong,hEdit,GWL_WNDPROC,EditProc

mov lpEditProc, eax

szText OFFWrap," Wrap OFF"

invoke SendMessage,hStatus,SB_SETTEXT,1,ADDR OFFWrap

.elseif uMsg == WM_SIZE

invoke SendMessage,hToolBar,TB_AUTOSIZE,0,0

invoke MoveWindow,hStatus,0,0,0,0,TRUE

invoke GetClientRect,hToolBar,ADDR Rct

push Rct.bottom

pop tbh

invoke GetClientRect,hStatus,ADDR Rct

push Rct.bottom

pop sbh

invoke GetClientRect,hWin,ADDR Rct

push Rct.right

pop wWid

push Rct.bottom

pop wHgt

mov eax, tbh

sub wHgt, eax

mov eax, sbh

sub wHgt, eax

add tbh, 2

sub wHgt, 2

invoke MoveWindow,hEdit,0,tbh,wWid,wHgt,TRUE

.elseif uMsg == WM_CLOSE

invoke SendMessage,hEdit,EM_GETMODIFY,0,0

.if eax == TRUE

invoke Confirmation,hWin

.if eax == IDYES

invoke SaveFile

.elseif eax == IDCANCEL

mov eax, 0

ret

.endif

.endif

.elseif uMsg == WM_DESTROY

invoke PostQuitMessage,NULL

return 0

.endif

invoke DefWindowProc,hWin,uMsg,wParam,lParam

ret

WndProc endp

TopXY proc wDim:DWORD, sDim:DWORD

shr sDim, 1

shr wDim, 1

mov eax, wDim

sub sDim, eax

return sDim

TopXY endp

; ########################################################################

EditML proc szMsg:DWORD,tx:DWORD,ty:DWORD,wd:DWORD,ht:DWORD,

hParent:DWORD,ID:DWORD,Wrap:DWORD

LOCAL hCtl :DWORD

LOCAL hFnt :DWORD

LOCAL eStyle :DWORD

szText CtlStyle,"EDIT"

mov eStyle, WS_VISIBLE or WS_CHILDWINDOW or \

WS_VSCROLL or ES_NOHIDESEL or \

ES_AUTOVSCROLL or ES_MULTILINE

.if Wrap == 0

or eStyle,WS_HSCROLL or ES_AUTOHSCROLL

.endif

invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR CtlStyle,szMsg,

eStyle,tx,ty,wd,ht,hParent,ID,hInstance,NULL

mov hCtl, eax

invoke GetStockObject,SYSTEM_FIXED_FONT

mov hFnt, eax

invoke SendMessage,hCtl,WM_SETFONT,hFnt,TRUE

mov eax, hCtl

ret

EditML endp

; ########################################################################

Read_File_In proc lpszDiskFile:DWORD, hEditControl:DWORD

LOCAL hFile :DWORD

LOCAL hMem$ :DWORD

LOCAL ln :DWORD

LOCAL br :DWORD

LOCAL txtBuffer[64] :BYTE

invoke CreateFile,lpszDiskFile,GENERIC_READ,FILE_SHARE_READ,

NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL

mov hFile, eax

invoke GetFileSize,hFile,NULL

mov ln, eax

.if ln > 32767

invoke CloseHandle,hFile

szText tooBig,"Sorry, file is too large for QIKPAD"

invoke MessageBox,hWnd,ADDR tooBig,ADDR szDisplayName,MB_OK

xor eax, eax

ret

.endif

invoke SysAllocStringByteLen,0,ln

mov hMem$, eax

invoke ReadFile,hFile,hMem$,ln,ADDR br,NULL

invoke SetWindowText,hEditControl,hMem$

invoke SysFreeString,hMem$

invoke CloseHandle,hFile

invoke lnstr,ADDR szOpenedAt

inc eax

invoke MemCopy,ADDR szOpenedAt,ADDR txtBuffer,eax

invoke dwtoa,ln,ADDR sizeBuffer

invoke lstrcat,ADDR txtBuffer,ADDR sizeBuffer

invoke lstrcat,ADDR txtBuffer,ADDR bytes

invoke SendMessage,hStatus,SB_SETTEXT,2,ADDR txtBuffer

ret

Read_File_In endp

; ########################################################################

Confirmation proc hMain:DWORD

szText ConfirmMsg,"File not saved, save it now ?"

invoke MessageBox,hMain,ADDR ConfirmMsg,ADDR szDisplayName,

MB_YESNOCANCEL or MB_ICONQUESTION

ret

Confirmation endp

; ########################################################################

Write_2_Disk proc lpszFile_Name:DWORD

LOCAL ln :DWORD

LOCAL hMem$ :DWORD

LOCAL hFile :DWORD

LOCAL bw :DWORD

LOCAL txtBuffer[64]

invoke CreateFile,lpszFile_Name,

GENERIC_WRITE,

NULL,

NULL,

CREATE_ALWAYS,

FILE_ATTRIBUTE_NORMAL,

NULL

mov hFile,eax

invoke GetWindowTextLength,hEdit

mov ln, eax

inc ln

invoke SysAllocStringByteLen,0,ln

mov hMem$, eax

invoke GetWindowText,hEdit,hMem$,ln

invoke WriteFile,hFile,hMem$,ln,ADDR bw,NULL

invoke SysFreeString,hMem$

invoke CloseHandle,hFile

invoke SendMessage,hEdit,EM_SETMODIFY,FALSE,0

invoke lnstr,ADDR szSavedAt

inc eax

invoke MemCopy,ADDR szSavedAt,ADDR txtBuffer,eax

invoke dwtoa,ln,ADDR sizeBuffer

invoke lstrcat,ADDR txtBuffer,ADDR sizeBuffer

invoke lstrcat,ADDR txtBuffer,ADDR bytes

invoke SendMessage,hStatus,SB_SETTEXT,2,ADDR txtBuffer

ret

Write_2_Disk endp

SaveFileAs proc

jmp @F

szTitleS db "Save file as",0

szFilterS db "All files",0,"*.*",0,

"Text files",0,"*.TEXT",0,0

@@:

invoke FillBuffer,ADDR szFileName,length szFileName,0

invoke SaveFileName,hWnd,ADDR szTitleS,ADDR szFilterS

cmp szFileName[0],0

je @F

invoke Write_2_Disk,ADDR szFileName

invoke SetWindowText,hWnd,ADDR szFileName

@@:

ret

SaveFileAs endp

; #########################################################################

SaveFile proc

LOCAL buffer[128]:BYTE

invoke GetWindowText,hWnd,ADDR buffer,128

invoke lstrcmp,ADDR buffer,ADDR szUntitled

.if eax == 0

invoke SaveFileAs

ret

.endif

invoke Write_2_Disk,ADDR buffer

ret

SaveFile endp

; #########################################################################

WordWrap proc

LOCAL mFlag:DWORD

LOCAL ln :DWORD

LOCAL hMem$:DWORD

invoke SendMessage,hEdit,EM_GETMODIFY,0,0

mov mFlag, eax

invoke GetWindowTextLength,hEdit

mov ln, eax

inc ln

invoke SysAllocStringByteLen,0,ln

mov hMem$, eax

invoke GetWindowText,hEdit,hMem$,ln

invoke DestroyWindow,hEdit

.if WrapFlag == 0

mov WrapFlag, 1

szText WrapON," Wrap ON"

invoke SendMessage,hStatus,SB_SETTEXT,1,ADDR WrapON

.elseif WrapFlag == 1

mov WrapFlag, 0

szText WrapOFF," Wrap OFF"

invoke SendMessage,hStatus,SB_SETTEXT,1,ADDR WrapOFF

.endif

invoke EditML,NULL,0,30,300,200,hWnd,700,WrapFlag

mov hEdit, eax

invoke SetWindowLong,hEdit,GWL_WNDPROC,EditProc

mov lpEditProc, eax

invoke SendMessage,hWnd,WM_SIZE,0,0

invoke SetWindowText,hEdit,hMem$

invoke SysFreeString,hMem$

invoke SendMessage,hEdit,EM_SETMODIFY,mFlag,0

invoke SetFocus,hEdit

ret

WordWrap endp

; #########################################################################

EditProc proc hCtl :DWORD,

uMsg :DWORD,

wParam :DWORD,

lParam :DWORD

.if uMsg == WM_KEYUP

.if wParam == VK_F1

invoke About

.elseif wParam == VK_F9

invoke WordWrap

.elseif wParam == VK_ESCAPE

invoke SendMessage,hWnd,WM_SYSCOMMAND,SC_CLOSE,NULL

return 0

.endif

.endif

invoke CallWindowProc,lpEditProc,hCtl,uMsg,wParam,lParam

ret

EditProc endp

; #########################################################################

About proc

szText AboutMsg,"QikPad Text Editor",13,10,\

"Copyright © MASM32 1999"

invoke ShellAbout,hWnd,ADDR szDisplayName,ADDR AboutMsg,hIcon

ret

About endp

; #########################################################################

end start

3.3 Листинг файла qikpad.inc

include \MASM32\INCLUDE\windows.inc

include \MASM32\INCLUDE\masm32.inc

include \MASM32\INCLUDE\gdi32.inc

include \MASM32\INCLUDE\user32.inc

include \MASM32\INCLUDE\kernel32.inc

include \MASM32\INCLUDE\Comctl32.inc

include \MASM32\INCLUDE\comdlg32.inc

include \MASM32\INCLUDE\shell32.inc

include \MASM32\INCLUDE\oleaut32.inc

includelib \MASM32\LIB\masm32.lib

includelib \MASM32\LIB\gdi32.lib

includelib \MASM32\LIB\user32.lib

includelib \MASM32\LIB\kernel32.lib

includelib \MASM32\LIB\Comctl32.lib

includelib \MASM32\LIB\comdlg32.lib

includelib \MASM32\LIB\shell32.lib

includelib \MASM32\LIB\oleaut32.lib

WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD

WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD

TopXY PROTO :DWORD,:DWORD

FillBuffer PROTO :DWORD,:DWORD,:BYTE

Paint_Proc PROTO :DWORD,:DWORD

EditML PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD

Read_File_In PROTO :DWORD,:DWORD

Confirmation PROTO :DWORD

Write_2_Disk PROTO :DWORD

SaveFileAs PROTO

SaveFile PROTO

WordWrap PROTO

EditProc PROTO :DWORD,:DWORD,:DWORD,:DWORD

About PROTO

wsprintfA PROTO C :DWORD,:VARARG

wsprintf equ <wsprintfA>

szText MACRO Name, Text:VARARG

LOCAL lbl

jmp lbl

Name db Text,0

lbl:

ENDM

m2m MACRO M1, M2

push M2

pop M1

ENDM

return MACRO arg

mov eax, arg

ret

ENDM

.data

CommandLine dd 0

hWnd dd 0

hInstance dd 0

hIcon dd 0

hEdit dd 0

WrapFlag dd 0

lpEditProc dd 0

szDisplayName db "QikPad",0

szUntitled db "Untitled",0

szOpenedAt db "File opened at ",0

szSavedAt db "File saved at ",0

bytes db " bytes",0

sizeBuffer db 16 dup (?)

PthBuffer db 128 dup (?)

include toolbar.asm

include filedlgs.asm

include statusbr.asm

3.4 Листинг файла toolbar.asm

Do_ToolBar PROTO :DWORD

SetBmpColor PROTO :DWORD

include tbmacros.asm

.data

hTbBmp dd 0

hToolBar dd 0

.code

; ########################################################################

Do_ToolBar proc hWin :DWORD

LOCAL bSize :DWORD

LOCAL tbab :TBADDBITMAP

LOCAL tbb :TBBUTTON

invoke LoadBitmap,hInstance,750

mov hTbBmp,eax

Create_Tool_Bar 16, 16

TBextraData

TBblank

TBbutton 6, 50

TBbutton 7, 51

TBbutton 8, 52

TBblank

TBbutton 0, 53

TBbutton 1, 54

TBbutton 2, 55

TBbutton 3, 56

ret

Do_ToolBar endp

; ########################################################################

SetBmpColor proc hBitmap:DWORD

LOCAL mDC :DWORD

LOCAL hBrush :DWORD

LOCAL hOldBmp :DWORD

LOCAL hReturn :DWORD

LOCAL hOldBrush :DWORD

invoke CreateCompatibleDC,NULL

mov mDC,eax

invoke SelectObject,mDC,hBitmap

mov hOldBmp,eax

invoke GetSysColor,COLOR_BTNFACE

invoke CreateSolidBrush,eax

mov hBrush,eax

invoke SelectObject,mDC,hBrush

mov hOldBrush,eax

invoke GetPixel,mDC,1,1

invoke ExtFloodFill,mDC,1,1,eax,FLOODFILLSURFACE

invoke SelectObject,mDC,hOldBrush

invoke DeleteObject,hBrush

invoke SelectObject,mDC,hBitmap

mov hReturn,eax

invoke DeleteDC,mDC

mov eax,hReturn

ret

SetBmpColor endp

3.5 Листинг файла tbmacros.asm

TBextraData MACRO

mov tbb.fsState, TBSTATE_ENABLED

mov tbb.dwData, 0

mov tbb.iString, 0

ENDM

; ------------------------------

TBbutton MACRO bID, cID

mov tbb.iBitmap, bID

mov tbb.idCommand, cID

mov tbb.fsStyle, TBSTYLE_BUTTON

invoke SendMessage,hToolBar,TB_ADDBUTTONS,1,ADDR tbb

ENDM

; ------------------------------

TBblank MACRO

mov tbb.iBitmap, 0

mov tbb.idCommand, 0

mov tbb.fsStyle, TBSTYLE_SEP

invoke SendMessage,hToolBar,TB_ADDBUTTONS,1,ADDR tbb

ENDM

; ------------------------------

Create_Tool_Bar MACRO Wd, Ht

szText tbClass,"ToolbarWindow32"

invoke CreateWindowEx,0,

ADDR tbClass,

ADDR szDisplayName,

WS_CHILD or WS_VISIBLE,

0,0,500,40,

hWin,NULL,

hInstance,NULL

;; or TBSTYLE_FLAT

mov hToolBar, eax

invoke SendMessage,hToolBar,TB_BUTTONSTRUCTSIZE,sizeof TBBUTTON,0

mov ecx,Wd

mov eax,Ht

shl eax,16

mov ax, cx

mov bSize, eax

invoke SendMessage,hToolBar,TB_SETBITMAPSIZE,0,bSize

invoke SetBmpColor,hTbBmp

mov hTbBmp,eax

mov tbab.hInst, 0

m2m tbab.nID, hTbBmp

invoke SendMessage,hToolBar,TB_ADDBITMAP,12,ADDR tbab

invoke SendMessage,hToolBar,TB_SETBUTTONSIZE,0,bSize

ENDM

3.6 Листинг файла statusbr.asm

Do_Status PROTO :DWORD

.data

hStatus dd 0

.code

; ##########################################################################

Do_Status proc hParent:DWORD

LOCAL sbParts[4] :DWORD

invoke CreateStatusWindow,WS_CHILD or WS_VISIBLE or \

SBS_SIZEGRIP,NULL, hParent, 200

mov hStatus, eax

mov [sbParts + 0], 125

mov [sbParts + 4], 250

mov [sbParts + 8], -1

invoke SendMessage,hStatus,SB_SETPARTS,3,ADDR sbParts

ret

Do_Status endp

3.7 Листинг файла filedlgs.asm

GetFileName PROTO :DWORD, :DWORD, :DWORD

SaveFileName PROTO :DWORD, :DWORD, :DWORD

FillBuffer PROTO :DWORD, :DWORD, :BYTE

.data

szFileName db 260 dup(0)

ofn OPENFILENAME <> ; structure

.code

; ########################################################################

GetFileName proc hParent:DWORD,lpTitle:DWORD,lpFilter:DWORD

mov ofn.lStructSize, sizeof OPENFILENAME

m2m ofn.hWndOwner, hParent

m2m ofn.hInstance, hInstance

m2m ofn.lpstrFilter, lpFilter

m2m ofn.lpstrFile, offset szFileName

mov ofn.nMaxFile, sizeof szFileName

m2m ofn.lpstrTitle, lpTitle

mov ofn.Flags, OFN_EXPLORER or OFN_FILEMUSTEXIST or \

OFN_LONGNAMES

invoke GetOpenFileName,ADDR ofn

ret

GetFileName endp

; #########################################################################

SaveFileName proc hParent:DWORD,lpTitle:DWORD,lpFilter:DWORD

mov ofn.lStructSize, sizeof OPENFILENAME

m2m ofn.hWndOwner, hParent

m2m ofn.hInstance, hInstance

m2m ofn.lpstrFilter, lpFilter

m2m ofn.lpstrFile, offset szFileName

mov ofn.nMaxFile, sizeof szFileName

m2m ofn.lpstrTitle, lpTitle

mov ofn.Flags, OFN_EXPLORER or OFN_LONGNAMES

invoke GetSaveFileName,ADDR ofn

ret

SaveFileName endp

FillBuffer proc lpBuffer:DWORD,lenBuffer:DWORD,TheChar:BYTE

push edi

mov edi, lpBuffer ; address of buffer

mov ecx, lenBuffer ; buffer length

mov al, TheChar ; load al with character

rep stosb ; write character to buffer until ecx = 0

pop edi

ret

FillBuffer endp

3.8 Листинг make-файла

@echo off

if not exist rsrc.rc goto over1

\masm32\bin\rc /v rsrc.rc

\masm32\bin\cvtres /machine:ix86 rsrc.res

:over1

if exist "qikpad.obj" del "qikpad.obj"

if exist "qikpad.exe" del "qikpad.exe"

\masm32\bin\ml /c /coff "qikpad.asm"

if errorlevel 1 goto errasm

if not exist rsrc.obj goto nores

\masm32\bin\Link /SUBSYSTEM:WINDOWS "qikpad.obj" rsrc.res

if errorlevel 1 goto errlink

dir "qikpad.*"

goto TheEnd

:nores

\masm32\bin\Link /SUBSYSTEM:WINDOWS "qikpad.obj"

if errorlevel 1 goto errlink

dir "qikpad.*"

goto TheEnd

:errlink

echo _

echo Link error

goto TheEnd

:errasm

echo _

echo Assembly Error

goto TheEnd

:TheEnd

pause

4. Результаты моделирования программы на ЭВМ

Рисунок 1 Ввод текста

Рисунок 2 «О программе»

Рисунок 3 Диалоговое окно 1

Рисунок 4 Диалоговое окно 2

Рисунок 5 Вкладка «File»

Рисунок 6 Вкладка «Edit»

Заключение

Таким образом, в данной курсовой работе были изучены и реализованы основные принципы работы с текстом в среде Windows. За основу алгоритма работы программы была выбрана классическая структура оконной программы Windows. Для демонстрации работы программы был выбран текстовый файл с исходным кодом на ассемблере MASM32.

Список литературы

1. Зубков С. В. Assembler для Dos, Windows и UNIX / Зубков Сергей Владимирович. - 3-е изд.,стер. - М.: ДМК Пресс ; Спб. : Питер, 2005. - 608 с. : ил. - (Серия «Для программистов»).

2. Пирогов В. Ю. Ассемблер для Windows. - 2-е изд., перераб. И доп. - СПб.: БХВ-Петербург, 2003. - 656 с.: ил.

3. Сайт http://www.firststeps.ru/mfc/winapi/win/

Размещено на Allbest.ru

...

Подобные документы

  • Введение в API-программирование. Транслирование клавиатурных сообщений в ASCII-коды. Текст программы на 32-битном ассемблере с применением API-функций. Функция для создания диалогового окна. Определение открываемого диска, каталога и имени файла.

    курсовая работа [40,6 K], добавлен 18.05.2014

  • Характеристика операционной системы. История развития Windows. Сравнительная характеристика версий Windows. Элементы и инструменты Windows XP. Прикладные программы в Windows XP. Работа настольных и портативных компьютеров под управлением Windows.

    доклад [19,1 K], добавлен 16.10.2011

  • Программа операционной системы. Перемещение и копирование объектов. Окна Windows, операционное меню, настройка свойств папки, вызов справки Windows. Работа с дисками, папками и файлами, с приложениями и документами. Стандартные программы Windows.

    контрольная работа [21,9 K], добавлен 29.01.2011

  • Все окна в ОС Windows имеют стандартную структуру. Выполнение лабораторной работы предусматривает приобретение навыков использования мышки как основного способа управления работой компьютера в среде Windows.

    лабораторная работа [191,1 K], добавлен 22.05.2007

  • Операционная система Microsoft с настраиваемым интерфейсом - Windows ХР. Работа стандартных прикладных программ: блокнот, графический редактор Paint, текстовой процессор WordPad, калькулятор, сжатие данных, агент сжатия, стандартные средства мультимедиа.

    контрольная работа [27,4 K], добавлен 25.01.2011

  • История Windows. Особенности Windows XP. Файловая система и структура. Основные принципы работы с системой. Начало и завершение работы, главное меню. Запуск и завершение программ. Окна и диалоги, панель задач. Установка Windows XP.

    курсовая работа [344,0 K], добавлен 24.04.2007

  • Классификация и структура автоматизированных информационных систем. Характеристика и устройство операционной системы Windows. Основные элементы и действия с окнами, кнопки управления их размерами. Сравнительная характеристика диалогового и простого окон.

    реферат [935,2 K], добавлен 02.02.2010

  • Таймер в Windows как устройство ввода информации, которое извещает приложение о том, что истек заданный интервал времени. Работа с таймером в условиях WinAPI, процесс 32-битного программирования на ассемблере под Windows. Результат выполнения программы.

    курсовая работа [165,6 K], добавлен 18.05.2014

  • Появление первых версий Windows, их графические интерфейсы и расширения для DOS. Семейства Windows 3.x и Windows 9.x, их особенности и основные функции. Эволюция технологии Plug and Play. Наиболее существенные улучшения в современных версиях Windows.

    реферат [162,3 K], добавлен 13.06.2014

  • Использование языка программирования Delphi для записи программ, представляющих собой последовательность инструкций. Классы и директивы в объектно-ориентированном программировании. Разработка демонстрационной программы. Процесс настройки Windows XP.

    дипломная работа [917,4 K], добавлен 15.01.2014

  • Программирование в операционной системе Windows. Работа с потоками и процессами ОС. Методы их создания. Основы вызова API-функций. Пример создания диалогового окна без использования файла ресурсов. Разработка программы с помощью 32-битного ассемблера.

    курсовая работа [107,6 K], добавлен 18.05.2014

  • Программирование для Windows. Возможности нового интерфейса. Окна и их управляющие компоненты. DOS и Windows: разные подходы к программированию. Особенности работы с базами данных. Структура программ в CA-Visual Objects. Генерация и обработка событий.

    курсовая работа [1,3 M], добавлен 02.03.2010

  • Общая характеристика и особенности операционной системы Windows 95, ее сетевые возможности, оценка преимуществ и недостатков. Сравнительная характеристика Windows 95, 98 и Millennium. Принципы работы и устройство принтеров, их части и назначение.

    курсовая работа [42,2 K], добавлен 05.03.2010

  • История создания. Windows 9x/NT. Операционная система Microsoft Windows. Преимущества и недостатки Windows. Некоторые клавиатурные комбинации Windows 9x и NT. Windows XP Professional. Наиболее совершенная защита.

    реферат [19,3 K], добавлен 18.07.2004

  • Работа с объектами операционной системы Windows: основные понятия и горячие клавиши. Создание и редактирование файлов и папок. Скриншоты и графический редактор Paint. Редактирование простейших текстовых документов в Блокноте. Работа с калькулятором.

    лабораторная работа [16,6 K], добавлен 30.11.2010

  • Понятие, типы и работа брандмауэра. Встроенные в Windows firewall. Windows XP SP2, доступ к настройкам файрвола Windows XP Service Pack 2. Windows Vista, разрешенный трафик. Windows 7, настройки активных профилей. Персоальные Firewall, уровни тестов.

    реферат [3,8 M], добавлен 19.11.2010

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

    лабораторная работа [156,1 K], добавлен 23.10.2013

  • Общее понятие об оперативной системе Windows Vista. Сравнительный анализ систем Windows XP и Windows Vista. Специфика процесса установки, трехмерный интерфейс Aero Glass, действие некоторых мини-приложений. Новости управления папками, работа в интернете.

    реферат [2,4 M], добавлен 01.02.2010

  • Windows Management Instrumentation как инструментарий управления Windows, его общая характеристика и возможности, функциональные особенности. Классы, события и безопасность WMI. Работа с объектами и коллекциями объектов, полученными в результате запросов.

    курсовая работа [428,8 K], добавлен 26.04.2011

  • Применение персональных компьютеров различных классов. Работа со встроенными программами Windows. Характеристика распространенных операционных систем (Windows 3.Х, 9Х, NT, 2000, XP, Windows7, Vista). Виды антивирусных программ и защита данных от вирусов.

    контрольная работа [32,3 K], добавлен 23.01.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.