РефератыИнформатика, программированиеТеТекстовий редактор під Windows

Текстовий редактор під Windows

Міністерство освіти та науки України


Кіровоградський Державний Технічний університет


Кафедра програмного забезпечення


Курсова робота


з дисципліни “Програмування на мові ASM-86” на тему:


Текстовий редактор під Windows



Зміст


1. Вступ


2. Постановка задачі


3. Обґрунтування вибору методів розв’язку задачі


4. Алгоритм програми


5. Реалізація програми


6. Системні вимоги


7. Інструкція для користувача


8. Висновки


9. Використана література


Додаток



1. Вступ

Тепер комп’ютери відіграють у житті людини все більшу та більш роль. Раніше, коли ще не було комп’ютерів, чи вони були мало розповсюдженні, все робилося вручну. Коли комп’ютери одержали широке розповсюдження, комп’ютер став допомагати людині, бо він може багато операцій робити набагато швидше, ніж людина.


Інформація - цінна річ, тому для її збереження в сучасному суспільстві використовують все частіше персональний комп‘ютер. При перегляді текстових файлів виникає потреба в зручних в користуванні та розумінні програм переглядачів текстових файлів.



2. Постановка задачі

Розробити текстовий редактор під Windows (типу Notepad) на мові програмування ASM-86. Програма повинна виконувати основні дії над введеним текстом.



3. Обґрунтування вибору методів розв’язку задачі

Отже, необхідно написати текстовий редактор під Windows. Дана програма призначена для перегляду текстових файлів різного розміру. Програма може бути використана будь яким користувачем ЕОМ для перегляду потрібної інформації. При виборі алгоритму програми у мене не виникло варіантів. Тут все дуже просто. В Windows вже є функції API для роботи з текстом, іх тільки потрібно правильно викликати. Ще потрібно правильно написати обробники повідомлень.



4. Алгоритм програми

Читаємо командний рядок.


Читаємо іконку та курсор з ресурсів.


Будування головного вікна.


Ініціалізація акселераторів.


Отримання повідомлення


Якщо це WM_QUIT, то перехід до пункту 11.


Перетворимо акселератори в IDM*


Перетворимо повідомлення від клавіш


Відішлемо назад.


Перехід до пункту 5.


Закінчити програму.



5. Реалізація програми

Програма написана на мові ASM-86 з використанням команд процесора 386. Вона складається з головної програми, яка читає командний рядок, будує головне вікно, та організує головний цикл програми. Та з обробників повідомлень вікна, які і викликають функції для роботи з текстом.


Вона працює на будь якій машині де WINDOWS. При написанні програми для реалізації роботи з текстом та файлом були використані функції API WINDOWS.


Програма компілюється Turbo Assembler, зв’язується за допомогою TLINK32, та компілюються ресурси за допомогою brcc32.


tasm /m /ml /D_TASM_ winpad. asm


brcc32 winpad. rc


tlink32 /Tpe /aa /c /x winpad. obj,,,,,winpad. res



6. Системні вимоги

IBM сумісний комп’ютер із мікропроцесором Intel 80386 або старшим.


Операційна система - Windows 3.1 або старша


Пам’ять - 2M і вище



7. Інструкція для користувача

Для запуску текстового редактора під Windows, потрібно зайти в меню “Пуск", вибрати “Выполнить” та в командному рядку набрати Notepad. Exe та натиснути Enter. Також можна набрати ім’я файлу, який потрібно редагувати.


Після запуску програми з’являється оболонка, в якій вже можна набирати текст, причому, можна використовувати операції з блоком. Також, в програмі є меню, в якому є опції для читання файлу, для запису файлу, для операцій з буфером, та вивід інформації про програму.



8. Висновки

Отже, на мові ASM-86 створено текстовий редактор під Windows (типу Notepad). При постійній роботі з комп‘ютером досить часто потрібно переглянути файл. Тому дана програма є незамінною в роботі. Вона є простою в користуванні та розумінні. Під час написання цієї програми був розібраний метод писання програм під Windows.



9. Використана література

