|
Текстовий редактор під Windows |
usheax; hMemory для GlobalLockcallGlobalLock; получим адрес выделенной памятиpusheax; pMemory для GlobalUnlockpusheax; pMemory для SendMessage; прочитаем файлpushebxpushoffset SizeReadWritepushMEMSIZE-1pusheax; pMemory для ReadFilepushedicallReadFile; пошлём окну редактора сообщение wm_settext чтобы он забрал текст из буфераpushebx; pMemory уже в стекеpushWM_SETTEXTpushh_editwindowcallSendMessage; а теперь можно закрыть файл и освободить памятьcallGlobalUnlock; pMemory уже в стекеcallGlobalFree; hMemory уже в стекеpushedi; hFilecallCloseHandle;movbyte ptr flag_untitled,0callset_titlefile_open_failed:pushh_editwindowcallSetFocusret; обработчик IDM_EXITh_idm_exit:callsave_contentspushesi; hWndcallDestroyWindow; уничтожить наше окноret;; обработчик WM_SIZE;h_wm_size:; здесь также надо послать WM_SIZE окнам toolbar и statusbar; изменим размер окна редактора так чтобы оно по-прежнему было на всё окноpushoffset recpushesi; hWndcallGetClientRectpush1; truepushrec. bottom; heightpushrec. right; widthpushebx; ypushebx; xpushh_editwindowcallMoveWindowjmp short end_wm_check;; обработчик WM_ACTIVATE;h_wm_activate:pushh_editwindowcallSetFocusjmp short end_wm_check;; обработчик WM_DESTROY;h_wm_destroy:pushebxcallPostQuitMessage; послать WM_QUIT основной программеend_wm_check:popaxor eax,eax; вернуть 0leaveret16; процедура set_title; устанавливает новый заголовок для основного окнаset_title:pushesipushedimovedi,offset window_titlecmpbyte ptr flag_untitled,1; если у файла нет имениjeuntitled; использовать Untitledmovesi,ofn. lpstrFile; [ESI] - имя файла с путёмmovzxeax,ofn. nFileOffset; eax - начало имени файлаaddesi,eaxcopy_filename:lodsb; скопирем файл побайтово в название окнаtestal,aljzadd_progname; пока не встретится нольstosbjmp short copy_filenameadd_progname:movdword ptr [edi],' - '; припишем минусaddedi,3movesi,offset c_w_namemovecx,9; и название программыrep movsbpopedipopesipushoffset window_titlepushesi; идентификатор окнаcallSetWindowTextretuntitled:movdword ptr [edi],'itnU'; допишем "Unti"movdword ptr [edi+4],'delt'; допишем "tled"addedi,8jmp short add_progname; процедура save_contents; EBX=0, ESI=hWndsave_contents:; спросим редактор, изменялся ли текстpushebxpushebxpushEM_GETMODIFYpushh_editwindowcallSendMessagetesteax,eaxjznot_modified; спросим пользователя, сохранять ли егоpushMB_YESNO + MB_ICONWARNINGpushoffset c_w_namepushoffset changes_msgpushesicallMessageBoxcmpeax, IDYESjnenot_modified; сохраним егоcallh_idm_savenot_modified:retwin_proc endpabout_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]pushebpmovebp,esp; создадим стековый кадрcmpap_uMsg,WM_COMMANDjnedont_proceedcmpap_wParam, IDOKjnedont_proceedpush1pushap_hDlgcallEndDialogdont_proceed:xoreax,eax; not processedleaveret 16about_proc endpend_start; comdlg32. inc; включаемый файл с определениями функций из comdlg32. dll;ifdef _TASM_includelib import32. lib; имена используемых функцийextrnGetOpenFileNameA: nearextrnGetSaveFileNameA: near; присваивания для облегчения читаемости кодаGetOpenFileNameequGetOpenFileNameAGetSaveFileNameequGetSaveFileNameAelseincludelib comdlg32. lib; истинные имена используемых функцийextrn__imp__GetOpenFileNameA@4: dwordextrn__imp__GetSaveFileNameA@4: dword; присваивания для облегчения читаемости кодаGetOpenFileNameequ__imp__GetOpenFileNameA@4GetSaveFileNameequ__imp__GetSaveFileNameA@4Endif; def32. inc; файл с определениями констант и типов для примеров под win32; из winbase. hSTD_OUTPUT_HANDLEequ-11OPEN_EXISTINGequ3CREATE_ALWAYSequ2GMEM_MOVEABLEequ2GMEM_ZEROINITequ40h; из windef. hRECTstrucleftdd?topdd?rightdd?bottomdd?RECTends; из winerror. hNO_ERRORequ0ERROR_NO_MORE_ITEMSequ259; из winnetwk. hRESOURCEUSAGE_CONNECTABLEequ 1RESOURCETYPE_ANYequ0RESOURCE_CONNECTEDequ1NTRESOURCE strucdwScopedd?dwTypedd?dwDisplayTypedd?dwUsagedd?lpLocalNamedd?lpRemoteNamedd?lpCommentdd?lpProviderdd?NTRESOURCE ends; из winnt. hGENERIC_READequ80000000hGENERIC_WRITEequ40000000hFILE_SHARE_READequ1FILE_SHARE_WRITEequ2FILE_ATTRIBUTE_ARCHIVEequ20h; из winuser. hMB_OKequ0MB_ICONINFORMATIONequ40hIDC_ARROWequ32512IDI_APPLICATIONequ32512WS_OVERLAPPEDWINDOW equ0CF0000hWM_DESTROYequ2WM_COMMANDequ111hWM_INITDIALOGequ110hWM_CLOSEequ10hCS_HREDRAWequ2CS_VREDRAWequ1CW_USEDEFAULTequ80000000hSW_SHOWNORMALequ1COLOR_WINDOWequ5BN_CLICKEDequ0WNDCLASSEXstruccbSizedd?styledd?lpfnWndProcdd?cbClsExtradd?cbWndExtradd?hInstancedd?hIcondd?hCursordd?hbrBackgrounddd?lpszMenuNamedd?lpszClassNamedd?hIconSmdd?WNDCLASSEXendsMSGstruchwnddd?messagedd?wParamdd?lParamdd?timedd?ptdd?MSGends; из winuser. hWM_CREATEequ1WM_ACTIVATEequ6WM_SETTEXTequ0ChWM_GETTEXTequ0DhWM_CUTequ300hWM_COPYequ301hWM_PASTEequ302hWM_CLEARequ303hWM_UNDOequ304hWM_SIZEequ5WS_VISIBLEequ10000000hWS_CHILDequ40000000hWS_EX_CLIENTEDGE equ200hES_LEFTequ0ES_MULTILINEequ4ES_AUTOHSCROLLequ80hES_AUTOVSCROLLequ40hEM_GETHANDLEequ0BDhEM_GETMODIFYequ0B8hEM_SETMODIFYequ0B9hEM_UNDOequ0C7hEM_SETSELequ0B1hMB_YESNOequ4MB_ICONWARNINGequ30hIDOKequ1IDYESequ6; из commdlg. hOFN_PATHMUSTEXISTequ800hOFN_FILEMUSTEXISTequ1000hOFN_EXPLORERequ80000hOFN_OVERWRITEPROMPTequ2OPENFILENAMEstruclStructSizedd?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: nearextrnDispatchMessageA: nearextrnTranslateMessage: nearextrnGetMessageA: nearextrnLoadIconA: nearextrnUpdateWindow: nearextrnShowWindow: nearextrnCreateWindowExA: nearextrnDefWindowProcA: nearextrnPostQuitMessage: nearextrnRegisterClassExA: nearextrnLoadCursorA: nearextrnLoadMenuA: nearextrnDestroyWindow: nearextrnDialogBoxParamA: nearextrnGetDlgItem: nearextrnSetFocus: nearextrnGetDlgItemTextA: nearextrnSetDlgItemTextA: nearextrnEndDialog: nearextrnLoadAcceleratorsA: nearextrnTranslateAccelerator: nearextrnSendMessageA: nearextrnSetWindowTextA: nearextrnMoveWindow: nearextrnGetClientRect: nearextrnGlobalUnlock: near; присваивания для облегчения читаемости кодаMessageBoxequMessageBoxADispatchMessageequDispatchMessageAGetMessageequGetMessageALoadIconequLoadIconACreateWindowExequCreateWindowExADefWindowProcequDefWindowProcARegisterClassExequRegisterClassExALoadCursorequLoadCursorALoadMenuequLoadMenuADialogBoxParamequDialogBoxParamAGetDlgItemTextequGetDlgItemTextASetDlgItemTextequSetDlgItemTextALoadAccelerators equLoadAcceleratorsASendMessageequSendMessageASetWindowTextequSetWindowTextAelseincludelib user32. lib; истинные имена используемых функцийextrn__imp__MessageBoxA@16: dwordextrn__imp__DispatchMessageA@4: dwordextrn__imp__TranslateMessage@4: dwordextrn__imp__GetMessageA@16: dwordextrn__imp__LoadIconA@8: dwordextrn__imp__UpdateWindow@4: dwordextrn__imp__ShowWindow@8: dwordextrn__imp__CreateWindowExA@48: dwordextrn__imp__DefWindowProcA@16: dwordextrn__imp__PostQuitMessage@4: dwordextrn__imp__RegisterClassExA@4: dwordextrn__imp__LoadCursorA@8: dwordextrn__imp__LoadMenuA@8: dwordextrn__imp__DestroyWindow@4: dwordextrn__imp__DialogBoxParamA@20: dwordextrn__imp__GetDlgItem@8: dwordextrn__imp__SetFocus@4: dwordextrn__imp__GetDlgItemTextA@16: dwordextrn__imp__SetDlgItemTextA@12: dwordextrn__imp__EndDialog@8: dwordextrn__imp__LoadAcceleratorsA@8: dwordextrn__imp__TranslateAccelerator@12: dwordextrn__imp__SendMessageA@16: dwordextrn__imp__SetWindowTextA@8: dwordextrn__imp__MoveWindow@24: dwordextrn__imp__GetClientRect@8: dwordextrn__imp__GlobalUnlock@4: dword; присваивания для облегчения читаемости кодаMessageBoxequ__imp__MessageBoxA@16DispatchMessageequ__imp__DispatchMessageA@4TranslateMessage equ__imp__TranslateMessage@4GetMessageequ__imp__GetMessageA@16LoadIconequ__imp__LoadIconA@8UpdateWindowequ__imp__UpdateWindow@4ShowWindowequ__imp__ShowWindow@8CreateWindowExequ__imp__CreateWindowExA@48DefWindowProcequ__imp__DefWindowProcA@16PostQuitMessageequ__imp__PostQuitMessage@4RegisterClassExequ__imp__RegisterClassExA@4LoadCursorequ__imp__LoadCursorA@8LoadMenuequ__imp__LoadMenuA@8DestroyWindowequ__imp__DestroyWindow@4DialogBoxParamequ__imp__DialogBoxParamA@20GetDlgItemequ__imp__GetDlgItem@8SetFocusequ__imp__SetFocus@4GetDlgItemTextequ__imp__GetDlgItemTextA@16SetDlgItemTextequ__imp__SetDlgItemTextA@12EndDialogequ__imp__EndDialog@8LoadAccelerators equ__imp__LoadAcceleratorsA@8TranslateAccelerator equ __imp__TranslateAccelerator@12SendMessageequ__imp__SendMessageA@16SetWindowTextequ__imp__SetWindowTextA@8MoveWindowequ__imp__MoveWindow@24GetClientRectequ__imp__GetClientRect@8GlobalUnlockequ__imp__GlobalUnlock@4Endif // 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 "&New\tCtrl+N", IDM_NEWMENUITEM "&Open... \tCtrl+O", IDM_OPENMENUITEM "&Save\tCtrl+S", IDM_SAVEMENUITEM "Save &As... \tCtrl+Shift+S", IDM_SAVEASMENUITEM SEPARATORMENUITEM "E&xit\tCtrl+Q", IDM_EXIT}POPUP "&Edit" {MENUITEM "&Undo\tCtrl-Z", IDM_UNDOMENUITEM SEPARATORMENUITEM "Cu&t\tCtrl-X", IDM_CUTMENUITEM "&Copy\tCtrl-C", IDM_COPYMENUITEM "&Paste\tCtrl-V", IDM_PASTEMENUITEM "&Delete\tDel", IDM_CLEARMENUITEM SEPARATORMENUITEM "Select &All\tCtrl-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,75STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENUCAPTION "About Asmpad95"{ICONIDI_APPLICATION, IDC_STATIC,12,15,21, 20CTEXT"Asmpad95", IDC_STATIC,0,30,40,8CTEXT"Prototype notepad-style editor for Windows 95 written entirely in assembly language",IDC_STATIC,45,10,70,45,WS_BORDERDEFPUSHBUTTON"OK", IDOK,40,60,40,12}
Страницы: 1, 2
|
|
|
© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент. |
|
|