Win 32 API функцияларын пайдаланып Assembler тілінде бағдарламалау

Автор: Пользователь скрыл имя, 28 Февраля 2013 в 18:41, курсовая работа

Описание работы

Компьютерлік технологиялардың қарқынды дамуы барысында компьютерлерге арналған түрлі бағдарламалық қамтамалардың да көбеюі жаңалық емес. Әрбір адамға ЭЕМ- де және оның құрылғыларында тиімді жұмыс істеу үшін бағдарламалау тілдерінің алатын орны ерекше болып есептеледі. Бағдарламалау тілдерінің түрі көп. Олардың әрқайсы өзінің мүмкіндіктерімен ерекшеленеді.

Содержание

Кіріспе....................................................................................................3
Windows операциялық жүйесінде Assembler тілін қолданып
бағдарламалау........................................................................................4
Терезе түрлері.........................................................................................7
1.3 Терезелер классы...................................................................................8
1.3.1 Терезе классының қолданатын ресурстарын сипаттау.....................8
Терезе функциясы..................................................................................9
Терезе құру.............................................................................................9
1.4 Қосымшаның басты функциясы..........................................................11
1.5 Қосымша мәтінінің құрылымы............................................................12
1.6 Терезе құрудың қосымша функциялары............................................12
1.7 Іздеу және терезе күйін анықтау..........................................................12
1.8 Терезелердің жылжу функциясы.........................................................13
Қолданушыға арналған қосымша мәлімет..........................................14
2 API функцияларын сипаттау.................................................................15
Қорытынды.............................................................................................19
Қолданылған әдебиет.............................................................................20
Қосымша.................................................................................................21

Работа содержит 1 файл

Win 32 API функцияларын пайдаланып Assembler тілінде бағдарламалау.doc.docx

— 314.97 Кб (Скачать)

Терезе функциясының атын қалауынша қояды. Классты тіркеуден өткізген кезде операциялық жүйе функцияның көрсеткішін жадында сақтап қалады.

 

1.3.3 Терезе құру

Терезені  құру үшін Create Window функциясын шақырамыз. Ол уақытша немесе туынды терезелер  құрады және олардың кейбір параметрлерін  орнатады. Бұл функция келесі түрде  баяндалған:

HWND CreateWindow (

LPCTSTR IpClassName

 LPCTSTR IpWindowName

DWORD  dwStyle,

Int x,

Int y,

Int  nWidth,

Int nHeigth,

HWND hWndParent,

HMENU hMenu,

HANDLE nInstance,

LPVOID lpParam   );

1. IpClassName RegisterClass функциясымен тіркелген атқа немесе операциялық жүйемен анықталған классқа сілтейді.

2. dw.style терезенің  стилін анықтайды.

3. nwidth пиксельде  берілген терезенің ені. Уақытша  және туынды терезелерде ені  мен биіктігі нольге тең.

4. nwndParent Тек  қана инициалданған терезелерді  көрсетеді. Туынды терезе құрған  кезде міндетті түрде аталық–  терезенің дискрипторын көрсетеміз.

5. hMenu- меню дискрипторы немесе құрылатын туынды терезенің идентификаторы.

Уақытша терезенің  менюін үш түрлі жолмен беруге болады:

1) Терезелер  классында меню аты көрсетіледі  және осы классқа жататын барлық  терезелер менюді қолдана береді.

2) Меню атын CreateWindow функциясының аргументі ретінде  көрсетеміз. Құрылатын терезе осы  менюді қолданып, класс менюін  қолданбайды.

3) Менюді терезе  құру кезінде немесе құрылып  болған соң құраймыз.

Бірінші және үшінші жағдайда hMenu аргументі NULL тең. Егер туынды терезе құрылатын болса  онда  hMenu аргументі ретінде осы терезенің идентификаторы саналады.

Терезенің стильін  оның сыртқы бейнелеріне қарап айырамыз.

Терезе стилін баяндау үшін символдық тұрақты WS_ қолднылады. Қасиеттердің жиындығына байланысты терезелерді бірін- бірі басатын, уақытша және туынды терезелерге  бөлеміз.