1) “Програмування на мові Асемблера ЕС ЕВМ" З.С. Брич, В.I. Воющ Москва 1989 р. ст. 166


2).“Програмування на сучасних мовах програмування”. Москва 1990 р. ст. 206


3) “Основи мови” Асемблер” В.I. Криволап. Москва 1997р. ст.309


4) “Ассемблер для початкiвцiв” М.П. Шукiн. Київ 1980р. ст.155


5) “Турбо Асемблер” Л.В. Захаров. Харків 1995 р ст.178


6) “Макро Асемблер” К.С. Кропiйко, О.Д. Богатирова. Київ - “Наука” 1991р.


7) Електронний довідник BOOK.



Додаток


Лістинг програми


; winpad. asm


; Графическое win32-приложение - текстовый редактор


;


; Компиляция TASM


; tasm /m /ml /D_TASM_ winpad. asm


; brcc32 winpad. rc


; tlink32 /Tpe /aa /c /x winpad. obj,,,,,winpad. res


include def32. inc


include user32. inc


include kernel32. inc


include comdlg32. inc


ID_MENUequ700h


ID_ACCELequ701h


ID_ABOUTequ702h


MAXSIZE equ 260; максимальное имя файла


MEMSIZEequ 65535; максимальный размер временного буфера в памяти


EditIDequ 1


.386


. model flat


. const


c_w_namedb 'Asmpad95',0; это и имя класса и имя основного окна


edit_classdb 'edit',0; предопределённое имя класса для редактора


changes_msgdb 'Save changes? ',0


filter_stringdb 'All Files',0,'*. *',0; маски для Get*FileName


db 'Text Files',0,'*. txt',0,0


. data


; структура, использующаяся Get*FileName


ofnOPENFILENAME <SIZE ofn,?,?,offset filter_string,?,?,?,offset buffer,MAXSIZE,0,?,?,?,?,?,?,0,?,?,? >


; стурктура, описывающая наш основной класс


wcWNDCLASSEX <SIZE WNDCLASSEX,CS_HREDRAW or CS_VREDRAW,offset win_proc,0,0,?,?,?,COLOR_WINDOW+1, ID_MENU,offset c_w_name,0>


flag_untitleddb1; = 1 если имя файла не определено (новый файл)


. data?


h_editwindowdd? ; идентификатор окна редактора


h_acceldd? ; идентификатор массива акселераторов


p_memorydd? ; адрес буфера в памяти


SizeReadWritedd?


msg_MSG<>


recRECT<>


bufferdbMAXSIZE dup (?) ; имя файла


window_titledbMAXSIZE dup (?), 12 dup (?)


. code


_start:


callGetCommandLine; получим нашу командную строку


movedi,eax


moval,' '


movecx,MAXSIZE


repnescasb; найдём конец имени нашей программы


cmpbyte ptr [edi],0


jecmdline_empty


movesi,edi


movedi,offset buffer


repmovsb


movflag_untitled,0


cmdline_empty:


; подготовим и зарегистрируем класс


xorebx,ebx


callGetModuleHandle; определим наш идентификатор


movesi,eax


movwc. hInstance,eax; и сохраним его в wc. hInstance


movofn. _hInstance,eax


pushIDI_APPLICATION; или IDI_ICON если иконка есть в ресурсах


pushebx; или esi если иконка есть в ресурсах


callLoadIcon


movwc. hIcon,eax


pushIDC_ARROW; предопределённый курсор (стрелка)


pushebx


callLoadCursor


movwc. hCursor,eax


pushoffset wc


callRegisterClassEx


; создадим основное окно


pushebx


pushesi


pushebx


pushebx


push400


push600


pushCW_USEDEFAULT


pushCW_USEDEFAULT


pushWS_OVERLAPPEDWINDOW


pushoffset c_w_name


pushoffset c_w_name


pushWS_EX_CLIENTEDGE


callCreateWindowEx


pusheax; для pop esi перед message_loop


pusheax


pushSW_SHOWNORMAL


pusheax


callShowWindow


callUpdateWindow


; инициализируем акселераторы


pushID_ACCEL


pushesi


callLoadAccelerators


movh_accel,eax


