1.Жүйелік бағдарламалау
Windows операционды жүйесіндегі программалау негіздері
Windows арасындағы программалануды бастау үшін соншалықты маңызды деп саналатын екі сәтті қарастырамыз – бұл (АРІ – фүнкциясы) жүйелік функцияны шақыру және Windows-ға арналған программаның мүмкін болатын құрылымдары. Пирогов программаның 6 типін атап көрсетеді, оларды шартты түрде мынадай үлгіде атауға да болады:
классикалық құрылым – бір ғана басты терезеге ие;
диалогтық құрылым – басты терезесі диалогтық терезе болып табылады;
консольдық тип – басты терезесі диалогтық терезе (жасалатын немесе соған ілесіп отыратын) болып табылады;
Терезесіз құрылым - бұл басты терезесі жоқ Windows қосымшасы;
Сервистер – арнайы құрылымға ие және операциондық жүйеде айырықша рөл ойнайтындар;
Драйверлер – сыртқы қондырғыларды меңгеруге арналған бағдарламаның айырықша құрылымына ие болғандар;
Бірінші, классикалық құрылымды қарастырып көрейік.
Сонымен, Windows программалануы туралы бірнеше жалпы ережелерден басталық.
1. Windows-дағы программалану API (Application Program Interface, программалық интерфейс қосымшасы) функциясын пайдалануға негізделеді. Сыртқы қондырғылармен әрі операциондық жүйенің өзара әрекеттесуі мұндай функциялардың тікелей ықпалымен өткізіледі.
2. АРІ функциясының тізім, және олардың тізімдемесін дұрысы ең дұрысы мәселен Borland C+ пакетіменқойылып жүрген WIN32.HLP файлынан алуға болады. API функциясы бойынша және Windows арасында программалану бойынша нақты тізімдеме тұтастай Visual Studio NET құжаттамасында (документация) сақталады.
3. Windows аралығындағы программалық басты элементі терезе болып табылады. Әрбір терезе үшін өзінің мәліметтерді өңдеу процедурасы анықталған.
4. Терезе басқару элементтерінен құралуы мүмкін: (кнопкалар), тізімдер, редакциялау терезесі және басқалар. Бұл элементтер іс жүзінде терезе болып табылады, бірақ айырықша өзгешелік меңгерген болып саналады. Бұл элементтермен (және терезенің өзімен) өтіп жатқан оқиғалар процедураға мәліметтер келіп, түсуін туындатады (оқиғаны айқындайтын белгіні бір параметрлердегі процедура шақырылады).
5. Windows операциондық жүйесі есте сақтаудың линиялық адресацияны пайдаланады. Басқа сөзбен айтсақ, барлық есте сақтауды бір ғана сегмент деп қарауға мүмкіндігі туады.
6. 5-баптың (пункт) ізімен біз факт жүзінде берілген мәліметтер көлемінде шектелмегендіктен код немесе стектің (жойылмайтын ауыстырылу көлемінде) болып табылады. Программа мәтініндегі сегменттер кодтың (секцияның) жекелеген үзіктерінің белгілі бір өзгешеліктерін тапсыруға жазба немесе жалпы пайдалануға рұқсат тепеуге және тағы басқа мүмкіндік береді.
7. Windows операциондық жүйесі көп тапсырмалы орта болып табылады. әр тапсырманың өзінің адрестік кеңістігі және өзінің кезектегі мәліметтеріне ие болады. Бұдан басқа, тіпті бір бағдарлама аясында көп тапсырма жүзеге асырылуы да мүмкін – кез келген процедура дербес тапсырма ретінде іске қосылуы мүмкін.
1.2 Visual Basic іс жүзінде барлық API функцияларға қол жетімді
Visual Basic іс жүзінде барлық API функцияларға қол жетімділікті қамтамасыз етеді. Бұл жадыны, әртүрлі құрылғыларды, Windows ОЖ жұмысын, экранда - терезе, мәзір, басқару элементтерін және т.б. басқаруға мүмкіндік береді,\
Мұнымен қатар, Visual Basic бағдарламасында ертеректе бағдарламашы өзі құрған DLL-ді шақыруға болады.
Әдетте кітапханалар файлдары WINDOWS\SYSTEM каталогінде орналасады. Қосымша жұмыс уақытында қажет болған жағдайда осы кітапханаларға қосылады. Бұл тұрақты(орныққан)үйлестірілетін кітапханалардан айырмашылығы.
Windows-API екі нәрсе жасауға мүмкіндік береді: белгілі бір тапсырмаларды іске асыруға және жүйе ресурстарына қол жетімділікті. Сіз түрлі API-функциялар тізімін және олардың декларацияларын стандартты API Text Viewer бағдарламасы көмегімен қарай аласыз.
1.3API функциясын шақыру
АРІ функциясын қалай шақырып алудан бастаймыз. АРІ-дің кез келгенфункциясын таңдайды, мәселен MessageBox:
Int MessageBox (HWND hwnd, LPCTSTR 1pText, LPCTSTR 1pCaption, UINT uType);
Аталған функция терезені экранға мәліметтермен және шығу кнопкасымен (немесе кнопкаларымен) алып шығады. Параметрлер мәні:
Hwnd – терезе дескрипторы, онда терезе-мәлімет көріне алатын болады.
1pText – терезеден көріне алатын мәтін.
1pCaption – терезе тақырыбындағы мәтін,
uType - әдетте, терезе типі, шығу кнопкаларын анықтауға болады.
Енді параметрлер типі туралы. Олардың барлығы да 32-биттік тұтас сандық әрекеттестікте:
HWND – 32-биттік тұтас.
LPCTSTR – 32-биттік жолдағы көрсеткіш.
UINT – 32-биттік тұтас.
1.4 Программа құрылымы
Windows астындағы программаның классикалық құрылымын қарастырамыз. Мұндай программада басты терезе сонымен бірге және де басты терезенің процедурасы болады. Тұтастай алғандай программа кодында мынадай секцияларды бөліп алғанымыз жөн:
Класс терезелерінің тіркелуі
Басты терезенің жасалуы
Мәліметтер кезегінің өңделу циклі
Басты терезе процедурасы
Әрине, программада бұдан да басқа тараулар болу мүмкін, алайда аталған тараулар программаның негізгі қанқасын құрайды. Бұл тарауларды реті бойынша талдап көрелік.
Класс терезелерінің тіркелуі
Класс терезелерінің тіркелуі RegisterClassA функциясының көмегімен жүзеге асырылады, оның бірден-бір параметрі терезедегі ақпаратты ұстап тұратын (қараңыздар, үлгісі төменде). WNDCLASS құрылымының көрсеткіші болып табылады.
Терзенің жасалуы
Create WindowExaA ( немесе Create WindowA) функциясының көмегімен тіркелген кластың незінде терезе экземпларын жасауға болады. Бұдан анықтауға болатындай, бұл барынша программалаудың объектілі моделін еске түсіреді.
Мәліметтер кезегін өңдеу циклы, Ситілінде бұл циклы бұлайша көрінеді:
While (GetMessage (&msq, NULL, 0,0))
{
// клавиатураны пайдалануға рұқсат беру
// виртуалдық клавиша туралы мәліметтерді тарату жолымен
// алфавитті-санамалы клавиша туралы мәліметте
TranslateMessage (&msq);
// Windows басқаруын оралту және мәліметті одан әрі жеткізу
// терезе процедурасы
DispatchMessage (&msq);
}
GetMessage () функциясы аталған қосымшадағы мәліметтер қатарынан кезекті мәліметтерді «аулап алады» да, оны MSG құрылымына енгізеді. TranslateMessage функциясына келетін болсақ, бірақ оның компетенциясы WM_KEYDOWN және WM_KEYUP мәліметтеріне қатысты олар WM_SYSCHAR және WM_DEADCHAR, WM_CHAR және WM_DEDCHAR, сондай-ақ WM_SYSKEYDOWN және WM_SYSKEYUP-те таратылады. Тарату мәні ауыстырумен емес қосымша мәліметтерді жіберумен қорытындыланады. Олай болса, мәселен, терезеге алфавиттік-санамалы клавишаны басып, және қайта жібергенде алғашында мәлімет WM_KEYDOWN-нан келеді, содан кейін WM_KEYUP, содан кейін барып қана WM_CHAR-дан түседі. Міне осыдан аңғаратынымыздай, күту циклынан шығу егер де GetMessage функциясы 0-ді оралтқан кезде ғана орынға ие болады. Осындай үлгімен, күту циклы екі бірдей рөл ойнайды. Қандай да бір терезеге арналған белгілі бір үлгіде мәлімет құралып шығады, және де бағдарламадан шығу туралы мәлімет күтіледі.
Басты терезенің процедурасы
Си тіліндегі терезе функциясның прототипі мынадай:
LRESULT CALLBACK WindowFunc (HWND, hwnd, UINT message, WPARAM wParam, LPARAM IParam)
Парамертлер мәні:
Hwnd – терезе идентификаторы,
Message – мәлімет идентификаторы,
wParam және IParam – мәлімет анықтайтын (әрбір мәлімет үшін әр түрлі рөл ойнауы мүмкін немесе ешқандай ойнамауы да мүмкін) параметрлері.
2. Файлдық жүйенің қолданылуы
Файлды әдетте есте сақтау құрылғысындағы бір-бірімен байланысты деректер блогы деп атайды, ал API Win32-де файлды аталынған каналдар деп санайды, байланыс ресурстары, дисктік құрылғылар, консоль немесе жай файлдарға енгізу және шығару ағындары. Ұйымдастыру принципі бойынша барлық файлдар типтері бірдей болып табылады, бірақ бір-бірінен өздерінің қосымша қасиеті және шектеулеріменерекшеленеді. API Win32 файлдық функциялары қосымшаға негізгі файлдық жүйе немесе құрылғының типінен тәуелсіз файлға кіруге рұқсат алады. Берілетін мүмкіндіктер сонда да файлдық жүйе, құрылғы немесе операциялық жүйеге тәуелді болады.
2.1 Файлдарды құру және ашу
Файлдардың бардық типін құру және ашу үшін API Win32 – CreateFile жалғыз функциясы жұмыс жасайды. Қосымшада файлдан оқу, файлға жазу немесе екеуі де орындалу керек па екенін нұсқауға болады.
HANDLE CreateFile ( LPCTSTR lpszName, DWORD fdwAccess,
DWORD fdwShareMode, LPSECURITY_ATTRIBUTES lpsa,
DWORD fdwCreate, DWORD fdwAttrsAndFlags, HANDLE hTemplateFile)
Қайтарылатын мән: ашық файл объектісінің дескрипторы немесе сәтсіздік болған жағдайда - INVALID_HANDLE_FAILURE.
lpszName – ашу немесе құруды талап ететін файлдың аты, канал немесе басқа аталынған объекттен тұратын жолды нұсқағыш.
fdwAccess GENERIC_READ және GENERIC_WRITE мәндеріне сәйкес оқу немесе жазуға қатынайтын режимді анықтайды. Тұрақты шамалардың басқа аттары қолданылуы мүмкін. Бұл мәндерді “немесе” разрядтықтың көмегімен біріктіреді.
fdwShareMode – бұл “немесе” разрядтықпен төменде келтірілген мәндер бірлестігін біріктіру:
0 – файлға бірлескен қатынау рұқсат етілмейді.
FILE_SHARE_READ – осы файлды параллельді оқуға аша алатын басқа процестер.
FILE_SHARE_WRITE – файлға параллельді жазу рұқсат етіледі.
Достарыңызбен бөлісу: |