Көбінесе қосымшалар терезелі болып келеді. Мұндай терезелердің негізгі стилі WS_OVERLAPPER тұрақтысымен беріледі.

Бірін- бірі жабатын  терезе басқа бір терезеге бағынуы  мүмкін. Егер басты- терезе пиктограммаға  түрленсе онда оған бағынатын терезелер  де көрінбейтін болып қалады. Басты- терезені жабқан кезде оған бағынатын  терезелер де жабылады. Бағынатын  терезелер әрқашан басты терезенің  үстінде орналасады.

Уақытша терезелер  көбінесе қолданушыға хабар шығару үшін қолданылады да экранда қысқа  уақытта ғана көрініп тұрады. Уақытша  терезенің негізгі стилі WS_POPUP тұрақтысымен беріледі. Келісім бойынша мұндай терезенің басы болмайды.

Туынды терезелер  басқару органдарын құру үшін қолданылады. Кірісімен анықталатын басқару органдарының классы туынды терезелер болып саналады. Туынды терезелердің негізгі стилі WS_CHILD тұрақтысымен беріледі. Туынды терезеде кішірейтетін және үлкейтетін батырма болмайды. Бірақ әрқашан басты- терезесі болады. Олар басты- терезеге “жабысып” сонымен бірге жылжиды және басты- терезенің сыртына шыға алмайды.

 

    1. Қосымшаның басты функциясы

Қосымша әрқашан WinMain функциясымен баяндалады. Функция  қосымша іске қосылған кезде басқаруды  алады да, терезе класстарын тіркейді, терезе құрады, хабарлардың кезегін  реттейді.

WinMain фунциясының баяндалуы:

Int WINAPI WinMain (HINSTANCE hInstance,

HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)

{ MSG msg;  HWND hwnd;

if (!RegClass(WndProc, szClassName)) return FALSE;

hwnd=CreateWindow(szClassName,’Пример 1’,

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULD,CW_USEDEFAULT,

CW_USEDEFAULD,CW_USEDEFAULT,

0,0,hlnstance,NULL);

if(!hwnd) return FALSE;

ShowWindow(hwnd,SW_SHOWMAXIMIZED);

UpdateWindow(hwnd);

while (GetMessage(&msg,0,0))

{TranslateMessage(&msg); DispatchMessage(&msg);}

return msg.wParam;

}

Функцияның  формальді параметрлерінің тізімі, аты, қайтару типі Windows API талаптарымен анықталған.

hInstance параметрі  операциялық жүйеден ағымдағы  қосымшаның дескрипторын алады.

hPrevinstance параметры  16-разрядты қосымшаларда алдындағы  белсенді болған қосымшаны көрсетеді.  Ал Win32 қосымшаларында ол әрқашан  NULL тең.

nCmdshow параметрі  қосымшаға терезенің бастапқы  шығару әдісін береді.

WinMain функциясының  құрылымында msg және hwnd айнымалылары  баяндалған. Msg айнымалысы уақытша  хабарларды қабылдауға және таратуға  арналған. hwnd айнымалысы құрылған  терезенің дискрипторын сақтайды.

Терезе классын  тіркеуден өткізу үшін RegClass функциясы  шақырылады.

If(!RegClass(WndProc,s2ClassName)) return False;

Терезе құру үшін CreateWindow функциясы шақырылады. Егер терезе құрылмаса қосымша өз жұмысын аяқтайды. Құрылған терезені шақыру үшін ShowWindow функциясы шақырылады.

ShowWindow(hwind, SW_SHOWMAXIMIZED);

Бұл функция  терезені максимальді үлкен түрде  экранға шығарады.

While(GetMessage(&msg, 0, 0, 0))

{TranslateMessage(&msg); DispatchMessage(&msg);}

Бұл цикл хабарларды өңдеу циклы деп аталады.

GetMessage функциясы  қосымшаның тізімінде тұрған  хабарлардың  кезектегі хабарын  таңдайды.