; цикл ожидания сообщения


popesi; ESI - идентификатор основного окна


movedi,offset msg_; EDI - структура с сообщением от него


message_loop:


pushebx


pushebx


pushebx


pushedi


callGetMessage; получим сообщение


testeax,eax; если это WM_QUIT


jzexit_msg_loop; выйти из цикла


pushedi


pushh_accel


pushesi; hWnd


callTranslateAccelerator; преобразуем акселераторы в IDM*


testeax,eax


jnzmessage_loop


pushedi


callTranslateMessage; преобразуем сообщения от клавиш


pushedi


callDispatchMessage; и отошлём обратно


jmp short message_loop


exit_msg_loop:


pushmsg_. wParam


callExitProcess; конец программы


; процедура win_proc


;


; процедура не должна изменять регистры EBP,EDI,ESI и EBX!


win_proc proc near


; параметры (с учётом push ebp)


wp_hWnd equ dword ptr [ebp+08h]


wp_uMsg equ dword ptr [ebp+0Ch]


wp_wParam equ dword ptr [ebp+10h]


wp_lParam equ dword ptr [ebp+14h]


; инициализируем стековый кадр


pushebp


movebp,esp; создадим стековый кадр


pusha; сохраним все регистры


xorebx,ebx; 0 для команд push 0


movesi,wp_hWnd; для команд push hWnd


moveax,wp_uMsg


; обработаем пришедшее сообщение


cmpeax,WM_CREATE


jeh_wm_create


cmpeax,WM_SIZE


jeh_wm_size


cmpeax,WM_DESTROY


jeh_wm_destroy


cmpeax,WM_COMMAND


jeh_wm_command


cmpeax,WM_ACTIVATE


jeh_wm_activate


cmpeax,WM_CLOSE


jeh_wm_close


def_proc:


popa


leave; если это ненужное сообщение


jmpDefWindowProc; оставить его обработчику по умолчанию


;


; обработчик WM_CLOSE


; если нужно, спрашивает, сохранить ли файл


h_wm_close:


callsave_contents


jmp short def_proc


;


; обработчик WM_CREATE


;


h_wm_create:


; здесь также можно создать toolbar и statusbar


; создадим окно редактора


pushebx


pushwc. hInstance; идентификатор основной программы


pushEditID


pushesi; hWnd


pushebx; 0


pushebx; 0


pushebx; 0


pushebx; 0


pushWS_VISIBLE or WS_CHILD or ES_LEFT or ES_MULTILINE or ES_AUTOHSCROLL or ES_AUTOVSCROLL


pushebx; 0


pushoffset edit_class


pushebx; 0


callCreateWindowEx


movh_editwindow,eax


; передадим ему фокус


pusheax


callSetFocus


cmpflag_untitled,1


jecontinue_create


callskip_getopen; откроем файл, указанный в командной строке


continue_create:


callset_title


jmp end_wm_check


;


; обработчик WM_COMMAND


;


h_wm_command:


moveax,wp_wParam


cwde; low word contains IDM_*


subeax,100h


jbdef_proc


; обработаем сообщения от пунктов меню


call dword ptr menu_handlers [eax*4]


jmp end_wm_check


menu_handlersdd offset h_idm_new,offset h_idm_open,offset h_idm_save


dd offset h_idm_saveas,offset h_idm_exit,offset h_idm_about


dd offset h_idm_undo, offset h_idm_cut, offset h_idm_copy


dd offset h_idm_paste, offset h_idm_clear, offset h_idm_setsel


; сообщения от пунктов меню должны быть описаны в win95pad. rc именно в таком


; порядке - от IDM_NEW 100h до IDM_CLEAR 10Ah


h_idm_setsel:


push-1; - 1


pushebx; 0


pushEM_SETSEL; выделить весь текст


pushh_editwindow


callSendMessage


ret


; обработчики сообщений из меню EDIT:


h_idm_clear:


moveax,WM_CLEAR


jmp short send_to_editor


h_idm_paste:


moveax,WM_PASTE


jmp short send_to_editor


h_idm_copy:


moveax,WM_COPY


jmp short send_to_editor


