Jesteś autorem/wydawcą tego dokumentu/książki i zauważyłeś że ktoś wgrał ją bez Twojej zgody? Nie życzysz sobie, aby podgląd był dostępny w naszym serwisie? Napisz na adres
a my odpowiemy na skargę i usuniemy zabroniony dokument w ciągu 24 godzin.
Zobacz podgląd pliku o nazwie 6610 PDF poniżej lub pobierz go na swoje urządzenie za darmo bez rejestracji. Możesz również pozostać na naszej stronie i czytać dokument online bez limitów.
PROGRAMOWANIE WINDOWS
Charles Petzold
Tytu� orygina�u ameryka�skiego: Programming Windows^ 5th ed.
T�umaczenie: Bogdan Kami�ski (rozdz. 1-5), Piotr Czarnocki (rozdz. 6-9),
Marcin Moskwa (rozdz. 10-12), Ewa Hada�a-Miko�ajczuk (rozdz. 13-15),
Andrzej Miron (rozdz. 16-18), Piotr Kresak (rozdz. 19-23)
Copyright 1999 by Microsoft Corporation
Oryginal English language edition Copy�ght 1999 by Petzold, Charles (1999).
All rights published by arrangement with the originaI publisher, Microsoft Press, a division of
Microsoft Corporation, Redmond, Washington, USA.
Edycja polska:
Wydawnictwo RM, Warszawa 1999
Wydawnictwo RM, 00-987 Warszawa 4, skr. pocztowa 144
e-mail:
[email protected]
WWW: http: / /www.rm.com.pl
All rights reserved. No part of this book may be reproduced or transmitted in any form or by
any means, electronic or mechanical, including photocopying, recording or by any information
storage retrieval system, without permission from the publisher.
�adna cz�� tej pracy nie mo�e by� powielana i rozpowszechniana, w jakiejkolwiek formie i
w jakikolwiek spos�b (elektroniczny, mechaniczny) w��cznie z fotokopiowaniem, nagrywa-
niem na ta�my lub przy u�yciu innych system�w, bez pisemnej zgody wydawcy.
Printed in Poland
The Microsoft Windows logo is a trademark of Microsoft Corporation
Wszystkie nazwy handlowe i towar�w wyst�puj�ce w niniejszej publikacji s� znakami towa-
rowymi zastrze�onymi lub nazwami zastrze�onymi odpowiednich firm odno�nych w�a�cicieli.
Wydawnictwo RM do�o�y�o wszelkich stara�, aby zapewni� najwy�sz� jako�� tej ksi��ce.
Jednak�e nikomu nie udziela �adnej r�kojmi ani gwarancji. Wydawnictwo RM nie jest w
�adnym przypadku odpowiedzialne za jak�kolwiek szkod� (��cznie ze szkodami wynik�ymi
z tytu�u utraty zysk�w zwi�zanych z prowadzeniem przedsi�biorstwa, przerw w dzia�alno�ci
przedsi�biorstwa lub utraty informacji gospodarczej) b�d�cej nast�pstwem korzystania z
informacji zawartych w niniejszej publikacji, nawet je�li Wydawnictwo RM zosta�o powiado-
mione o mo�liwo�ci wyst�pienia szk�d.
ISBN 83-87216-90-9
Redaktor prowadz,acy: Miros�awa Szyma�ska
Redakcja: joanna Cierko�ska, El�bieta Kaczak-Ko�cia�czuk, Irmina Wala-P�gierska
Korekta: Maria Najder
Projekt graficzny ok�adki wed�ug orygina�u: Gra�yna J�drzejec
Sk�ad: Robert G�rski
Drcck i oprawa: READ ME Drukarnia w �odzi
Wydanie II
10987654321
Spis tre�ci
Cz�� I. Podstawy 3
Rozdzia� 1: Zaczynamy 3
�rodowisko Windows 4
Historia Windows 4
Cechy Windows 5
��czenie dynamiczne ...
Opcje programowania Windows 9
API i modele pami�ci ....
Opcje j�zyka programowania 10
�rodowisko programistyczne 11
Dokumentacja API 12
Pierwszy program windowsowy... 12
Tryb znakowy... 12
Odpowiednik windowsowy 13
Pliki nag��wkowe 14
Punkt startowy programu 15
Funkcja MessageBox 16
Kompilowanie, ��czenie i uruchamianie 17
Rozdzia� 2: Wprowadzenie do unikodu 19
Kr�tka historia zestaw�w znak�w 19
Standardy ameryka�skie... 20
Inne j�zyki 21
Rozszerzenie ASCII 22
Zestaw znak�w dwubajtowych 24
Ratunek w unikodzie 25
Szerokie znaki i C 26
Typ danych char 26
Szersze znaki 27
Funkcje biblioteki znak�w szerokich 2g
Utrzymywanie pojedynczego �r�d�a 2g
Szerokie znaki i Windows 30
Typy Plik�w nag��wkowych Windows 31
Wywo�ania funkcji Windows 32
Funkcje obs�ugi �a�cuch�w znak�w w Windows 33
U�ycie printf w Windows 34
Formatowanie okna komunikatu 36
Wieloj�zyczno�� i ta ksi��ka 37
VI Programowanie Windows
Rozdzia� 3: Windows i komunikaty... 39
W�asne okno 39
Przegl�d architektury 39
Program HELLOWIN 41
My�lenie globalne 44
Rejestracja klasy okna 49
Tworzenie okna 54
Wy�wietlanie okna 56
P�tla komunikat�w 56
Procedura okna... 58
Przetwarzanie komunikat�w 59
Odtwarzanie pliku d�wi�kowego 59
Komunikat WM PAINT 60
Komunikat WM DESTROY 62
Przeszkody w programowaniu windowsowym 62
Nie wywo�uj mnie, ja wywo�am ciebie 62
Komunikaty kolejkowane i niekolejkowane 64
Szybkie wej�cie i wyj�cie 65
Rozdzia� 4: Wy�wietlanie tekstu 67
Malowanie i od�wie�anie 68
Komunikat WM PAINT 68
Prostok�ty zatwierdzone i uniewa�nione 69
Wprowadzenie do GDI 70
Kontekst urz�dzenia 70
Otrzymywanie uchwytu kontekstu urz�dzenia. Spos�b pierwszy 71
Struktura informacji o malowaniu 72
Otrzymywanie uchwytu kontekstu urz�dzenia. Spos�b drugi 74
Funkcja TextOut - szczeg�y 75
Czcionka systemowa 76
Rozmiary znaku 77
Rozmiary tekstu - szczeg�y 78
Formatowanie tekstu 79
Sk�adanie wszystkiego w ca�o�� 80
Procedura okna w SYSMETS1.C 86
Brak miejsca 88
Wielko�� obszaru roboczego 88
Paski przewijania 89
Zakres i pozycja paska przewijania 91
Komunikaty paska przewijania 92
Przewijanie SYSMETS 94
Dostosowanie programu do malowania 98
Poprawianie przewijania 99
Spis tre�ci VII
Funkcje informacyjne pask�w przewijania 99
Jak przewija� minimalnie� 101
Nowy SYSMETS 102
Nie lubi� myszy 108
Rozdzia� 5: Podstawy grafiki 111
Struktura GDI . 111
Filozofia GDI 111
Wywolania funkcji GDI 113
Podstawowe elementy GDI 114
Pozostale elementy GDI 115
Kontekst urz�dzenia 116
Pobieranie uchwytu kontekstu urz�dzenia 116
Pobieranie informacji o kontek�cie urz�dzenia 118
Program DEVCAPS1 118
Rozmiar urz�dzenia 121
Informacje o kolorach 127
Atrybuty kontekstu urz�dzenia 129
Zapami�tywanie kontekstu urz�dzenia 130
Rysowanie punkt�w i linii 131
Pod�wietlanie pikseli 132
Linie proste 132
Funkcje obramowania 137
Krzywe sklejane B�ziera 142
U�ywanie pi�r standardowych 147
Tworzenie, wybieranie i usuwanie pi�r 148
Zape�nianie przerw 151
Tryby rysowania 151
Rysowanie wype�nionych obszar�w 153
Funkcja Polygon i tryb wypelniania wielok�ta 154
Malowanie wn�trza 158
Tryby odwzorowania GDI 160
Wsp�rz�dne urz�dzenia i wsp�lrz�dne logiczne 162
Systemy wsp�lrz�dnych urz�dzenia 162
Widok i okno 163
Praca w trybie MM TEXT 165
Metryczne tryby odwwzorowania 168
"Modyfikowalne" tryby odwzorowania . 171
Program WHATSIZE 176
Prostok�ty, regiony i obcinanie 179
Praca z prostok�tami 180
Losowo kre�lone prostok�ty 181
Tworzenie i malowanie region�w 185
VIII Programowanie Windows
Obcinanie za pomoc� prostok�t�w i region�w 186
Program CLOVER 187
Rozdzia� 6: Klawiatura 193
Podstawowe informacje 193
Ignorowanie klawiatury 193
Kto ma fokus 194
Kolejki i synchronizacja 195
Klawisze a znaW 196
Komunikaty klawiaturowe 196
Klawisze systemowe i niesystemowe 197
Kody klawiszy wirtualnych 198
Informacja przekazywana przez IParam 202
Stany klawisza [Shift] 204
Korzystanie z komunikat�w zwi�zanych z naciskaniem klawiszy 205
Wzbogacanie SYSMETS o obs�ug� klawiatury 206
Komunikaty znakowe 213
Cztery komunikaty znakowe 214
Kolejno�� komunikat�w 215
Naciskane klawisze a znaki 216
Komunikaty martwych znak�w 217
Komunikaty klawiaturowe a zestawy znak�w 218
Program KEYVIEW1 218
Problem z klawiaturami narodowymi 223
Zestawy znak�w a czcionki 225
A co z unikodem? 236
TrueType i du�e czcionw 237
Karetka (a nie kursor) 244
Funkcje karetki 244
Program TYPER 245
Rozdzia� 7: Mysz 253
Podstawy 254
Kilka szybkich definicji 254
Komunikaty myszy dla obszaru roboczego 255
Proste przetwarzanie komunikat�w myszy: przyk�ad 257
Obs�uga klawiszy specjalnych 260
Klikni�cia dwukrotne 262
Komunikaty myszy nie zwi�zane z obszarem roboczym 263
Komunikat testu na trafienie obrze�a okna 264
Komunikaty generuj�ce komunikaty 265
Testowanie trafienia w twoich programach 266
Przyk�ad hipotetyczny 266
Spis tre�ci IX
Przyk�adowy program 267
Emulacja myszy za pomoc� klawiatury 270
Dodanie interfejsu klawiatury do programu CHECKER 271
Wykorzystanie okien potomnych do testowania trafienia 275
Okna potomne w programie CHECKER 276
Okna potomne a klawiatura 280
Przechwytywanie myszy 286
Blokowanie prostok�ta 286
Przechwycenie : 289
Program BLOKOUT2 290
K�ko myszy 293
Co dalej? 300
Rozdzia� 8: Zegar 301
Podstawowe informacje o zegarze 302
System i zegar 302
Komunikaty zegarowe nie s� asynchroniczne 303
Zegar: trzy metody wykorzystania 304
Metoda pierwsza 304
Metoda druga 307
Metoda trzecia 310
Wykorzystanie zegara 310
Zegar cyfrowy 311
Pobieranie aktualnego czasu 315
Wy�wietlanie cyfr i dwukropk�w 316
By� �wiatowcem 316
Zegar analogowy 317
Zegar a raporty 322
Rozdzia� 9: Kontrolki okna potomnego 327
Klasa przycisk�w 329
Tworzenie okien potomnych 332
Komunikacja mi�dzy kontrolkami a oknem nadrz�dnym 334
Komunikacja pomi�dzy oknem nadrz�dnym a kontrolkami 335
Przyciski klasyczne (naciskane) 336
Pola wyboru 336
Przyciski opcji 338
Pola grupy 338
Modyfikacja tekstu przycisku 338
Przyciski widoczne i dost�pne 339
Przyciski i fokus 339
Kontrolki a kolory 340
Kolory systemowe 341
X Programowanie Windows
Kolory przycisku 342
Komunikat WM CTLCOLORBTN 343
Przyciski rysowane przez program 344
Klasa statyczna 350
Klasa paska przewijania 351
Program COLORS1 353
Automatyczny interfejs klawiatury 359
Zak�adanie podklasy okna 360
Kolorowanie t�a 360
Kolorowanie pask�w przewijania i tekst�w statycznych 361
Klasa edycji 362
Siyle klasy edycji 365
Kody powiadamiania kontrolki edycji 366
Pos�ugiwanie si� kontrolk� edycji 366
Komunikaty wysy�ane do kontrolki edycji 366
Klasa pola listy 367
Style pola listy 368
Umieszczanie �a�cuch�w w polu listy 369
Zaznaczanie i pobieranie element�w listy 370
Komunikaty wys�ane przez pole listy : 371
Prosta aplikacja z polem listy 372
Lista plik�w 376
Program HEAD dla Windows 377
Rozdzia� 10: Menu i inne zasoby 383
Ikony, kursory, ci�gi znak�w i zasoby u�ytkownika 384
Dodawanie ikony do programu 384
Uzyskiwanie uchwytu ikon .389
U�ywanie ikon w programie 391
U�ywanie w�asnych kursor�w 392
Ci�gi znak�w jako zasoby 393
Zasoby u�ytkownika 395
Menu 402
Za�o�enia menu 402
Struktura menu 403
Definiowanie menu 403
Odwo�ywanie si� do menu w programie 404
Menu i komunikaty 405
Program przyk�adowy 407
Konwenanse w menu 412
Definiowanie menu -trudniejszy spos�b 413
Ruchome menu rozwijane (menu podr�czne) 414
U�ywanie menu systemowego 419
Zmienianie menu 422
Spis tre�ci XI
Inne polecenia menu 422
Niestandardowe podej�cie do menu 423
Klawisze skr�tu 427
Dlaczego nale�y u�ywa� klawiszy skr�tu 428
Niekt�re zasady przypisywania skr�t�w 428
Tabela skr�t�w 429
Wczytywanie tabeli skr�t�w 429
T�umaczenie naci�ni�� klawiszy 429
Odbieranie komunikat�w klawiatury 430
Program POPPAD z menu i klawiszami skr�tu 431
Udost�pnianie element�w menu 437
Przetwarzanie opcji menu 437
Rozdzia� 11: Okna dialogowe 441
Modalne okna dialogowe 442
Tworzenie okna dialogowego About 442
Okno dialogowe i jego szablon 446
Procedura okna dialogowego 448
Wy�wietlanie okna dialogowego 449
Wariacje na temat 450
Bardziej z�o�one okna dialogowe 454
Praca z kontrolkami w oknie dialogowym 460
Przyciski OK i Cancel 462
Unikanie zmiennych globalnych 464
Grupy i miejsca przej�cia tabulatorem 465
Rysowanie w oknie dialogowym 466
U�ywanie innych funkcji z oknami dialogowymi 467
Definiowanie w�asnych kontrolek 467
Niemodalne okna dialogowe 474
R�nice mi�dzy modalnymi i niemodalnymi oknami dialogowymi 475
Program COLORS w nowej wersji 477
Program HEXCALC: okno zwyk�e czy dialogowe? 481
Standardowe okna dialogowe 489
Nowa wersja programu POPPAD 489
Operacje wej�cia/wyj�cia na plikach Unicode 509
Zmiana czcionki 509
Wyszukiwanie i zast�powanie 510
Program Windows zawieraj�cy tylko jedno wywo�anie funkcji 510
Rozdzia� 12: Schowek 513
Proste zastosowanie Schowka 513
Standardowe formaty danych Schowka 513
Przydzielanie pami�ci 515
Przenoszenie tekstu do Schowka 517
XII Programowanie Windows
Pobieranie tekstu ze Schowka 518
Otwieranie i zamykanie Schowka 519
Schowek i Unicode 520
Poza standardowymi zastosowaniami Schowka 525
U�ywanie kilku element�w danych 525
Op�nione przenoszenie 526
W�asne formaty danych 528
Tworzenie podgl�du Schowka 530
�a�cuch podgl�du Schowka 530
Funkcje i komunikaty podgl�du Schowka 531
Prosty podgl�d Schowka 533
Cz�� II: Grafika 537
Rozdzia� 13: Drukowanie 539
Podstawy drukowania 540
Drukowanie a buforowanie 540
Kontekst urz�dzenia drukuj�cego 544
Rozszerzony program DEVCAPS 546
Wywo�anie PrinterProperties 555
Sprawdzanie cechy BitBlt 556
Najprostszy program drukuj�cy 557
Drukowanie grafiki i tekstu 558
Drukowanie konturu 561
Anulowanie wydruku i procedura Abort 562
Jak Windows korzysta z AbortProc 564
Implementacja procedury AbortProc 564
Tworzenie okna dialogowego Printing 567
Drukowanie w programach POPPAD 571
Rozdzia� 14: Bitmapy i BitBlty 579
Podstawowe wiadomo�ci o bitmapach 579
Sk�d si� bior� bitmapy? 580
Rozmiary bitmap 581
Kolor i bitmapy 582
Urz�dzenia rzeczywiste 582
Obs�uga bitmap w GDI 585
Transfer blok�w bitowych 586
Prosty BitBlt 586
Rozci�ganie bitmap 590
Tryb StretchBlt 593
Operacje rastrowe 593
Blt desenia 596
r-�
Spis tre�ci XIII
Obiekt bitmapy GDI 598
Tworzenie DDB 599
Bity bitmapy 601
Kontekst urz�dzenia pami�ciowego 602
Wczytywanie bitmap z zasob�w 603
Format bitmapy monochromatycznej 607
Bitmapowe p�dzle 610
Rysowanie na bitmapach 612
Bitmapa cieniowa 616
Wykorzystanie bitmap w menu 621
Nieprostok�tne obrazy bitmapowe 633
Prosta animacja 639
Bitmapy poza oknem 642
Rozdzia� 15: Bitmapa niezale�na od urz�dze� 653
Format pliku DIB 653
DIB w stylu OS/2 654
Do g�ry nogami! 657
Bity pikseli DIB 658
Rozszerzony format DIB Windows 659
Realia 662
Kompresja DIB 663
Maskowanie kolor�w 666
Nag��wek wersji 4 669
Nag��wek wersji 5 673
Wy�wietlanie informacji DIB 674
Wy�wietlanie i drukowanie 681
Penetracja wn�trza DIB 681
Piksel na piksel 684
Postawiony na g�owie �wiat DIB 693
Wy�wietlanie sekwencyjne 701
Rozci�ganie i dopasowywanie 708
Konwersja kolor�w, palety oraz szybko�� dzia�ania 718
Po��czenie DIB i DDB 719
Tworzenie DDB z DIB 719
Od DDB do DIB 726
Sekcja DIB 727
Wi�cej o odmienno�ci sekcji DIB 735
Opcja odwzorowania pliku 736
Podsumowanie 737
Rozdzia� 16: Palette Manager 739
Stosowanie palet 739
Sprz�t wideo 740
XIV Programowanie Windows
Wy�wietlanie odcieni szaro�ci 741
Komunikaty palety 748
Indeks palety 749
Zapytanie o mo�liwo�� obs�ugi palety 752
Paleta systemowa 753
Inne funkcje palety 754
Problem dzia�a� rastrowych 754
Przygl�daj�c si� palecie systemowej 755
Animacja palety 764
Podskakuj�ca pi�ka 765
Animacja jednej pozycji palety 773
Aplikacje in�ynierskie 777
Palety i obrazy rzeczywiste 782
Palety i upakowane DIB 782
Paleta wielozadaniowa 792
Paleta p�tonowa 798
Indeksowanie palety kolor�w 802
Palety i obiekty bitmap 808
Palety i sekcje DIB 813
Biblioteka obs�ugi DIB 818
Struktura DIBSTRUCT 819
Funkcje informacyjne 821
Odczytywanie i zapisywanie pikseli 827
Tworzenie i konwersja sekcji DIB 831
Plik nag��wkowy DIBHELP i makra 843
Program DIBBLE 845
Palety proste; palety optymalne 868
Konwersja format�w 881
Rozdzia� 17: Tekst i czcionki 887
Proste wy�wietlanie tekstu 887
Funkcje rysowania tekstu 887
Atrybuty kontekstu urz�dzenia dla tekstu 890
Czcionki zapasowe 891
Czcionki - informacje podstawowe 892
Typy czcionek 892
Czcionki TrueType 893
Atrybuty czy style? 894
Rozmiar punktowy 895
Interlinia i odst�py mi�dzy znakami 895
Problem logicznego cala 895
Czcionka logiczna 897
Tworzenie i wybieranie czcionki logicznej 897
Program PICKFONT 898
Spis tre�ci XV
Struktura czcionki logicznej 912
Algorytm odwzorowania czcionek 917
Uzyskiwanie informacji o czcionce 918
Zestawy znak�w i Unicode 919
System EZFONT 921
Obracanie czcionki 929
Wyliczanie czcionek 931
Funkcje wyliczaj�ce 931
Okno dialogowe ChooseFont 932
Formatowanie akapitu 940
Proste formatowanie tekstu 941
Praca z akapitami 942
Podgl�d wydruku 950
Troch� �miesznych i fantazyjnych efekt�w 961
�cie�ka GDI 961
Pisaki o rozszerzonych mo�liwo�ciach 962
Cztery przyk�adowe programy 966
Rozdzia� 18: Metapliki 973
Stary format metapliku 974
Proste zastosowanie metaplik�w przechowywanych w pami�ci 974
Zapisywanie metaplik�w na dysku 977
Stary format metapliku i Schowek 978
Rozszerzone metapliki 982
Procedura podstawowa 983
Zajrzyjmy do �rodka 986
Metapliki i obiekty GDI 993
Metapliki i bitmapy 998
Wyliczanie metapliku 1001
Osadzanie obraz�w 1008
Podgl�d metapliku rozszerzonego i wydruki 1012
Wy�wietlanie szczeg��w w metaplikach 1021
Skalowanie i proporcje rozmiar�w 1031
Tryby odwzorowania i metapliki 1033
Odwzorowanie i odiwarzanie 1035
Cz�� III: Zagadnienia zaawansowane 1041
Rozdzia� 19: Interfejs wielodokumentowy 1043
Koncepcja MDI 1043
Elementy MDI 1043
Obsfuga MDI 1045
Przyk�adowa implementacja MDI 1047
XVI Programowanie Windows
Trzy menu 1057
Inicjacja programu 1058
Tworzenie okien potomnych 1059
Przetwarzanie komunikatu Wi�cej okien 1060
Okna potomne, okna dokument�w 1061
Sprz�tanie 1063
Rozdzia� 20: Wielozadaniowo�� i wielow�tkowo�� 1065
Historia wielozadaniowo�ci 1066
Wielozadaniowo�� w systemie DOS? 1066
Wielozadaniowo�� bez wywtaszczania 1066
Mened�er prezentacji i szeregowa kolejka komunikat�w 1068
Rozwi�zanie wielow�tkowe 1068
Architektura wielow�tkowa 1069
Uci��liwo�� w�tk�w 1070
Przewaga Windows 1071
Nowo��! Ulepszona formu�a! Dost�pne z w�tkami! 1072
Wielow�tkowo�� w Windows 1072
Losowe prostok�ty raz jeszcze 1073
Zadanie z konkursu programistycznego Microsoftu 1076
Rozwi�zanie wielow�tkowe 1082
Jakie� problemy? 1090
Zalety snu 1091
Synchronizacja w�tk�w 1092
Sekcja krytyczna 1092
Sygnalizowanie zdarze� 1094
Program BIGJOB1 1094
Obiekt zdarzenia 1099
Lokalna pami�� w�tku (TLS) 1103
Rozdzia� 21: Biblioteki dynamiczne 1107
Podstawowe informacje o bibliotekach 1107
Biblioteka - temat-rzeka 1108
Przyk�adowy DLL 1109
Punkt wej�cia i wyj�cia biblioteki 1112
Program testowy 1113
Biblioteki dynamiczne a pami�� wsp�lna 1116
Program STRPROG 1121
Wsp�u�ytkowanie danych przez instancje programu STRPROG 1126
R�ne tematy zwi�zane z bibliotekami dynamicznymi 1126
Dynamiczna konsolidacja bez importu 1127
Biblioteki z samymi zasobami 1128
Spis tre�ci XVII
Rozdzia� 22: D�wi�k i muzyka 1133
Windows i multimedia 1133
Urz�dzenia system�w multimedialnych 1133
Przegl�d API 1134
Eksplorujemy MCI - program TESTMCI 1135
MCITEXT a CD audio 1140
D�wi�k wave 1143
D�wi�k a kszta�t fali . 1144
Modulacja kodowo-impulsowa 1145
Cz�stotliwo�� pr�bkowania 1146
Rozmiar pr�bki 1147
Programowe generowanie sygna��w sinusoidalnych 1148
Cyfrowy odtwarzacz d�wi�ku 1157
Rozwi�zanie alternatywne z zastosowaniem MCI 1168
Rozwi�zanie ze znakowymi poleceniami MCI 1176
Format pliku wave 1180
Eksperymenty z syntez� addytywn� 1181
Budzenie za pomoc� d�wi�k�w wave 1190
Muzyka MIDI 1198
Dzia�anie MIDI 1198
Zmiana programu 1200
Kana�y MIDI 1200
Komunikaty MIDI 1201
Wprowadzenie do sekwencji MIDI 1203
Symulowanie syntezatora MIDI z klawiatury PC 1210
Automat perkusyjny MIDI 1225
Multimedialne funkcje zwi�zane z czasem 1245
Operacje na plikach typu RIFF 1248
Rozdzia� 23: Smak Internetu 1253
Gniazda Windows 1253
Gniazda a TCP/IP 1253
Sieciowe us�ugi zwi�zane z czasem 1254
Program NETTIME 1255
Winlnet i FTP 1267
Przegl�d FTP API 1268
Program demonstruj�cy �ci�ganie plik�w z serwera.FTP 1269
Indeks 1281
auto ra
Aktualne informacje na temat tej ksi��ki, ze sprostowaniami ewentualnych b��-
d�w i nowymi wydrukami kod�w w��cznie, znajdziesz w moim o�rodku WWW
pod adresem www.cpetzold.com. Na tematy zwi�zane z ksi��k� mo�esz napisa�
do mnie na adres
[email protected]. Postaram si� odpowiedzie� na prostsze
pytania, chocia� niczego nie mog� obieca�. Jestem zwykle bardzo zaj�ty, a m�j
kot nie chce si� uczy� Windows API.
Chcia�bym podzi�kowa� wszystkim pracownikom wydawnictwa Microsoft Press
za wielk� prac� w�o�on� w t� ksi��k�. S�dz�, �e to wydanie, upami�tniaj�ce dzie-
si�t� rocznic� pierwszego wydania Programowania Windows, jest najlepsze. S�owa
wdzi�czno�ci nale�� si� tak�e tym osobom z Microsoftu (w��cznie z niekt�rymi
pierwszymi projektantami Windows), kt�rzy s�u�yli mi pomoc� przy wcze�niej-
szych wydaniach ksi��ki i tam zostali wymienieni.
Pragn� te� podzi�kowa� rodzinie i przyjacio�om, a w szczeg�lno�ci tym (wiesz,
o kim m�wi�!), kt�rzy umo�liwili powstanie tej ksi��ki. W�a�nie wam j� dedykuj�.
Charles Petzold
5 pa�dziernika 1998 roku
Cz�� I
o s aw
Rozdzia� 2
Z z nam
ac
Ta ksi��ka pokazuje, jak mo�esz tworzy� programy, kt�re dzia�aj� w �rodowisku
Windows 98, Windows NT 4.0 i Windows NT 5.0 Microsoftu. Takie programy s�
pisane w j�zyku programowania C i wykorzystuj� rodzimy interfejs programo-
_ _ wania aplikacji Windows (ang. application programming interface, API). Jak dalej
wyja�ni�, nie jest to jedyny spos�b tworzenia program�w, kt�re dzia�aj� w tym
�rodowisku. Jednak bardzo wa�ne jest zrozumienie API Windows, niezale�nie
od tego, w czym ostatecznie b�dziesz pisa� sw�j kod.
jak zapewne wiesz, Windows 98 jest najnowszym wcieleniem graficznego syste-
mu operacyjnego, kt�ry w rzeczywisto�ci sta� si� standardem dla komputer�w
osobistych kompatybilnych z IBM-PC wykorzystuj�cych 32-bitowe mikroproce-
sory Intela, jak 486 oraz Pentium. Windows NT to bardziej rozbudowana, prze-
mys�owa wersja Windows, kt�ra dzia�a zar�wno na komputerach kompatybil-
nych z PC, jak te� na niekt�rych RISC-owych stacjach roboczych.
Po t� ksi��k� mo�esz si�gn��, je�li spe�niasz trzy podstawowe warunki. Po pierw-
sze, powiniene� zna� Windows z perspektywy u�ytkownika. Nie masz co liczy�
na napisanie aplikacji dla Windows, je�li nie pozna�e� interfejsu u�ytkownika.
Z tego powodu sugeruj�, aby� wykonywa� swoje prace prograniistyczne (oraz inne
prace) na komputerze opartym na Windows, u�ywaj�c aplikacji dzia�aj�cych
w tym �rodowisku.
Po drugie, powiniene� zna� C. Je�eli nie znasz, programowanie Windows praw-
dopodobnie nie jest najlepsz� okazj� do studiowania tego j�zyka. Radz� ci, by�
uczy� si� C w �rodowisku znakowym, oferowanym w oknie wiersza polece� MS-
DOS-a w Windows. Programowanie Windows czasem wykorzystuje takie aspekty
C, kt�rych nie spos�b pokaza� w programowaniu znakowym. W takich wypad-
kach om�wi� je bardziej szczeg�owo. Zazwyczaj jednak wystarcza znajomo��
j�zyka, w szczeg�lno�ci struktur i wska�nik�w C. Pewne obycie ze standardow�
bibliotek� C jest przydatne, ale niekonieczne.
Po trzecie, powiniene� zainstalowa� na swoim komputerze 32-bitowy kompila-
tor C i �rodowisko projektowe odpowiednie do pisania program�w Windows.
Przyjmuj�, �e u�ywasz Visual C++ 6.0 Microsoftu, kt�ry mo�esz naby� osobno
lub jako cz�� pakietu Visual Studio 6.0.
I to ju� wszystko. Zak�adam, �e nie masz �adnego do�wiadczenia w programo-
waniu w �rodowisku graficznym, takim jak Windows.
Cz�� I: Podstawy
�rodowisko Windows
Windows wymaga wprowadzenia. �atwo zapominamy, jak bardzo pod jego wp�y-
wem zmieni� si� spos�b obs�ugi komputer�w osobistych. Windows pokona� wy-
boist� drog� wczesnych lat dzieci�cych i zdoby� mocn� pozycj� na rynku.
Historia Windows
Wkr�tce po wprowadzeniu jesieni� 1981 roku komputer�w IBM PC sta�o si� ja-
sne, �e dominuj�cym systemem operacyjnym dla pecet�w (i zgodnych z nimi)
b�dzie MS-DOS, czyli w pe�nym brzmieniu Microsoft Disk Operating System (dys-
kowy system operacyjny Microsoftu). MS-DOS by� minimalnym systemem ope-
racyjnym. U�ytkownikom umo�liwia� dost�p (za po�rednictwem interfejsu wier-
sza polece�) do takich polece�, jak DIR i TYPE, oraz �adowanie do pami�ci pro-
gram�w aplikacji w celu ich wykonania. Programistom aplikacji oferowa� niewiele
wi�cej ponad zestaw wywo�a� funkcji do wykonywania operacji plikowego wej-
�cia-wyj�cia (I/O). Przy innych zadaniach - w szczeg�lno�ci przy wy�wietlaniu
na ekranie tekstu i (czasami) grafiki - aplikacje wykorzystywa�y bezpo�redni do-
st�p do sprz�tu.
Na skutek ogranicze� pami�ciowych i sprz�towych skomplikowane �rodowisko
graficzne z trudem przenika�o do ma�ych komputer�w. Apple Computer zaofe-
rowa� alternatyw� w stosunku do �rodowiska znakowego, wprowadzaj�c w stycz-
niu 1983 roku sw�j nieudany komputer Lisa, a w styczniu 1984 roku ustanowi�
standard dla �rodowiska graficznego za pomoc� modelu Macintosh. Pomimo
malej�cego znaczenia na rynku, ci�gle stanowi on wzorzec, z kt�rym por�wny-
wane s� inne �rodowiska graficzne. Wszystkie �rodowiska graficzne, z Macinto-
shem i Windows w��cznie, korzystaj� z wynik�w pionierskich prac prowadzo-
nych w po�owie lat siedemdziesi�tych w o�rodku badawczo-rozwojowym Xero-
xa - Palo Alto Research Center (PARC).
W listopadzie 1983 roku (po Lisie, ale przed Macintoshem) firma Microsoft Cor-
poration zapowiedzia�a system Windows. Pojawi� si� on na rynku dwa lata p�-
niej, w listopadzie 1985 roku. Przez nast�pne dwa lata Windows 1.0 by� stopnio-
wo uzupe�niany o dodatkowe sterowniki adapter�w graficznych i drukarek w celu
spe�nienia wymaga� rynku mi�dzynarodowego.
Windows w wersji 2.0 pojawi� si� w listopadzie 1987. Sporo zmieniono w inter-
fejsie u�ytkownika. Przede wszystkim sta�o si� mo�liwe zachodzenie na siebie
okien, a nie tylko ustawianie ich s�siaduj�co, jak w wersji Windows 1.0. Windows
2.0 zawiera� te� rozszerzenia interfejsu klawiatury i myszy, u�atwiaj�ce pos�ugi-
wanie si� menu i oknami dialogowymi.
�wczesny Windows wymaga� tylko mikroprocesora Intel 8086 lub 8088 pracuj�-
cego w trybie rzeczywistym, kt�ry dawa� dost�p do 1 megabajta (MB) pami�ci
operacyjnej. Windows/386 (kt�ry pojawi� si� wkr�tce po wersji 2.0) wykorzysty-
wa� ju� tryb wirtualny mikroprocesor�w 386 Intela do uruchamiania w oknach
wielu program�w dosowych, maj�cych bezpo�redni dost�p do zasob�w sprz�to-
wych. Dla zachowania zgodno�ci nazw przemianowano wtedy Windows 2.1 na
Windows/286.
Rozdzia� 1: Zaczynamy
Windows 3.0 zosta� przedstawiony 22 maja 1990 roku. ��czy� on w jeden pro-
dukt wcze�niejsze wersje Windows/286 i Windows/386. Du�� zmian� w Win-
dows 3.0 by�o wykorzystanie 16-bitowego trybu chronionego mikroprocesor�w
Intel 286, 386 i 486. Umo�liwi�o to samemu systemowi i jego aplikacjom dost�p
do 16 megabajt�w pami�ci. Ca�kowicie zmieniono j�dro systemu uruchamiaj�ce
programy i zarz�dzaj�ce plikami. Windows 3.0 by� pierwsz� wersj� Windows,
kt�ra zyska�a szersze zastosowanie w domu i biurze.
Ka�da historia Windows musi zawiera� wzmiank� o OS/2, systemie alternatyw-
nym dla DOS-a i Windows, kt�ry zosta� opracowany przez Microsoft we wsp�-
pracy z IBM-em. OS/2 w wersji 1.0 (dzia�aj�cy tylko w trybie znakowym) praco-
wa� na procesorach 286 (i p�niejszych) Intela, a pojawi� si� pod koniec 1987 roku.
Interfejs graficzny o nazwie Presentation Manager (PM) pojawi� si� dopiero w wersji
1.1 OS/2, w pa�dzierniku 1988 roku. Pierwotnie mia� on stanowi� wersj� Win-
dows pracuj�c� w trybie chronionym, ale interfejs API zosta� zmieniony do tego
stopnia, �e producenci oprogramowania nie byli w stanie obs�u�y� jednocze�nie
obu platform.
Konflikt pomi�dzy IBM-em i Microsoftem osi�gn�� punkt kulminacyjny we wrze-
�niu 1990 roku i drogi obu firm rozesz�y si�. IBM przej�� OS/2, a Microsoft skon-
centrowa� si� na Windows. Chocia� OS/2 miewa jeszcze zagorza�ych zwolenni-
k�w, nigdy nie osi�gn�� popularno�ci cho�by zbli�onej do Windows.
Wersja 3.1 Windows Microsoftu pojawi�a si� w kwietniu 1992 roku. Najwa�niej-
szymi ulepszeniami by�y: TrueType (skalowalne czcionki Windows), multimedia
(d�wi�k i muzyka), OLE (Object Linking and Embedding) i standaryzacja podsta-
wowych okien dialogowych. Windows 3.1 dzia�a� tylko w trybie chronionym i wy-
maga� procesora 286 lub 386 oraz co najmniej 1 MB pami�ci.
Windows NT, wprowadzony w lipcu 1993 roku, by� pierwsz� wersj� Windows
umo�liwiaj�c� korzystanie z trybu 32-bitowego procesor�w Intela 386, 486 i Pen-
tium. Programy uruchamiane pod Windows NT maj� dost�p do 32-bitowej p�a-
skiej przestrzeni adresowej i u�ywaj� zestawu 32-bitowych instrukcji. (O prze-
strzeni adresowej powiem wi�cej w dalszej cz�ci tego rozdzia�u). Windows NT
zosta� zaprojektowany jako system przeno�ny na procesory nie-Intelowskie i dzia�a
na wielu RISC-owych stacjach roboczych.
Windows 95 zosta� wprowadzony w sierpniu 1995 roku. Podobnie jak Windows
NT, Windows 95 tak�e umo�liwia 32-bitowy tryb programowania procesor�w
Intela 386 i p�niejszych. Chocia� nie posiada niekt�rych cech Windows NT, ta-
kich jak wysoki poziom bezpiecze�stwa i przeno�no�� na maszyny RISC-owe,
ma jednak mniejsze wymagania sprz�towe.
Windows 98 pojawi� si� w czerwcu 1998 roku; zawarte w nim ulepszenia zwi�k-
szaj� wydajno�� oraz umo�liwiaj� lepsz� wsp�prac� ze sprz�tem i wi�ksz� inte-
gracj� z Internetem i WWW.
Cechy Windows
Windows 98 i Windows NT s� 32-bitowymi graficznymi systemami operacyjny-
mi, kt�re cechuje wielozadaniowo�� z wyw�aszczaniem (ang. preemptive multita-
sking) i wielow�tkowo�� (ang. multithreading). Windows ma graficzny interfejs
Cz�� I: Podstawy
u�ytkownika (ang. graphical user interface, GUI), czasem nazywany interfejsem
wizualnym lub okienkowym �rodowiskiem graficznym. Podstawy GUI stworzo-
no w po�owie lat siedemdziesi�tych w o�rodku PARC Xeroxa na komputerach
Alto i Star w �rodowisku typu SmallTalk. Te prace uzyska�y p�niej wi�ksze zna-
czenie i zosta�y spopularyzowane przez Apple Computer i Microsoft. Chocia�
niegdy� wydawa�o si� to dosy� kontrowersyjne, obecnie ca�kiem oczywiste jest
�e GUI to - jak uwa�a Charles Simonyi z Microsoftu - "najdonio�lejszy consen-
sus" przemys�u komputer�w osobistych.
Wszystkie GUI u�ywaj� grafiki do wy�wietlania rastrowego. Grafika pozwala na
lepsze wykorzystanie obszaru ekranu, zapewnia ciekawe �rodowisko wizualne
dla przenoszenia informacji i mo�liwo�� uzyskania WYSIWYG (ang. zvhat you see
is what you get - otrzymasz to, co widzisz), czyli pe�nej zgodno�ci wygl�du do-
kumentu na ekranie z jego wydrukiem.
Dawniej na ekranie mo�na by�o jedynie wy�wietli� tekst wprowadzany przez
u�ytkownika z klawiatury. W nowym typie interfejsu ekran staje si� dla u�yt-
kownika urz�dzeniem wej�ciowym. Na ekranie pokazywane s� r�ne obiekty
graficzne w formie ikon i urz�dzenia wej�ciowe, jak przyciski i paski przewija-
nia. Pos�uguj�c si� klawiatur� (lub urz�dzeniami wskazuj�cymi typu mysz) u�yt-
kownik mo�e bezpo�rednio manipulowa� tymi obiektami na ekranie. Obiekty
graficzne mog� by� przeci�gane, przyciski - przyciskane, a suwaki pask�w prze-
wijania - przesuwane.
Interakcja mi�dzy u�ytkownikiem i programem staje si� bli�sza. Zamiast jedno-
stronnego przesy�ania informacji z klawiatury do programu w celu wy�wietlenia
na ekranie, u�ytkownik bezpo�rednio oddzia�uje na obiekty na ekranie, a te od-
powiadaj� na jego polecenia i ukierunkowuj� kolejne kroki.
Nikt nie lubi sp�dza� d�ugich godzin na nauce obs�ugi komputera lub nowego
programu. Windows wychodzi nam naprzeciw, gdy� wszystkie aplikacje maj�
zbli�ony wygl�d na ekranie i opieraj� swoje dzia�anie na podobnych zasadach.
Program zajmuje zwykle na ekranie prostok�tny obszar, zwany oknem. Ka�de
okno jest identyfikowane przez pasek tytu�u. Wi�kszo�� funkcji programu jest do-
st�pna w jego menu. U�ytkownik mo�e zobaczy� informacj�, kt�ra nie mie�ci si�
na ekranie, wykorzystuj�c paski przewijania. Niekt�re pozycje menu wywo�uj�
okna dialogowe, w kt�rych u�ytkownik mo�e wprowadzi� dodatkowe informa-
cje. Jedno z okien dialogowych (u�ywane do otwierania pliku) mo�na znale�� w
ka�dym wi�kszym programie. To okno dialogowe wygl�da tak samo (albo pra-
wie tak samo) we wszystkich programach i prawie zawsze jest wywo�ywane przez
t� sam� opcj� menu.
Poniewa� wiesz ju�, jak u�ywa� program�w Windows, �atwo mo�esz nauczy�
si� dalszych funkcji. Menu i okna dialogowe pozwalaj� u�ytkownikowi ekspery-
mentowa� z nowym programem i odkrywa� jego mo�liwo�ci. Wi�kszo�� progra-
m�w Windows mo�e by� obs�ugiwana na dwa sposoby: z klawiatury i za pomo-
c� myszy. Chocia� wi�kszo�� funkcji program�w jest dost�pna z klawiatury, to
pos�ugiwanie si� mysz� jest zdecydowanie wygodniejsze.
Z perspektywy programisty sp�jny interfejs u�ytkownika wynika z u�ycia wbu-
dowanych procedur do konstrukcji menu i okien dialogowych. Wszystkie menu
Rozdzia� 1: Zaczynamy 7
obs�uguje si� za pomoc� klawiatury i myszy w ten sam spos�b, poniewa� to
Windows, a nie aplikacja odpowiada za ich dzia�anie.
Aby u�atwi� jednoczesne korzystanie z wielu program�w i wymian� informacji
mi�dzy nimi, Windows oferuje wielozadaniowo��. Wiele program�w mo�e dzia�a�
i wy�wietla� wyniki w tym samym czasie. Ka�dy program posiada na ekranie
swoje okno. U�ytkownik mo�e przesuwa� okna po ekranie, zmienia� ich rozmia-
ry, prze��cza� si� mi�dzy r�nymi programami i przenosi� dane z jednego pro-
gramu do drugiego. Poniewa� te okna przypominaj� troch� papiery roz�o�one
na pulpicie biurka (zanim, oczywi�cie, biurka zosta�y opanowane przez kompu-
tery), Windows czasem u�ywa metafory "pulpit" (ang. desktop) dla widoku wie-
lu program�w na ekranie.
Wcze�niejsze wersje Windows u�ywa�y tzw. wielozadaniowo�ci bez wyw�aszcza-
nia (ang. nonpreemptive multitasking). Oznacza�o to, �e Windows nie u�ywa� ze-
gara systemowego do dzielenia czasu procesora mi�dzy uruchomione programy.
Musia�y one dobrowolnie odda� sterowanie, aby inne programy mog�y dzia�a�.
W Windows NT i Windows 98 wyst�puje wielozadaniowo�� z wyw�aszczaniem
i programy mog� same dzieli� si� na wiele w�tk�w, kt�re wykonuj� si� prawie
jednocze�nie.
System operacyjny nie mo�e realizowa� wielozadaniowo�ci, je�li nie zarz�dza
pami�ci�. W miar� jak uruchamiane s� nowe programy, a stare si� ko�cz�, pa-
mi�� ulega fragmentacji. System musi konsolidowa� woln� pami��. Wymaga to
przemieszczania blok�w kodu i danych w pami�ci.
Nawet Windows 1.0, pracuj�cy na procesorze 8088, potrafi� w ten spos�b zarz�-
dza� pami�ci�. Maj�c na uwadze ograniczenia trybu rzeczywistego, mo�emy
uzna� to za majstersztyk autor�w systemu. Tak oto ograniczenie pami�ci archi-
tektury PC do 640 kilobajt�w (KB) zosta�o skutecznie prze�amane bez dok�ada-
nia dodatkowej pami�ci. Ale Microsoft poszed� dalej: Windows 2.0 dawa� aplika-
cjom dost�p do pami�ci rozszerzonej (EMS), a Windows 3.0 pracowa� w trybie
chronionym daj�c aplikacjom dost�p do 16 MB pami�ci rozszerzonej. Windows
NT i Windows 98, jako 32-bitowe systemy operacyjne z p�ask� przestrzeni� adre-
sow�, prze�ama�y te ograniczenia.
Programy pracuj�ce w Windows mog� wsp�u�ytkowa� procedury, kt�re znaj-
duj� si� w innych plikach nazywanych bibliotekami dynamicznymi (ang. dyna-
miclink libraries, DLL). Windows zawiera mechanizm ��cz�cy procedury w DLL-
ach z programem podczas jego pracy. Sam system zasadniczo jest tak�e zbiorem
takich bibliotek.
Windows to interfejs graficzny i programy windowsowe mog� w pe�ni wykorzy-
stywa� grafik� i sformatowany tekst na ekranie i w drukarce. Interfejs graficzny
nie tylko jest bardziej atrakcyjny, ale mo�e dostarczy� u�ytkownikowi wi�cej in-
formacji.
Programy pisane w �rodowisku Windows nie maj� bezpo�redniego dost�pu do
kart graficznych i drukarek. W zamian Windows zawiera j�zyk programowania
grafiki, nazywany GDI (ang. Graphics Display Interface), pozwalaj�cy na �atwe
wy�wietlanie grafiki i sformatowanego tekstu. Windows wirtualizuje urz�dze-
nia wy�wietlaj�ce. Program powinien dzia�a� na ka�dej karcie graficznej i ka�dej
8 Cz�� I: Podstawy
drukarce, dla kt�rych dost�pne s� sterowniki Windows. Nie potrzebuje sam okre-
�la� rodzaju sprz�tu do��czonego do systemu.
Stworzenie dla pecet�w interfejsu graficznego, niezale�nego od urz�dze�, nie
by�o �atwym zadaniem dla projektant�w Windows. Z za�o�enia PC by� systemem
o otwartej architekturze. Wielu niezale�nych wytw�rc�w opracowywa�o wi�c
urz�dzenia peryferyjne. Chocia� powsta�o kilka standard�w, konwencjonalne pro-
gramy MS-DOS-a musia�y indywidualnie obs�ugiwa� wiele r�nych konfiguracji
sprz�towych. Najcz�ciej dotyczy�o to program�w do obr�bki tekstu, sprzeda-
wanych z kilkoma dyskietkami ma�ych plik�w, z kt�rych ka�dy s�u�y� do obs�u-
gi konkretnego typu drukarki. Programy windowsowe nie wymagaj� takich ste-
rownik�w, poniewa� stanowi� one cz�� systemu operacyjnego.
��czenie dynamiczne
Zasada pracy Windows oparta jest na koncepcji ��czenia dynamicznego (ang.
dynamic linking). Windows dostarcza mn�stwa wywo�a� funkcji, kt�re aplikacja
mo�e wykorzysta� przy realizacji interfejsu u�ytkownika i wy�wietlaniu tekstu
i grafiki. Funkcje te zosta�y umieszczone w dynamicznych bibliotekach, inaczej
DLL-ach. S� to pliki o rozszerzeniach .DLL lub czasami .EXE, przewa�nie znaj-
duj�ce si� w podkatalogu \WINDOWS\SYSTEM Windows 98 oraz podkatalo-
gach \WINNT\SYSTEM i \WINNT\SYSTEM32 Windows NT.
Dawniej du�a cz�� Windows by�a zrealizowana w postaci zaledwie trzech bi-
bliotek dynamicznych. Reprezentowa�y one trzy podstawowe podsystemy Win-
dows, czyli Kernel, User i GDI. Ilo�� podsystem�w wzros�a w ostatnich wersjach
Windows, ale wi�kszo�� funkcji, kt�rych u�ywa typowy program, znajduje si�
nadal w tych trzech modu�ach. Kernel (aktualnie zrealizowany w 16-bitowym
KRNL386.EXE i 32-bitowym KERNEL32.DLL) obs�uguje wszystkie funkcje j�dra
systemu operacyjnego, jak zarz�dzanie pami�ci�, plikowe I/O i uruchamianie
zada�. User (zrealizowany w 16-bitowym USER.EXE i 32-bitowym USER32.DLL)
obs�uguje interfejs u�ytkownika i ca�� logik� okien. GDI (zrealizowany w 16-bi-
towym GDI.EXE i 32-bitowym GDI32.DLL) jest interfejsem urz�dze� graficznych,
pozwalaj�cym programowi wy�wietli� tekst i grafik� na ekranie lub wydruko-
wa� na drukarce.
Windows 98 oferuje aplikacjom kilka tysi�cy funkcji do wykorzystania. Ka�da
funkcja posiada opisow� nazw�, na przyk�ad CreateWindozu. Ta funkcja (jak mo-
�esz si� spodziewa�) tworzy okno twojego programu. Wszystkie funkcje Windows,
kt�rych mo�e u�ywa� aplikacja, s� zadeklarowane w plikach nag��wkowych.
W swoim programie b�dziesz korzysta� z wywo�a� funkcji Windows praktycz-
nie w ten sam spos�b, w jaki pos�ugujesz si� funkcjami bibliotecznymi C, takimi
jak strlen. Podstawow� r�nic� jest to, �e kod maszynowy dla funkcji bibliotecz-
nych C jest w��czony do kodu twojego programu, podczas gdy kod funkcji Win-
dows jest umieszczony na zewn�trz twojego programu, w DLL-ach.
Kiedy uruchamiasz program windowsowy, ��czy si� on z Windows poprzez proces
zwany ��czeniem dynamicznym (ang. dynamic linking). Plik EXE w Windows za-
wiera odno�niki do r�nych bibliotek dynamicznych i do znajduj�cych si� w nich
funkcji wykorzystywanych w programie. Gdy program jest �adowany do pami�-
Rozdzia� 1: Zaczynamy 9
ci, odwo�ania programu s� odwzorowane na wej�cia funkcji w bibliotekach, kt�-
re s� w miar� potrzeb �adowane do pami�ci.
Kiedy ��czysz program, by stworzy� plik wykonywalny, musisz po��czy� go ze
specjalnymi bibliotekami importowymi, dostarczanymi razem ze �rodowiskiem
programistycznym. Te biblioteki importowe zawieraj� nazwy bibliotek dynamicz-
nych i informacj� o wszystkich wywo�aniach funkcji Windows. Konsolidator (ina-
czej linker) u�ywa tej informacji do zbudowania tabeli w pliku EXE, kt�r� Win-
dows wykorzystuje do odwzorowania wywo�a� na funkcje Windows podczas �a-
dowania programu.
Opcje programowania Windows
Ta ksi��ka zawiera du�o przyk�adowych program�w, kt�re pozwol� zilustrowa� r�ne
techniki programowania w Windows. S� one napisane w C i u�ywaj� czystego API
Windows. Jest to klasyczny spos�b programowania w Windows. Tak pisali�my pro-
gramy dla Windows 1.0 w 1985 roku, i tak mo�na to robi� r�wnie� dzisiaj.
API i modele pami�ci
Z punktu widzenia programisty system operacyjny jest definiowany przez swoje
API. Obejmuje ono wszystkie wywo�ania funkcji, kt�re mo�e wykorzystywa� apli-
kacja oraz definicje powi�zanych typ�w danych i struktur. W �rodowisku Windows
API wymusza pewn� architektur� programu, kt�r� wyja�nimy w nast�pnych roz-
dzia�ach.
W zasadzie API Windows niewiele si� zmieni�o od czas�w Windows 1.0. Dla pro-
gramisty, kt�ry ma do czynienia z Windows 98, kod �r�d�owy program�w dla
Windows 1.0 b�dzie wygl�da� znajomo. API zosta�o tylko znacznie rozszerzone.
Windows 1.0 zawiera� mniej ni� 450 funkcji; obecnie s� ich tysi�ce.
Najwi�ksz� zmian� w API Windows i jego sk�adni spowodowa�o przej�cie z ar-
chitektury 16-bitowej na 32-bitow�. Wersje Windows od 1.0 do 3.1 pos�ugiwa�y
si� pami�ci� segmentow� trybu 16-bitowego procesor�w Intel 8086, 8088 i 286.
Tryb ten jest w dalszym ci�gu u�ywany dla zapewnienia kompatybilno�ci w 32-
bitowych procesorach Intela, pocz�wszy od 386. Wielko�� rejestru procesora w
tym trybie wynosi�a 16 bit�w, wi�c typ danych int w C zawiera� tak�e 16 bit�w.
W segmentowym modelu pami�ci adresy pami�ci sk�ada�y si� z dw�ch cz�ci:
16-bitowego wska�nika segmentu (ang. segment pointer) i 16-bitowego wska�ni-
ka przesuni�cia (ang. offset pointer). Z perspektywy programisty by�o to bardzo
skomplikowane i wymaga�o rozr�niania wska�nik�w long lub far (zawieraj�cych
segment i przesuni�cie adresu) i wska�nik�w short lub near, zawieraj�cych jedy-
nie przesuni�cie adresu (segment adresu by� domy�lny).
Ju� w Windows NT i Windows 95 skorzystano z 32-bitowego p�askiego modelu
pami�ci, u�ywaj�c 32-bitowych tryb�w procesor�w Intela 386, 486 i Pentium. Typ
danych int w C zosta� rozszerzony do 32 bit�w. Programy napisane dla 32-bito-
wych wersji Windows u�ywaj� prostych, 32-bitowych warto�ci wska�nik�w, kt�re
adresuj� p�ask�, liniow� przestrze� adresow�.
10 Cz�� I: Podstawy
API dla 16 bitowych wersji Windows (od 1.0 do 3.1) jest znane teraz jako Winl�.
API dla 32-bitowych wersji Windows (Windows 95, Windows 98 i wszystkich
wersji Windows NT) nazywane jest Win32. Przy przej�ciu z Winl6 do Win32 wiele
funkcji pozosta�o takich samych, ale niekt�re musia�y by� rozszerzone lub zmie-
nione. Na przyk�ad wsp�rz�dne graficzne zmieni�y si� z 16-bitowych w Win16
na 32-bitowe w Win32. Ponadto niekt�re funkcje Win16 zwraca�y dwie wsp�-
rz�dne, spakowane w 32-bitow� liczb� ca�kowit�. Takie rozwi�zanie by�o niemo�-
liwe w Win32, wi�c dodano nowe funkcje, kt�re dzia�a�y nieco inaczej.
Wszystkie 32-bitowe wersje Windows zawieraj� zar�wno API Win16 zapewniaj�-
ce kompatybilno�� ze starymi aplikacjami, jak i API Win32 do uruchamiania no-
wych aplikacji. Ciekawe, �e ca�y ten proces dzia�a inaczej w Windows NT ni� w
Windows 95 i Windows 98. W Windows NT wywo�ania funkcji Win16 przechodz�
przez warstw� translacji i s� zamieniane na wywo�ania funkcji Win32, obs�ugiwa-
nych przez system operacyjny. W Windows 95 i Windows 98 proces przebiega od-
wrotnie: wywo�ania funkcji Win32 przechodz� przez warstw� translacji i s� zamie-
niane na wywo�ania funkcji Win16, obs�ugiwanych przez system operacyjny.
Przez pewien czas istnia�y dwa r�ne (przynajmniej z nazwy) zestawy API Win-
dows. Win32s, gdzie "s" oznacza�o podzbi�r (ang. subset) pozwala�o programi-
�cie na pisanie 32-bitowych aplikacji dla Windows 3.1. To API zawiera�o tylko
32-bitowe wersje funkcji ju� zrealizowanych w Win16. API Windows 95 by�o na-
zywane przez pewien czas Win32c, gdzie "c" oznacza�o kompatybilno�� (ang.
compatibility), ale to okre�lenie przesta�o by� u�ywane.
Teraz przyjmuje si�, �e zar�wno Windows NT, jak i Windows 98 umo�liwiaj� ko-
rzystanie z API Win32. Jednocze�nie ka�dy z tych system�w operacyjnych ma
pewne cechy w�asne niedost�pne w drugim. Poniewa� jednak przewa�aj� funk-
cje wsp�lne, mo�liwe jest pisanie program�w, kt�re dzia�aj� w obu systemach.
Uwa�a si�, �e te dwa produkty stan� si� kiedy� jednym systemem operacyjnym.
Opcje j�zyka programowania
U�ywanie C i czystego API nie jest wprawdzie jedynym sposobem pisania pro-
gram�w Windows 98, pozwala jednak na najwszechstronniejsze i najefektywniej-
sze wykorzystanie cech tego systemu. Programy wykonywalne s� wzgl�dnie ma�e
i nie wymagaj� do pracy zewn�trznych bibliotek (poza DLL-ami samych Win-
dows, oczywi�cie). A co najwa�niejsze, poznanie API umo�liwi ci g��bsze zrozu-
mienie budowy wewn�trznej Windows, niezale�nie od tego, jak ostatecznie b�-
dziesz pisa� aplikacje dla tego systemu.
S�dz�, �e nauka klasycznego programowania Windows jest wa�na dla ka�dego pro-
gramisty, nie zmuszam ci� jednak do stosowania C i API w ka�dej aplikacji Win-
dows. Wielu programist�w - szczeg�lnie opracowuj�cych programy do wewn�trz-
nego u�ytku firmy lub programuj�cych hobbystycznnie w domu - docenia prosto-
t� takich �rodowisk projektowych, jak Visual Basic Microsoftu czy Delphi Borlanda
(kt�re jest obiektowym dialektem Pascala). Te �rodowiska pozwalaj� programi�cie
skupi� uwag� na interfejsie u�ytkownika i do��czaj� kod z obiektami interfejsu u�yt-
kownika. Je�li chcesz nauczy� si� Visual Basica, mo�esz skorzysta� z innych ksi�-
�ek wydawnictwa Microsoft Press, na przyk�ad Learn Visual Basic Now (1996), na-
pisanej przez Michaela Halvorsona.
Rozdzia� 1: Zaczynamy 11
W�r�d zawodowych programist�w - zw�aszcza pisz�cych aplikacje handlowe -
szczeg�lnie popularn� alternatyw� sta� si� w ostatnich latach Visual C++ Micro-
softu z bibliotek� klas MFC (Microsoft Foundation Class Library). MFC hermetyzu-
je wiele trudniejszych zagadnie� programowania Windows w zbiorze klas C++.
Podr�cznikiem MFC jest ksi��ka Jeffa Prosise'a Programming Windows with MFC
Second Edition (Microsoft Press, 1999).
Rosn�ca popularno�� Internetu i WWW spowodowa�a ostatnio du�e zainteresowa-
nie j�zykiem Java firmy Sun Microsystems. Jest to j�zyk niezale�ny od procesora,
inspirowany przez C++ i zawieraj�cy pakiet narz�dziowy do pisania aplikacji gra-
ficznych, kt�re mog� dzia�a� w wielu systemach operacyjnych. Dobr� ksi��k� Mi-
crosoft Press o J++ Microsoftu (�rodowisku projektowym Javy Microsoftu) jest Pro-
gramming Visual j++ 6.0 (1999), napisana przez Stephena R. Davisa.
Trudno jest wskaza� ten jedyny, w�a�ciwy spos�b pisania aplikacji dla Windows.
Prawdopodobnie sam rodzaj pisanej aplikacji okre�li narz�dzia. Ale poznanie API
umo�liwi ci wgl�d w prac� Windows, kt�ra nie zale�y od u�ywanej przez ciebie
metody kodowania. Windows to z�o�ony system; umieszczenie warstwy opro-
gramowania ponad API nie eliminuje z�o�ono�ci - pozwala tylko na jej ukrycie.
Pr�dzej czy p�niej ta z�o�ono�� da zna� o sobie. Znajomo�� API u�atwi ci przy-
wr�cenie poprawnego dzia�ania aplikacji.
Ka�da dodatkowa warstwa oprogramowania ponad API ogranicza ci� do podzbioru
jego pe�nej funkcjonalno�ci. Na przyk�ad mo�esz stwierdzi�, �e Visual Basic jest
idealny dla twojej aplikacji, z wyj�tkiem tego, �e nie pozwala na kilka istotnych
prac pomocniczych. W tym wypadku powiniene� u�y� wywo�a� czystego API. API
definiuje wszech�wiat, w kt�rym istniejemy jako programi�ci Windows. Nic nie
otworzy przed tob� takich mo�liwo�ci, jak bezpo�rednie wykorzystanie API.
Szczeg�lnie problematyczne jest zastosowanie MFC. Chocia� bardzo upraszcza
wykonywanie wielu zada� (takich jak OLE), zwykle musia�em m�czy� si� z inny-
mi jego cechami (takimi jak architektura dokument/widok), aby zmusi� je do dzia-
�ania po mojej my�li. MFC nie sta�o si� panaceum dla programowania Windows,
chocia� wiele os�b mia�o nadziej�, �e tak b�dzie. Ma�o kto uzna je za przyk�ad do-
brego projektu obiektowego. Programi�ci MFC, chc�c zrozumie�, co si� dzieje w
u�ywanych przez nich klasach, zmuszeni s� cz�sto zagl�da� do kodu �r�d�owego.
Zrozumienie kodu �r�d�owego to jedna z korzy�ci nauczenia si� API Windows.
�rodowisko programistyczne
W tej ksi��ce przyj��em, �e u�ywasz Visual C++ 6.0 Microsoftu, kt�ry jest do-
st�pny w wersji Standard, Professional i Enterprise. Ta�sza wersja Standard wy-
starczy do uruchomienia program�w z tej ksi��ki. Visual C++ jest tak�e cz�ci�
Visual Studio 6.0.
Pakiet Visual C++ Microsoftu zawiera nie tylko kompilator C i inne narz�dzia
i pliki konieczne do kompilowania i ��czenia program�w Windows. Zawiera tak�e
Visual C++ Developer Studio - �rodowisko, w kt�rym mo�esz prowadzi� edycj�
swojego kodu �r�d�owego, z �atwo�ci� tworzy� takie zasoby, jak ikony i okna dia-
logowe oraz kompilowa�, uruchamia� i testowa� swoje programy.
12 Cz�� I: Podstawy
Je�li u�ywasz Visual C++ 5.0, powiniene� pobra� nowe wersje plik�w nag��wko-
wych i bibliotek importowych dla Windows 98 i Windows NT 5.0. S� one dost�p-
ne na stronie WWW Microsoftu. Po��cz si� z http://www.microsoft.com/msdn/ i
wybierz Downloads, a potem Platform SDK (Software Development Kit). B�dziesz
mia� mo�liwo�� pobra� i zainstalowa� zaktualizowane pliki w dowolnie wybra-
nym katalogu. Aby zmusi� Microsoft Developer Studio do szukania plik�w w tym
katalogu, wybierz Options z menu Tools i przejd� na kart� Directories.
Cz�stka msdn w adresie URL strony Microsoftu oznacza "Microsoft Developer
Network". Jest to program, kt�ry zapewnia projektantom cz�sto aktualizowane
CD-ROM-y z informacjami, potrzebnymi w zaawansowanych pracach programi-
stycznych. Prawdopodobnie b�dziesz chcia� zaprenumerowa� MSDN, aby nie
�ci�ga� tych informacji ze strony Microsoftu.
Dokumentacja API
Ta ksi��ka nie zast�puje oficjalnej dokumentacji API Windows. Dokumentacja ta
nie jest ju� dost�pna w formie drukowanej; teraz wyst�puje tylko na CD-ROM-
ach i w Internecie.
Instaluj�c Visual C++ 6.0, uzyskasz system pomocy bezpo�redniej, zawieraj�cy do-
kumentacj� API. Mo�esz zaktualizowa� t� dokumentacj�, prenumeruj�c MSDN lub
u�ywaj�c sieciowego systemu pomocy bezpo�redniej Microsoftu. Zacznij od po��-
czenia si� z http://www.microsoft.com/msdn/ i wybierz MSDN Library Online.
W