TransLateMessage пернетақтадағы  хабарды трансляциялайды,

DispatchMessage функциясы  хабарларды терезе функцияларына  таратады. Дәл осы циклда терезе  функциясын “шақыру” болады.

Жоғарыда  көрсетілген функциялардың түпнұсқасын  қарастырайық:

ShowWindow функциясы  келесі түрде баяндалады: Bool ShowWindow(HWND hwnd, int nCmdShow).

Қосымшаны жүктегеннен  соң шақыртылуы кезінде екінші аргументіне WinMain  функциясына nCmdShow параметрін меншіктейміз.

GetMessage функциясы  келесі түрде баяндалады. BoolGetMessage(LPMSG Ipmsg, HWNO hwnd, WORD UmsgfillterMin, Word UMsgFillterMax);

Lpmsg параметрі таңдалатын хабарды MSG типті құрылымға жазады. Hwnd- терезе дискрипторы. UmsgfilterMin және UmsgFilterMax параметрлері таңдалатын хабарлардың аймағын және хабарлардың минимальді максимальді кодтарын береді. Егер осы параметрлердің мәні нольге тең болса онда кезектегі хабарлардың барлығы таңдалады.   

GetMessage функциясы  адресі бірінші параметірімен  берілген кезектегі таңдаулы  мәліметті өшіреді. WM_QUIT кодты мәліметті  таңдаған кезде ол ноль мәнін  қайтарады да циклды мәліметті  өңдемей аяқтайды. Басқа мәліметті  таңдаған кезде GetMessage функциясы  нольге тең емес мәнді қайтарады. 

 

1.5 Қосымша мәтіннің құрылымы

Қосымша мәтіннің құрылымы екі талап бойынша анықталады.

1. Мәтін WinMain функциясының сипаттамасынан тұрады.

2. Егер жаңа  класс тіркелсе, онда мәтін WINDCLASS типті құрылымның сипаттамасынан  және осы классты терезелер  функцияларынан тұрады.

 

1.6 Терезе құрудың қосымша функциялары

Windows API терезелерді  құруға қатысты бірнеше функциялардан  тұрады. Олар: іздеу, күйді анықтау,  терезенің жылжу және қолданушымен  мәлімет ауысу функциялары.

 

 

1.7 Іздеу және терезенің күйін анықтау функциялары

Кей жағдайларда  берілген дескрипторларға терезе бар  жағын анықтау керек болады. Бұл  қызметті IsWindow функциясы атқарады:

BOOL IsWindow (HWND hwnd);

Егер hwnd дискрипторы  бар терзе бар болса функция  ноль емес мәнді қайтарады, ал кері жағдайда ноль.

Егер берілген терезенің кіру фокусын анықтау  керек болса, Is Window Enabled функциясы  шақырылады: BOOL Is Window Enabled (HWND hwnd);

Егер hwnd терезесі белсенді болса, функция ноль емес мәнді, ал кері жағдайда нольді қайтарады.

Терезенің кіру фокусынын өзгерту үшін немесе алу  үшін  Enabel Window функциясы шақырылады: BOOL EnabelWindow (HWND hwnd, BOOL bEnable);

bEnable= TRUE болғанда  кіру фокусы hwnd терезесіне беріледі, ал олай болмаған жағдайда  терезе кілттенеді.

Егер терезе бұрын белсенді болмаған болса, ноль емес мән, ал белсенді болған жағдайда ноль қайтарылады.

Кіріс фокусын hwnd терезесіне SetFocus функциясы арқылы беріледі: SetFocus (hwnd);

Келесі функция hwnd терезесі пиктограмма түрінде  тұрғанда нольдік емес мән қайтарады: BOOL Is Iconic (HWND hwnd);

Fine Window функциясы  Ip Window Name деп басталатын IpClassName классты  терезенің дискрипторын операциялық  жүйеден сұрайды. Бұл функция  келесі түрде сипатталады. HWND FindWindow (LPCTSTR Ip Class Name, LPCTSTR IpWindowName)/