h_idm_cut:


moveax,WM_CUT


jmp short send_to_editor


h_idm_undo:


moveax,EM_UNDO


send_to_editor:


pushebx; 0


pushebx; 0


pusheax


pushh_editwindow


callSendMessage


ret


; обработчик IDM_NEW


h_idm_new:


callsave_contents; запишем файл если нужно


movbyte ptr flag_untitled,1


callset_title; отметим что файл не назван


pushebx


pushebx


pushWM_SETTEXT


pushh_editwindow


callSendMessage; пошлём пустой WM_SETTEXT редактору


ret


; обработчик IDM_ABOUT


h_idm_about:


pushebx; 0


pushoffset about_proc


pushesi; hWnd


pushID_ABOUT


pushwc. hInstance


callDialogBoxParam


ret


; обработчик IDM_SAVEAS и IDM_SAVE


h_idm_save:


cmpflag_untitled,1; если файл назван


jneskip_getsave; пропустим вызов GetSaveFileName


h_idm_saveas:


; спросим имя файла


movofn. Flags,OFN_EXPLORER or OFN_OVERWRITEPROMPT


pushoffset ofn


callGetSaveFileName


testeax,eax


jzfile_save_failed


skip_getsave:


; создадим его


pushebx


pushFILE_ATTRIBUTE_ARCHIVE


pushCREATE_ALWAYS


pushebx


pushFILE_SHARE_READ or FILE_SHARE_WRITE


pushGENERIC_READ or GENERIC_WRITE


pushoffset buffer


callCreateFile


movedi,eax


; выделим память


pushMEMSIZE


pushGMEM_MOVEABLE or GMEM_ZEROINIT


callGlobalAlloc


pusheax; hMemory для GlobalFree


pusheax; hMemory для GlobalLock


callGlobalLock


movesi,eax; адрес буфера в ESI


; заберём текст из редактора


pushesi


pushMEMSIZE-1


pushWM_GETTEXT


pushh_editwindow


callSendMessage


; запишем в файл


pushesi; pMemory


calllstrlen


pushebx


pushoffset SizeReadWrite


pusheax; размер буфера


pushesi; адрес буфера


pushedi; идентификатор файла


callWriteFile


pushesi; pMemory


callGlobalUnlock


callGlobalFree; hMemory уже в стеке


pushedi; идентификатор файла


callCloseHandle


; сбросим флаг модификации в редакторе


pushebx


pushebx


pushEM_SETMODIFY


pushh_editwindow


callSendMessage


movbyte ptr flag_untitled,0


callset_title


file_save_failed:


pushh_editwindow


callSetFocus


ret


; обработчик IDM_OPEN


h_idm_open:


callsave_contents


; вызовем стандартный диалог выбора имени файла


movofn. Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_EXPLORER


pushoffset ofn


callGetOpenFileName


testeax,eax


jzfile_open_failed


skip_getopen:


; откроем выбранный файл


pushebx


pushFILE_ATTRIBUTE_ARCHIVE


pushOPEN_EXISTING


pushebx


pushFILE_SHARE_READ or FILE_SHARE_WRITE


pushGENERIC_READ or GENERIC_WRITE


pushoffset buffer


callCreateFile


movedi,eax; идентификатор для ReadFile


; выделим память


pushMEMSIZE


pushGMEM_MOVEABLE or GMEM_ZEROINIT


callGlobalAlloc


pusheax; hMemory для GlobalFree


pusheax; hMemory для GlobalLock


callGlobalLock; получим адрес выделенной памяти


pusheax; pMemory для GlobalUnlock


pusheax; pMemory для SendMessage


; прочитаем файл


pushebx


pushoffset SizeReadWrite


pushMEMSIZE-1


pus

heax; pMemory для ReadFile


pushedi


callReadFile


; пошлём окну редактора сообщение wm_settext чтобы он забрал текст из буфера


pushebx; pMemory уже в стеке


pushWM_SETTEXT


pushh_editwindow


callSendMessage


; а теперь можно закрыть файл и освободить память


callGlobalUnlock; pMemory уже в стеке


callGlobalFree; hMemory уже в стеке


