Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчеты по Курсовой Работе / Макросрдства Орефков 8-78-2.docx
Скачиваний:
35
Добавлен:
12.03.2015
Размер:
194.42 Кб
Скачать

4.2 Список использованныхApi-функций.

SetFocus– Установить фокус на заданное окно.

SendMessage- Послать сообщение окну.

CreateWindow– Создать окно.

DefWindowProc- Вызывается для сообщений, которые не обрабатываются функцией окна.

DispatchMessage- Вернуть управление Windows с передачей сообщения предназначенному окну.

ExitProcess- Закончить данный процесс со всеми подзадачами (потоками).

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

GetModuleHandle- Получить дескриптор приложения.

LoadCursor- Загрузить системный курсор или курсор, определенный в файле ресурсов.

LoadIcon- Загрузить системную иконку или иконку, определенную в файле ресурсов.

PostQuitMessage- Послать текущему приложению сообщениеWM_QUIT.

RegisterClass- Зарегистрировать класс окон.

ShowWindow- Показать окно, установить статус показа.

TranslateMessage- Транслировать клавиатурные сообщения в ASCII-коды.

UpdateWindow- Обновить рабочую область окна.

BeginPaint- Получить контекст при получении сообщенияWM_PAINT

EndPaint - Удалить контекст, полученный при помощиBeginPaint.

TextOut - Вывести текст в окно.

SetBkColor - Установить цвет фона для вывода текста.

InvalidateRect - Перерисовать окно.

4.3 Основы вызова api-функций.

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

Например, функция:

SendMessage(

__in  HWND hWnd,

__in  UINT Msg,

__in  WPARAM wParam,

__in  LPARAM lParam

);

будет вызвана в ассемблере по следующему шаблону:

includelibuser32.lib

EXTERNSendMessageA@16:NEAR

TEXT DB 'Введите текст',0

HWNDEDT1 DWORD 0

-

-

PUSH OFFSET TEXT

PUSH 0

PUSH WM_SETTEXT

PUSH HWNDEDT1

CALL SendMessageA@16

В таком вызове APIфункцииSendMessage добавляется символА, указывающий наANSI-стандарт, символ@в роли разделителя и числоNв конце, обозначающий количество байт информации, которая передается в функцию через стек.

Далее представим, какие параметры передаются для остальных API-функции:

HWND WINAPI SetFocus(

__in_opt  HWND hWnd

);

Тип: HWND

Дескриптор окна, которое будет получать ввод с клавиатуры. Если этот параметр равен NULL , нажатия клавиш игнорируются.

HWND WINAPI CreateWindow(

__in_opt  LPCTSTR lpClassName,//строка

__in_opt  LPCTSTR lpWindowName,//имя окна

__in      DWORD dwStyle,//стиль задаваемого окна

__in      int x,//первоначальное горизонтально положение окна

__in      int y,//первоначальное вертикальное положение окна

__in      int nWidth, //ширина

__in      int nHeight, //высота

__in_opt  HWND hWndParent, //окно владельца создаваемого окна

__in_opt  HMENU hMenu, //обращаться к меню

__in_opt  HINSTANCE hInstance, //дескриптор

__in_opt  LPVOID lpParam //указатель

);

LRESULT WINAPI DefWindowProc(

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

__in  UINT Msg, //сообщение

__in  WPARAM wParam, //дополнительная информация сообщения

__in  LPARAM lParam //дополнительная информация сообщения

);

LRESULT WINAPI DispatchMessage(

__in  const MSG *lpmsg //указатель на структуру, содержащую сообщение

);

VOID WINAPI ExitProcess(

__in  UINT uExitCode //код выхода

);

BOOL WINAPI GetMessage(

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

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

__in      UINT wMsgFilterMin, // целое число из самых низких сообщение значение для поиска

__in      UINT wMsgFilterMax // целое значение самого высокого значения сообщения должны быть извлечены. 

);