Егер IpWindowName=NULL болса, онда ізделіп жатқан терезе кез- келген классқа жатуы мүмкін. Егер мұндай терезе табылса функция дескрипторды қайтарады немесе ноль.

 

 

 

 

 

 

 

1.8 Терезелердің жылжу функциясы

hwnd терезесінің  өлшемдерін өзгерту үшін және  терезенің  жылжу үшін MoveWindow функциясы  шақырылады. Оған терезенің жаңа  координаталарын береді.

  MoveWindow функциясы  келесі түрде сипатталады:

BOOL MoveWindow (HWND.hwnd,

Int x, // терезенің  сол жағының жаңа координатасы

Int y, // терезенің  сол жағының жаңа координатасы

Int nWidth, // терезенің  жаңа ені

Int nHeight, // терезенің  жаңа биіктігі

BOOL bRepqing // терезені  бояу жалаушасы         

 );

 Егер bRepqing= TRUE болса, онда жылжу болғаннан  кейін терезенің жылжуы болған  жерлері боялып отырылады. Олай  болмаса терезе өзін- өзі, сол  кезде келіп түскен барлық  мәліметтерді өңдеп болғасын  бояйды. Функция сәтті сәтті орындалса  ноль емес, ал керісінше жағдайда  ноль.

SetWindowPos функциясы  hwnd терезесінің координатасын сонымен  қатар терезенің басқа терезелерге  қатысты орнын өзгертеді.

BOOL SetWindow (HWND hwnd,

HWND hWndInsertAfter, // орналастыру тәртібінің дескрипторы

Int x, // сол  жақтың жаңа координатасы

Int y, // жоғарғы  жақтың жаңа координатасы

Int cx, // жаңа  ен

Int cy, // жаңа  биіктік

LINIT uFlags // позициялау  жалаушасы

);

Сәтті орындалғанда ноль емес мәні қайтарылады.

hWndInsertAfter параметрі  алдағы терезесі дескрипторы  болуы мүмкін немесе мәндердің  біреуіне тең болуы керек.

Бірнеше қосымшалармен  жұмыс істегенде олардың біреуін  алдыңғы планға шығарып, ол терезеге кіріс фокусын беруге болады.

Осы мақсат үшін SetForegroundWindow функциясы қолданылады. Бұл функция терезе құрылған ағымды алдыңғы планға шығарып, оны белсендіреді. Функция синтаксисі:

BOOL SetForegroundWindow (HWND, hwnd);

Орындалуы сәтті  болған жағдайда функция ноль емес мәнді қайтарады, керісінше ноль.

Терезені  жылжыту үшін экранның, терезенің  жүйелік өлшемдерін білу керек. Ол өлшемдерді Get System Metrics функциясы көмегімен алады. Барлық өлшемдер пиксель түрінде  қайтарылады.

Get System Metrics функциясы  келесі түрде сипатталған: Int Get System Metrics (Int nIndex);

nIndex параметрі жүйе қайтаратын өлшемді немесе орнатылған конфигурацияны көрсетеді. Төменде бұл функцияға қатысты кесте қарастырылған.

 

 

1.9 Қолданушыға арналған қосымша мәліметі

Мәтіндік  мәліметті шығару үшін және оған қалданушы  жауап беру үшін мәлімет терезесі қолданылады. MessageBox функциясы мәлімет  терезесін көрсетеді, оның жұмыс  істеуін қамтамасыз етеді және жабады.

Int WINAPI MessageBox (

HWND hwnd, // Аталық  терезе дескрипторы

LPCTSTR IpText, //  Мәлімет мәтінінің адресі

LPCTSTR IpCaption // Мәлімет  терезесі басының адресі

UNIT uType // Мәлімет  терезесінің стилі

);

Егер hwnd= NULL болса, мәлімет терезесінің аталық терезесі жоқ болады. Егер IpCaption= NULL болса, терезе басында “Қате” деген қатар шығады. nType параметрі мәлімет терезесінің  іс- қимылын және мазмұнын анықтайтын жалаушалар комбинациясы түрінде беріледі.