pushedi; hFile


callCloseHandle;


movbyte ptr flag_untitled,0


callset_title


file_open_failed:


pushh_editwindow


callSetFocus


ret


; обработчик IDM_EXIT


h_idm_exit:


callsave_contents


pushesi; hWnd


callDestroyWindow; уничтожить наше окно


ret


;


; обработчик WM_SIZE


;


h_wm_size:


; здесь также надо послать WM_SIZE окнам toolbar и statusbar


; изменим размер окна редактора так чтобы оно по-прежнему было на всё окно


pushoffset rec


pushesi; hWnd


callGetClientRect


push1; true


pushrec. bottom; height


pushrec. right; width


pushebx; y


pushebx; x


pushh_editwindow


callMoveWindow


jmp short end_wm_check


;


; обработчик WM_ACTIVATE


;


h_wm_activate:


pushh_editwindow


callSetFocus


jmp short end_wm_check


;


; обработчик WM_DESTROY


;


h_wm_destroy:


pushebx


callPostQuitMessage; послать WM_QUIT основной программе


end_wm_check:


popa


xor eax,eax; вернуть 0


leave


ret16


; процедура set_title


; устанавливает новый заголовок для основного окна


set_title:


pushesi


pushedi


movedi,offset window_title


cmpbyte ptr flag_untitled,1; если у файла нет имени


jeuntitled; использовать Untitled


movesi,ofn. lpstrFile; [ESI] - имя файла с путём


movzxeax,ofn. nFileOffset; eax - начало имени файла


addesi,eax


copy_filename:


lodsb; скопирем файл побайтово в название окна


testal,al


jzadd_progname; пока не встретится ноль


stosb


jmp short copy_filename


add_progname:


movdword ptr [edi],' - '; припишем минус


addedi,3


movesi,offset c_w_name


movecx,9; и название программы


rep movsb


popedi


popesi


pushoffset window_title


pushesi; идентификатор окна


callSetWindowText


ret


untitled:


movdword ptr [edi],'itnU'; допишем "Unti"


movdword ptr [edi+4],'delt'; допишем "tled"


addedi,8


jmp short add_progname


; процедура save_contents


; EBX=0, ESI=hWnd


save_contents:


; спросим редактор, изменялся ли текст


pushebx


pushebx


pushEM_GETMODIFY


pushh_editwindow


callSendMessage


testeax,eax


jznot_modified


; спросим пользователя, сохранять ли его


pushMB_YESNO + MB_ICONWARNING


pushoffset c_w_name


pushoffset changes_msg


pushesi


callMessageBox


cmpeax, IDYES


jnenot_modified


; сохраним его


callh_idm_save


not_modified:


ret


win_proc endp


about_proc proc near


; параметры (с учётом push ebp)


ap_hDlg equ dword ptr [ebp+08h]


ap_uMsg equ dword ptr [ebp+0Ch]


ap_wParam equ dword ptr [ebp+10h]


ap_lParam equ dword ptr [ebp+14h]


pushebp


movebp,esp; создадим стековый кадр


cmpap_uMsg,WM_COMMAND


jnedont_proceed


cmpap_wParam, IDOK


jnedont_proceed


push1


pushap_hDlg


callEndDialog


dont_proceed:


xoreax,eax; not processed


leave


ret 16


about_proc endp


end_start


; comdlg32. inc


; включаемый файл с определениями функций из comdlg32. dll


;


ifdef _TASM_


includelib import32. lib


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


extrnGetOpenFileNameA: near


extrnGetSaveFileNameA: near


; присваивания для облегчения читаемости кода


GetOpenFileNameequGetOpenFileNameA


GetSaveFileNameequGetSaveFileNameA


else


includelib comdlg32. lib


; истинные имена используемых функций


extrn__imp__GetOpenFileNameA@4: dword


extrn__imp__GetSaveFileNameA@4: dword


; присваивания для облегчения читаемости кода


GetOpenFileNameequ__imp__GetOpenFileNameA@4


GetSaveFileNameequ__imp__GetSaveFileNameA@4


Endif


; def32. inc


