Панельное
софшостроагаельство
p p jf
ИванГАВРИЛЮ К
В статье я хотел бы рассказать о структуре всем известной операционной системы Windows,
какой она предстает перед глазами системного программиста, и о программировании под эту ОС
в обход каких-либо дополнительных визуальных библиотек (MFC, VCL/CLX, Ot, KDE, СТК, FOX
и т.д.) От читателя требуются минимальные начальные знания языка С, каковой мы будем
использовать в качестве языка программирования, — сама Windows написана на С, так что зто
поможет нам лучше понять систему. На первых порах мы также не будем пользоваться никакими
визуальными средами разработки вроде MS Visual C++. Мы научимся создавать простейшее Win-
dows-приложение, работать с окнами, графикой, взаимодействовать с клавиатурой и мышью,
программировать виртуальный таймер, работать с ресурсами, органами управления (кнопки,
выпадающие списки и т.п.), диалоговыми панелями, меню приложения, изучим принципы работы
с памятью в Windows, создадим библиотеку динамической компоновки (DLL), поработаем с файлами
в условиях многозадачности и т.д. В качестве компилятора можете использовать любой, умеющий
генерировать 32-разрядный исполняемый код (все современные). Я взял то, что было под рукой,
d.exe
из визуальной среды Microsoft Visual C++.
Простейшее ореложееее
П
режде чем создать простейшее приложение, давайте
немного ознакомимся с архитектурой W indows, а по ме-
ре изучения новых возможностей я буду освещать ар-
хитектурные подробности той или иной подсистемы б о -
лее подробно.
Как и другие О С , W indow s состоит из нескольких час-
тей: ядро, подсистема управления оперативной памятью,
файловая система и т.д., каждая из которых выполняет
свой определенный круг задач. Работа операционной сис-
темы основана на п е р е д а ч е с о о б щ е н и й (messages). С по-
^
мощ ью сообщ ений отдельные подсистемы, приложения или
модули W indow s могут обмениваться информацией. Сущ е-
м у
ствует так называемая о б щ а я о ч ер е д ь со о б щ е н и й , куда
" И
все подсистемы или приложения могут «посылать» со о б -
щения. С ообщ ением может быть все что угодно — напри-
мер, нажатие кнопки мыши, перемещ ение курсора и т.д.
Д райвер устройства мыши, обнаруж ив, что наж ата кноп-
ка, помещ ает это сообщ ение в общ ую очередь сообщ е-
ний. Это значительно упрощ ает програм м ирование, так
как приложению уже не приходится отслеживать движения
мыши, чтобы определить ее текущ ее положение, — вы все-
го лишь должны написать обработчик (функцию) для реак-
ции вашего приложения на желаемое сообщ ение. Из о б -
щей очереди операционная система извлекает сообщ е-
ния и распределяет их по очередям сообщ ений для каж -
дого приложения. Ваши приложения такж е могут посылать
сообщ ения, какие угодно и куда угодно. С ам о по себе со-
общ ение представляет собой структуру данных на С сле-
дующ его вида:
t y p e d e f s t r u c t t a g M S G
{
H W N D h w n d ;
U I N T m e s s a g e ;
W P A R A M w P a r a m ;
I P A R A M I P a r a m ;
D W O R D t i m e ;
P O I N T p t ;
> M S G M S G ;
Структура содержит уникальный для W indows ко д с о о б -
щ ения
(m e s s a g e ),
идентификатор окна, которому и посыла-
ется сообщение
(h w n d ),
а также дополнительные параметры
(w P a r a m , I P a r a m , t i m e , p t ) ,
которые имеют разное значе-
ние, в зависимости от сообщения.
Л о ги ка пр и л о ж е н и й W in d o w s назы вается л о ги к о й ,
у п р а в л я е м о й со б ы ти я м и . С о б ы ти е м называется о б на р у-
ж ение в очереди сообщ ений приложения ка ко го -л и б о
сообщ ения.
Минимальные знания о W indows мы получили, займемся
наконец разработкой простейшего приложения.
Когда вы писали программы на языке С для старой опе-
рационной системы DOS, работа приложения начиналась с
функции
m a i n ( ) .
В W indows эта функция будет называться
W i n M a i n O .
Ее объявление несколько отличается
о т т а і п О
в DOS:
i n t P A S C A L W i n M a i n ( H I N S T A N C E h l n s t a n c e , H I N S T A N C E
h p r e v l n s t a n c e , L P S T R I p s z C m d L i n e , i n t n C m d S h o w )
В определении использованы незнакомые вам типы дан-
ных
(p a s c a l , h i n s t a n c e , l p s t r ). О
н и
определены в за го -
ловочном файле windows.h, который вы должны включить в
ваше приложение с помощ ью директивы
# d e f i n e .
Итак,
слово
p a s c a l
указы вает компилятору на необходимость
правильного освобождения стека (как в языке Pascal). Все
системные функции W indow s должны использовать это сло-
во.
h i n s t a n c e
является типом данных, уникально иденти-
фицирующим приложение (это просто число). П арам етр
h i n s t a n c e
передается самой операционной системой ва-
шему приложению, это его идентиф икатор. Каждое при-
ложение в W indow s при запуске получает свой идентифи-
катор. Второй парам етр,
h p r e v l n s t a n c e ,
не имеет ника-
кого значения, он оставлен лишь для совместимости со
старыми версиями W indow s, в ваших же приложениях он
не должен нигде использоваться.
I p s z C m d L i n e
— ком анд-
ная строка, переданная приложению при запуске, тип
l p
-
s t r
означает указатель на строку (аналог
c h a r *
в С). П о -
следний парам етр —
n C m d S h o w ,
содержит рекомендации
приложению по поводу того, как оно должно нарисовать
свое главное окно. М ож но игнорировать этот парам етр,
но это признак плохого стиля программирования. П росто-
ты ради в нашем приложении мы, впрочем, не будем его
использовать.
Итак, вот наше приложение:
# i n c l u d e < w i n d o w s . h >
i n t P A S C A L W i n M a i n (
H I N S T A N C E h p r e v l n s t a n c e ,
H I N S T A N C E ,
L P S T R I p s z C m d L i n e ,
i n t n C m d S h o w )
і
M e s s a g e B o x ( N U L L , " H e l l o ! " , " П р о с т е й ш е е п р и л о ж е -
н и е " , M B O K ) ,-
r e t u r n 0 ;
>
' Ш
№ 44/319 01 ноября-08 ноября 2004
предыдущая страница 40 Мой Компьютер 2004 44 читать онлайн следующая страница 42 Мой Компьютер 2004 44 читать онлайн Домой Выключить/включить текст