Келесі жалаушалар мәліметтер терезесінің батырмаларының тізімін анықтайды.

Қосымша қолданушының мәліметке берген жауабын MessageBox функциясының қайтарылған мәнін сараптау арқылы түсінеді. Қате болған жағдайда ноль қайтарылады, ал керісінше болғанда   MessageBox функциясы басылмаған батырмаға  сәйкес тұрақтыны қайтарады. Басылған батырмаларға сәйкес тұрақтылар төменде  сипатталған.

 

 

2 API функцияларын сипаттау

Windows операциялық жүйесінде Ассемблер тілі жүйелік функцияларды, яғни API (Application Program Interface )функцияларын пайдаланады. Бұл функциялар саны 2000-ға дейін жетеді. Бағдарлама ішкі құрылғылармен операциялық жүйе ресурстарымен жұмыс істеу үшін осы функцияларға жүгінеді. API функциялар тізімімен сипаттамасын Borland C++ дестесіндегі WIN32.HLP файлынан қарауға болады. Біз төменде терезе құруға қатысты бірнеше API функцияларын кесте түрінде қарастырамыз.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 1-кесте  Терезе класының стилінің мағынасы жайлы тізім

 

Терезе стилінің мағнасы

Түсініктеме

CS_BYTEALIGNCLIENT

Терезенің жұмыс істеу аймағын  видеожады байтының шекарасы бойынша  түзеу. Бұл терезені бояуды тездетеді  және х осі бойынша терезе өлшеміне әсер етеді.

CS_BYTEALIGNWINDOW

Барлық терезені видеожады байтының шекарасы бойынша түзеу. Бұл стиль  х осі бойынша терезе өлшеміне әсер етеді.

CS_CLASSDC

Барлық терезелерге бірдей бейнелену  контекстін құру.

CS_DBLCLKS

Терезе функциясы жұмыс істеу  аймағын тышқан батырмасымен екі  рет басқанда хабар алады.

CS_GLOBALCLASS

Барлық қосымшалардың қолы жететін  класс. Терезе құрғанда қосымша дискрипторын мойындамайды.

CS_HREDRAW

Терзе енін өзгерткен кезде жұмыс  істеу аймағын бояу.

CS_NOCLOSE

Жүйелік менюда CLOSE командасын өшіру.

CS_OWNDC

Әр терезе үшін құрылғының өзіндік  контекстін құру.

CS_PARENTDC

Терезе өзін құрған терезенің (аталық) құрылғы контекстін қолданады.

CS_SAVEBITS

Бір бөлікті терезе жауып тұрса, сол  бөлікті биттік түрде сақтап, терезе орнын ауыстырған кезде сол бөлікті  қайта құру.

CS_VREDRAW

Терезе биіктігі өзгергенде жұмыс  істеу аймағын бояу.


 

 

 

 

2 – кесте Тышқан бағдаршасының  жүйеде анықталған мәндерінің  тізімі

 

Мәні

Қолданылуы

IDC_APPSTARTING

Стандарты бағдарша және кішкене құм  сағаты.

IDC_ARROW

Стандарты бағдарша.

IDC_CROSS

Айқасу.

IDC_IBEAM

I түріндегі мәтінді бағдарша.

2-кесте – жалғасы

IDC_NO

Сызылған шеңбер.

IDC_SIZEALL

Төртжақты бағдарша.

IDC_SIZENESW

Екі жақты бағдарша (солтүстік-шығыс  және оңтүстік- батыс)

IDC_SIZENS

Екі жақты бағдарша (солтүстік және оңтүстік)

IDC_SIZENWSE

Екі жақты бағдарша (солтүстік- батыс  және оңтүстік- шығыс)

IDC_SIZEWE

Екі жақты бағдарша ( батыс және шығыс)

IDC_UPARROW

Тік бағдарша.

IDC_WAIT

Құм сағаты.

Информация о работе Win 32 API функцияларын пайдаланып Assembler тілінде бағдарламалау