; файл с определениями констант и типов для примеров под win32


; из winbase. h


STD_OUTPUT_HANDLEequ-11


OPEN_EXISTINGequ3


CREATE_ALWAYSequ2


GMEM_MOVEABLEequ2


GMEM_ZEROINITequ40h


; из windef. h


RECTstruc


leftdd?


topdd?


rightdd?


bottomdd?


RECTends


; из winerror. h


NO_ERRORequ0


ERROR_NO_MORE_ITEMSequ259


; из winnetwk. h


RESOURCEUSAGE_CONNECTABLEequ 1


RESOURCETYPE_ANYequ0


RESOURCE_CONNECTEDequ1


NTRESOURCE struc


dwScopedd?


dwTypedd?


dwDisplayTypedd?


dwUsagedd?


lpLocalNamedd?


lpRemoteNamedd?


lpCommentdd?


lpProviderdd?


NTRESOURCE ends


; из winnt. h


GENERIC_READequ80000000h


GENERIC_WRITEequ40000000h


FILE_SHARE_READequ1


FILE_SHARE_WRITEequ2


FILE_ATTRIBUTE_ARCHIVEequ20h


; из winuser. h


MB_OKequ0


MB_ICONINFORMATIONequ40h


IDC_ARROWequ32512


IDI_APPLICATIONequ32512


WS_OVERLAPPEDWINDOW equ0CF0000h


WM_DESTROYequ2


WM_COMMANDequ111h


WM_INITDIALOGequ110h


WM_CLOSEequ10h


CS_HREDRAWequ2


CS_VREDRAWequ1


CW_USEDEFAULTequ80000000h


SW_SHOWNORMALequ1


COLOR_WINDOWequ5


BN_CLICKEDequ0


WNDCLASSEXstruc


cbSizedd?


styledd?


lpfnWndProcdd?


cbClsExtradd?


cbWndExtradd?


hInstancedd?


hIcondd?


hCursordd?


hbrBackgrounddd?


lpszMenuNamedd?


lpszClassNamedd?


hIconSmdd?


WNDCLASSEXends


MSGstruc


hwnddd?


messagedd?


wParamdd?


lParamdd?


timedd?


ptdd?


MSGends


; из winuser. h


WM_CREATEequ1


WM_ACTIVATEequ6


WM_SETTEXTequ0Ch


WM_GETTEXTequ0Dh


WM_CUTequ300h


WM_COPYequ301h


WM_PASTEequ302h


WM_CLEARequ303h


WM_UNDOequ304h


WM_SIZEequ5


WS_VISIBLEequ10000000h


WS_CHILDequ40000000h


WS_EX_CLIENTEDGE equ200h


ES_LEFTequ0


ES_MULTILINEequ4


ES_AUTOHSCROLLequ80h


ES_AUTOVSCROLLequ40h


EM_GETHANDLEequ0BDh


EM_GETMODIFYequ0B8h


EM_SETMODIFYequ0B9h


EM_UNDOequ0C7h


EM_SETSELequ0B1h


MB_YESNOequ4


MB_ICONWARNINGequ30h


IDOKequ1


IDYESequ6


; из commdlg. h


OFN_PATHMUSTEXISTequ800h


OFN_FILEMUSTEXISTequ1000h


OFN_EXPLORERequ80000h


OFN_OVERWRITEPROMPTequ2


OPENFILENAMEstruc


lStructSizedd?


hwndOwnerdd?


_hInstancedd?


lpstrFilterdd?


lpstrCustomFilter dd?


nMaxCustFilterdd?


nFilterIndexdd?


lpstrFiledd?


nMaxFiledd?


lpstrFileTitledd?


nMaxFileTitledd?


lpstrInitialDirdd?


lpstrTitledd?


Flagsdd?


nFileOffsetdw?


nFileExtensiondw?


lpstrDefExtdd?


lCustDatadd?


lpfnHookdd?


lpTemplateNamedd?


OPENFILENAMEends


; user32. inc


; включаемый файл с определениями функций из user32. dll


;


ifdef _TASM_


includelib import32. lib


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


extrnMessageBoxA: near