HMODULE WINAPI GetModuleHandle(

__in_opt  LPCTSTR lpModuleName // имя загружаемого модуля (либо DLL или EXE-файл),если EXE файл то параметр равен NULL

);

HCURSOR WINAPI LoadCursor(

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

__in      LPCTSTR lpCursorName //имя ресурса курсора для загрузки

);

HICON WINAPI LoadIcon(

__in_opt  HINSTANCE hInstance,

__in      LPCTSTR lpIconName //имя ресурса иконки для загрузки

);

VOID WINAPI PostQuitMessage(

__in  int nExitCode //код выхода из приложения

);

ATOM WINAPI RegisterClass(

__in  const WNDCLASS *lpWndClass //указатель на WINDCLASS структуры

);

BOOL WINAPI ShowWindow(

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

__in  int nCmdShow //как окно будет показано на экране

);

BOOL WINAPI TranslateMessage(

__in  const MSG *lpMsg //указатель на MSG структуру

);

BOOL UpdateWindow(

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

);

HDC BeginPaint(

__in   HWND hwnd, //обращается к окну, чтобы перекрасить

__out  LPPAINTSTRUCT lpPaint //указатель на PAINTSTRUCT структуру

);

BOOL EndPaint(

__in  HWND hWnd, //дескриптор окна, которое было перекращено

__in  const PAINTSTRUCT *lpPaint // указатель на PAINTSTRUCT структуру

);

BOOL TextOut(

__in  HDC hdc, //дескриптор контекста устройств

__in  int nXStart, //координата Х

__in  int nYStart, //коорданата Y

__in  LPCTSTR lpString, //указатель на строку

__in  int cchString //длина строки

);

COLORREF SetBkColor(

__in  HDC hdc, //дескриптор контекста устройств

__in  COLORREF crColor //новый цвет фона, используется RGB макрос

);

BOOL InvalidateRect(

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

__in  const RECT *lpRect, //указатель на RECT структуру

__in  BOOL bErase //указывает будет ли фон внутри области

);

Аналогичным образом задаются структуры. Так, структуре:

typedef struct tagMSG { // msg

HWND hwnd;

UINT message;

WPARAM wParam;

LPARAM lParam;

DWORD time;

POINT pt;

} MSG;

Соответствует код:

MSGSTRUCT STRUC

MSHWND DD ?

MSMESSAGE DD ?

MSWPARAM DD ?

MSLPARAM DD ?

MSTIME DD ?

MSPT DD ?

MSGSTRUCT ENDS

typedef struct tagWNDCLASS {

UINT      style;

WNDPROC   lpfnWndProc;

int       cbClsExtra;

int       cbWndExtra;

HINSTANCE hInstance;

HICON     hIcon;

HCURSOR   hCursor;

HBRUSH    hbrBackground;

LPCTSTR   lpszMenuName;

LPCTSTR   lpszClassName;

} WNDCLASS, *PWNDCLASS;

Соответствует код:

WNDCLASS STRUC

CLSSTYLE DD ?

CLWNDPROC DD ?

CLSCBCLSEX DD ?

CLSCBWNDEX DD ?

CLSHINST DD ?

CLSHICON DD ?

CLSHCURSOR DD ?

CLBKGROUND DD ?

CLMENNAME DD ?

CLNAME DD ?

WNDCLASS ENDS

typedef struct tagPAINTSTRUCT { // ps

HDC hdc;

BOOL fErase;

RECT rcPaint;

BOOL fRestore;

BOOL fIncUpdate;

BYTE rgbReserved[32];

} PAINTSTRUCT;

Соответствует код:

PAINTSTR STRUC

hdc DWORD 0

fErase DWORD 0

left DWORD 0

top DWORD 0

right DWORD 0

bottom DWORD 0

fRes DWORD 0

fIncUp DWORD 0

Reserv DB 32 dup(0)

PAINTSTR ENDS