extrnDispatchMessageA: near


extrnTranslateMessage: near


extrnGetMessageA: near


extrnLoadIconA: near


extrnUpdateWindow: near


extrnShowWindow: near


extrnCreateWindowExA: near


extrnDefWindowProcA: near


extrnPostQuitMessage: near


extrnRegisterClassExA: near


extrnLoadCursorA: near


extrnLoadMenuA: near


extrnDestroyWindow: near


extrnDialogBoxParamA: near


extrnGetDlgItem: near


extrnSetFocus: near


extrnGetDlgItemTextA: near


extrnSetDlgItemTextA: near


extrnEndDialog: near


extrnLoadAcceleratorsA: near


extrnTranslateAccelerator: near


extrnSendMessageA: near


extrnSetWindowTextA: near


extrnMoveWindow: near


extrnGetClientRect: near


extrnGlobalUnlock: near


; присваивания для облегчения читаемости кода


MessageBoxequMessageBoxA


DispatchMessageequDispatchMessageA


GetMessageequGetMessageA


LoadIconequLoadIconA


CreateWindowExequCreateWindowExA


DefWindowProcequDefWindowProcA


RegisterClassExequRegisterClassExA


LoadCursorequLoadCursorA


LoadMenuequLoadMenuA


DialogBoxParamequDialogBoxParamA


GetDlgItemTextequGetDlgItemTextA


SetDlgItemTextequSetDlgItemTextA


LoadAccelerators equLoadAcceleratorsA


SendMessageequSendMessageA


SetWindowTextequSetWindowTextA


else


includelib user32. lib


; истинные имена используемых функций


extrn__imp__MessageBoxA@16: dword


extrn__imp__DispatchMessageA@4: dword


extrn__imp__TranslateMessage@4: dword


extrn__imp__GetMessageA@16: dword


extrn__imp__LoadIconA@8: dword


extrn__imp__UpdateWindow@4: dword


extrn__imp__ShowWindow@8: dword


extrn__imp__CreateWindowExA@48: dword


extrn__imp__DefWindowProcA@16: dword


extrn__imp__PostQuitMessage@4: dword


extrn__imp__RegisterClassExA@4: dword


extrn__imp__LoadCursorA@8: dword


extrn__imp__LoadMenuA@8: dword


extrn__imp__DestroyWindow@4: dword


extrn__imp__DialogBoxParamA@20: dword


extrn__imp__GetDlgItem@8: dword


extrn__imp__SetFocus@4: dword


extrn__imp__GetDlgItemTextA@16: dword


extrn__imp__SetDlgItemTextA@12: dword


extrn__imp__EndDialog@8: dword


extrn__imp__LoadAcceleratorsA@8: dword


extrn__imp__TranslateAccelerator@12: dword


extrn__imp__SendMessageA@16: dword


extrn__imp__SetWindowTextA@8: dword


extrn__imp__MoveWindow@24: dword


extrn__imp__GetClientRect@8: dword


extrn__imp__GlobalUnlock@4: dword


; присваивания для облегчения читаемости кода


MessageBoxequ__imp__MessageBoxA@16


DispatchMessageequ__imp__DispatchMessageA@4


TranslateMessage equ__imp__TranslateMessage@4


GetMessageequ__imp__GetMessageA@16


LoadIconequ__imp__LoadIconA@8


UpdateWindowequ__imp__UpdateWindow@4


ShowWindowequ__imp__ShowWindow@8


CreateWindowExequ__imp__CreateWindowExA@48


DefWindowProcequ__imp__DefWindowProcA@16


PostQuitMessageequ__imp__PostQuitMessage@4


RegisterClassExequ__imp__RegisterClassExA@4


LoadCursorequ__imp__LoadCursorA@8


LoadMenuequ__imp__LoadMenuA@8


DestroyWindowequ__imp__DestroyWindow@4


DialogBoxParamequ__imp__DialogBoxParamA@20


GetDlgItemequ__imp__GetDlgItem@8


SetFocusequ__imp__SetFocus@4


GetDlgItemTextequ__imp__GetDlgItemTextA@16


SetDlgItemTextequ__imp__SetDlgItemTextA@12


EndDialogequ__imp__EndDialog@8


LoadAccelerators equ__imp__LoadAcceleratorsA@8


TranslateAccelerator equ __imp__TranslateAccelerator@12


SendMessageequ__imp__SendMessageA@16


SetWindowTextequ__imp__SetWindowTextA@8


MoveWindowequ__imp__MoveWindow@24


GetClientRectequ__imp__GetClientRect@8


GlobalUnlockequ__imp__GlobalUnlock@4


Endif


// winpad95. rc


// файл ресурсов для программы winpad95. asm


//


// идентификаторы сообщений от пунктов меню


#define IDM_NEW0x100L


#define IDM_OPEN0x101L


#define IDM_SAVE0x102L


#define IDM_SAVEAS0x103L


#define IDM_EXIT0x104L


#define IDM_ABOUT0x105L


#define IDM_UNDO0x106L


#define IDM_CUT0x107L


#define IDM_COPY0x108L


#define IDM_PASTE0x109L


#define IDM_CLEAR0x10AL


#define IDM_SETSEL0x10BL


// идентификаторы основных ресурсов


#define ID_MENU0x700L


#define ID_ACCEL 0x701L


#define ID_ABOUT0x702L


// если есть иконка - можно раскомментировать следующие две строки


// #define ID_ICON 0x703L


// ID_ICON ICON "winpad95. ico"


// основное меню


ID_MENU MENU DISCARDABLE {


POPUP "&File" {


MENUITEM "&NewtCtrl+N", IDM_NEW


MENUITEM "&Open... tCtrl+O", IDM_OPEN


MENUITEM "&SavetCtrl+S", IDM_SAVE


MENUITEM "Save &As... tCtrl+Shift+S", IDM_SAVEAS


MENUITEM SEPARATOR


MENUITEM "E&xittCtrl+Q", IDM_EXIT


}


POPUP "&Edit" {


MENUITEM "&UndotCtrl-Z", IDM_UNDO


MENUITEM SEPARATOR


MENUITEM "Cu&ttCtrl-X", IDM_CUT


MENUITEM "&CopytCtrl-C", IDM_COPY


MENUITEM "&PastetCtrl-V", IDM_PASTE


MENUITEM "&DeletetDel", IDM_CLEAR


MENUITEM SEPARATOR


MENUITEM "Select &AlltCtrl-A", IDM_SETSEL


}


POPUP "&Help" {


MENUITEM "About", IDM_ABOUT


}


}


// комбинации клавиш


ID_ACCEL ACCELERATORS DISCARDABLE {


"N", IDM_NEW, CONTROL, VIRTKEY


"O", IDM_OPEN, CONTROL, VIRTKEY


"S", IDM_SAVE, CONTROL, VIRTKEY


"S", IDM_SAVEAS, CONTROL, SHIFT, VIRTKEY


"Q", IDM_EXIT, CONTROL, VIRTKEY


"Z", IDM_UNDO, CONTROL, VIRTKEY


"A", IDM_SETSEL, CONTROL, VIRTKEY


}


// все эти определения можно заменить на #include <winuser. h>


#define DS_MODALFRAME0x80L


#define DS_3DLOOK4


#define WS_POPUP0x80000000L


#define WS_CAPTION0xC00000L


#define WS_SYSMENU0x80000L


#define IDOK1


#define IDC_STATIC-1


#define IDI_APPLICATION 32512


#define WS_BORDER0x800000L


// стандартный диалог "About"


ID_ABOUT DIALOG DISCARDABLE 0,0,125,75


STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU


CAPTION "About Asmpad95"


{


ICONIDI_APPLICATION, IDC_STATIC,12,15,21, 20


CTEXT"Asmpad95", IDC_STATIC,0,30,40,8


CTEXT"Prototype notepad-style editor for Windows 95 written entirely in assembly language",


IDC_STATIC,45,10,70,45,WS_BORDER


DEFPUSHBUTTON"OK", IDOK,40,60,40,12


}

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Текстовий редактор під Windows

Слов:2573
Символов:35536
Размер:69.41 Кб.