lehrerbibliothek.deDatenschutzerklärung
Visual C++ 6
Visual C++ 6




Richard C. Leinecker, Tom Archer

mitp-Verlag
EAN: 9783826609022 (ISBN: 3-8266-0902-6)
832 Seiten, paperback, 17 x 24cm, 2002, mit CD-ROM

EUR 22,95
alle Angaben ohne Gewähr

Umschlagtext
Die IT-Studienausgabe Visual C++ 6 bietet Ihnen eine fundierte Einführung in die Grundlagen der Sprache und der Windows-Programmierung und begleitet Sie von der Erstellung einfacher Anwendungen über die Datenbankprogrammierung zur professionellen Softwareentwicklung.

Mit Hilfe zahlreicher Beispielprogramme inklusive Quellcode und Kommentierung erlernen Sie zunächst das Erstellen, Bearbeiten und Kompilieren eigener Projekte mit Visual C++ 6, den Umgang mit der integrierten Entwicklungsumgebung (IDE) sowie den Einsatz der wichtigsten Werkzeuge, wie beispielsweise die Fehlersuche mit dem Debugger. In einem zweiten Teil widmen sich die Autoren den Grundlagen der Windows-Programmierung und der Nutzung der Microsoft Foundation Classes (MFC).

Dieser Teil befähigt Sie, komplette Windows-Anwendungen zu schreiben. Die behandelten Themen reichen von der Verwendung von Menüs und Dialogfeldern sowie der Eingabe mit der Maus und der

Tastatur bis zum Einsatz von GDI und Bitmap-Bildern zum Bildschirmaufbau.

Mit der optimalen Anwendungsorganisation auf der Basis der für Microsoft typischen Dokument/Ansicht-

Architektur verlassen die Autoren den Bereich der Grundlagen und führen Sie zu den komplexeren Inhalten: Datenbankzugriff und -Programmierung mit ODBC und DAO am Beispiel von Access, SQL-Server und Oracle, der Einsatz von Erweiterungsbibliotheken - den sogenannten DLLs -, das Erstellen und Verwenden von ActiveX-Steuerelementen und anderes mehr.



Auf der Buch-CD:

Die Quellcodes aller Beispielprogramme sowie weitere Programmiertools
Inhaltsverzeichnis
Vorwort 23

Teil 1 Grundlagen zu Visual C++ 27

1 Zu Beginn 29

1.1 Die Neuerungen von Visual C + + 6.0 29
1.2 Die Anwendung HelloWorldl 31
1.3 Die Anwendung HelloWorld2 34
1.4 Das ATL-Steuerelement HelloWorldS 36
1.5 Zusammenfassung 39

2 Die IDE von Visual Studio 41
2.1 Die IDE 41
2.2 Ihr erstes Projekt 42
2.3 Die IDE anpassen 46
2.3.1 Die aktuellen Tastenkombinationen anzeigen 46
2.3.2 Tastenkombinationen hinzufügen, bearbeiten oder löschen 47
2.4 Symbolleisten 48
2.4.1 Symbolleisten ein- und ausblenden 48
2.4.2 Symbolleisten anpassen 49
2.5 Zusammenfassung 50

3 Fehlersuche 51
3.1 Was einen Debugger ausmacht 52
3.2 Der Debugger von Visual Studio 52
3.2.1 Eine Anwendung für die Fehlersuche vorbereiten 53
3.2.2 Den Debugger verwenden, wenn Sie eine Anwendung starten 55
3.2.3 Debug-Fenster 55
3.2.4 Haltepunkte und Einzelschrittmodus 59
3.2.5 Daten-Tips und das Fenster Schnellüberwachung 62
3.2.6 Die Dialogfelder Threads und Ausnahmen 62
3.3 Einfache Techniken zur Fehlersuche 64
3.3.1 Die Fehlersuche durch Meldungen beschleunigen 64
3.3.2 Ausgaben bei der Fehlersuche 64
3.3.3 Assert-Makros 65
3.3.4 Objekte kopieren 65
3.3.5 Speicherlecks und die Klasse CMemoryState 66
3.3.6 MFC-Ablaufverfolgung 66
3.4 Fehlersuche auf entfernten Systemen 66
3.5 Just-ln-Time-Debugging 69
3.5.1 Bearbeiten und die Fehlersuche fortsetzen 69
3.5.2 In Windows-NT-Diensten Fehler suchen 69
3.6 Zusammenfassung

4 Werkzeuge 71
4.1 Spy++ 71
4.2 Das Menü Extras anpassen 74
4.3 Weiteres zum Menü Extras 76
4.4 Klassen durchsuchen 76
4.5 Den MFC-Quellcode durchsuchen 79
4.6 Zusammenfassung 79

Teil II Grundlagen der Windows-Programmierung 81

5 MFC-Programmierung in Kürze 83

5.1 Was ist MFC? 83
5.2 Der Gedanke hinter MFC 84
5.3 Die Vorteile von MFC 85
5.3.1 Funktionen über Funktionen 87
5.3.2 Erweiterbare Architektur 87
5.4 Die MFC-Hierarchien 87
5.4.1 Dateidienste 88
5.4.2 Fenster 88
5.4.3 Graphik 91
5.4.4 Datenbankunterstützung 91
5.5 Sie verwenden MFC nicht? 93
5.6 Zusammenfassung 93

6 Menüs 95
6.1 Erstellen und Bearbeiten von Menüs 95
6.1.1 Erstellen von Menüs 97
6.2 Menünachrichten in MFC 98
6.3 Zugriffstasten 100
6.3.1 Tastatureingaben 100
6.3.2 Zugriffstasten definieren 101
6.3.3 Geeignete Zugriffstasten auswählen 102
6.3.4 Mehrere Zugriffstastentabellen 104
6.4 Dynamisches Ändern von Menüs 106
6.4.1 Befehlsbereiche für Menüs 106
6.4.2 Menüs zur Laufzeit ändern 107
6.4.3 Ein vorhandenes Einblendmenü ändern 108
6.4.4 Permanente und temporäre Zugriffsnummerzuordnungen 110
6.5 Kontextmenüs 112
6.6 Zusammenfassung 114

7 Maus und Tastatur 115
7.1 Grundlagen der Eingabe und Systemzustände 115
7.2 Mauseingaben 116
7.3 Erstellen von Routinen zur Behandlung von Mausnachrichten 117
7.3.1 Umwandeln von Bildschirm- in Fensterkoordinaten und umgekehrt 119
7.4 Erstellen eines MFC-Programms zur Behandlung von Mausereignissen 120
7.4.1 Mausereignisse außerhalb des Clientbereichs eines Fensters 125
7.4.2 Wechseln des Mauszeigers 126
7.5 Erstellen eines MFC-Beispielprogramms, das den Mauszeiger wechselt 126
7.5.1 Erfassen der Maus 129
7.5.2 Einschränken der Mausbewegungen 130
7.6 Tastatureingaben 131
7.6.1 Die physische Tastatur 131
7.6.2 Den Tastaturfokus anzeigen 134
7.7 Zusammenfassung 140

8 Grafik 141
8.1 Einführung in das Graphics Device Interface (GDI) 141
8.1.1 Grafiktypen 142
8.1.2 Arten von GDI-Geräten 144
8.2 Der Gerätekontext 145
8.2.1 Zeichenattribute des Gerätekontextes 145
8.3 Die Nachricht WM_PAINT 148
8.3.1 Koordinaten zeichnen 149
8.3.2 Eine WM_PAINT-Nachricht auslösen 149
8.3.3 Ohne WM_PAINT-Nachrichten zeichnen 150
8.4 Bearbeiten von Text 151
8.4.1 GDI-Farbunterstützung 152
8.4.2 Textausrichtung 154
8.4.3 Textbündigkeit 155
8.5 Schriften 155
8.5.1 Was ist eine Schrift? 156
8.5.2 Geräte in Gerätekontexte wählen 156
8.5.3 Vorhandene Schriften auswählen 156
8.6 Stifte und Pinsel 160
8.6.1 Stifte 160
8.6.2 Pinsel 163
8.7 Zuordnungsmodi 164
8.8 Rasteroperationen 166
8.8.1 Funktionen zur Textausgabe 167
8.8.2 Berechnung von Textkoordinaten 168
8.9 Ausschnittsbereiche 173
8.10 Zusammenfassung 174

9 Bitmaps, Paletten, DIBs und doppeltes Puffern 175
9.1 Bitmap-und Grafikspeicher 175
9.2 Erstellen von CBitmap-Objekten 178
9.3 Laden und Festlegen von Bitmap-lnhalten 179
9.4 Zeichnen von CBitmap-Objekten auf den Bildschirm 180
9.5 Rasteroperationen 183
9.6 Das Beispielprogramm BlitDemo 186
9.7 Paletten und Farben 191
9.7.1 Logische Paletten 194
9.7.2 Palettenereignisse 196
9.7.3 Die Funktion SetSystemPaletteUseQ 197
9.8 Geräteunabhängige Bitmaps 197
9.8.1 Der Aufbau einer DIB-Datei 198
9.8.2 Die Klasse CDib 199
9.8.3 Das Beispielprogramm ShowDIB 205
9.9 Doppelpufferung 207
9.10 Zusammenfassung 209

10 MFC-Ausnahmebehandlung 211
10.1 Strukturierte Ausnahmebehandlung 212
10.2 Syntax der Ausnahmebehandlung 212
10.2.1 Die Ausnahme auslösen 212
10.2.2 Die Ausnahme auffangen 212
10.3 Ein Vergleich der Techniken zur Fehlerbehandlung 214
10.3.1 Umgang mit Fehlercodes 214
10.3.2 Fehler im korrekten Kontext behandeln 215
10.3.3 Verbesserte Lesbarkeit des Quellcodes 216
10.3.4 Ausnahmen über Konstruktoren auslösen 218
10.4 Die Klasse CException 218
10.4.1 CException-Objekte erstellen und löschen 219
10.4.2 Fehlerinformationen aus einem CException-Objekt abfragen 219
10.4.3 Mehrere Ausnahmetypen auffangen 220
10.5 Definieren von Klassen, die von CException abgeleitet sind 222
10.5.1 Die Klasse CFileException ergründen 222
10.6 Ein CFileException-Beispielprogramm 224
10.6.1 Ihre eigenen von CException abgeleiteten Klassen definieren 226
10.7 Fortgeschrittene Techniken zur Ausnahmebehandlung 230
10.7.1 Entscheiden, welche Funktion eine Ausnahme auffangen soll 230
10.7.2 Entscheiden, welcher Code in einen try-Block aufgenommen werden soll 231
10.7.3 Entscheiden, welcher Code in einen catch-Block aufgenommen werden soll 232
10.7.4 Ausnahmen über virtuelle Funktionen auslösen 233
10.8 Zusammenfassung 236

11 Steuerelemente 237
11.1 Zum Hintergrund 237
11.2 Steuerelemente erstellen 238
11.2.1 Die Klasse CButton 240
11.2.2 Die Klasse CListBox 242
11.2.3 Die Klasse CEdit 245
11.2.4 Die Klasse CStatic 248
11.2.5 Die Klasse CScrollBar 251
11.2.6 Die Klasse CComboBox 254
11.3 Die Anwendung MiniEdit 257
11.4 Fortgeschrittene Programmierung von Steuerelementen 257
11.4.1 Eine Tastaturschnittstelle hinzufügen 257
11.4.2 Das Verhalten von Steuerelementen ändern 258
11.4.3 Bitmap-Schaltflächen 259
11.4.4 Die Farbe eines Steuerelements ändern 261
11.5 Zusammenfassung 263

12 Modale und nichtmodale Dialoge 265
12.1 Der Dialog-Editor 265
12.1.1 Dialogvorlagen 266
12.1.2 Eine neue Dialogvorlage erstellen 267
12.1.3 Eine Dialogvorlage bearbeiten 267
12.1.4 Einer Dialogvorlage Steuerelemente hinzufügen 269
12.1.5 Die Eigenschaften eines Steuerelements setzen 269
12.1.6 Auswahl einer Gruppe von Steuerelementen 269
12.1.7 Größe und Position mehrerer Steuerelemente anpassen 270
12.1.8 Die Tabulator-Reihenfolge festlegen 271
12.1.9 Den Dialog testen 272
12.2 Die Klasse CDialog 273
12.2.1 Modale und nichtmodale Dialoge im Vergleich 273
12.2.2 Mit CDialog einen nichtmodalen Dialog erstellen 274
12.2.3 Mit dem Klassen-Assistenten von CDialog abgeleitete Klassen erstellen 274
12.3 Dialogdatenaustausch (DDX) 275
12.3.1 DDX-Variablen 276
12.3.2 DoDataExchange und UpdateData 276
12.4 Die Beispielanwendung AddressBook 278
12.4.1 Das Dialogfenster bearbeiten 278
12.4.2 Die Klasse CContact 279
12.4.3 OnlnitDialog überschreiben 280
12.4.4 Die Nachricht WM_DESTROY verarbeiten 282
12.4.5 Daten anzeigen 282
12.4.6 Nachrichten von Schaltflächen verarbeiten 283
12.4.7 Das Beispielprogramm erstellen und testen 284
12.5 Abgeleitete Steuerelementklassen in Dialogen 284
12.5.1 Erstellen von Steuerelementklassen 284
12.5.2 Die Klasse mit dem Klassen-Assistenten erstellen 285
12.5.3 Die notwendigen Funktionen implementieren 285
12.5.4 Einen ExtraDDX-Eintrag erstellen 286
12.5.5 AddressBook: CAutoCompleteComboBox 288
12.6 Serialisierung 290
12.6.1 Jede Klasse serialisierbar machen 291
12.6.2 Die virtuelle Funktion SerializeQ implementieren 291
12.6.3 Daten vom Laufwerk lesen 292
12.6.4 Daten aufs Laufwerk schreiben 292
12.6.5 Das Beispielprogramm um Serialisierung erweitern 292
12.7 Zusammenfassung 297

13 Eigenschaftsblätter und Eigenschaftsseiten 299
13.1 CPropertySheet und CPropertyPage 300
13.1.1 Ressourcen für Eigenschaftsseiten erstellen 300
13.1.2 Die Klasse CPropertyPage erstellen 301
13.1.3 Ein modales Eigenschaftsblatt erstellen und anzeigen 301
13.1.4 Ein nichtmodales Eigenschaftsblatt erstellen und anzeigen 302
13.1.5 Ein Eigenschaftsblatt in einem bestehenden Dialog erstellen 303
13.2 Beispiel eines modalen Eigenschaftsblatts 304
13.3 Tips und Techniken zu Eingenschaftsseiten und -blättern 306
13.3.1 Standardschaltflächen entfernen 306
13.3.2 Standardschaltflächen neu anordnen 308
13.3.3 Die Beschriftung einer Standardschaltfläche ändern 309
13.3.4 Einzelne Eigenschaftsseiten deaktivieren 309
13.3.5 Eigenschaftsseiten wieder aktivieren 312
13.3.6 Registerbeschriftungen dynamisch festlegen 314
13.3.7 Die Schriftart eines Registers ändern 316
13.3.8 Zugriffstasten für Register 316
13.4 Zusammenfassung 318

14 Dateneingabe und-ausgabe 319
14.1 Die Klasse CString 319
14.1.1 Zeichenfolgenerstellen 320
14.1.2 Auf Daten von Zeichenfolgen zugreifen 320
14.1.3 Vergleich 322
14.1.4 Teilzeichenfolgen 323
14.1.5 Suchen 324
14.1.6 Die Anwendung StringDemo 324
14.2 Die Klasse CFile 330
14.2.1 Die Anwendung FileDemo 333
14.2.2 Die Klasse CCompressedFile 339
14.2.3 Die Anwendung CompressDemo 340
14.2.4 Huffman 341
14.2.5 LZSS 343
14.2.6 LZW 343
14.2.7 Klassenfunktionen von CCompressedFile 344
14.2.8 Hinter den Kulissen von CompressDemo 346
14.2.9 Serielle Verbindungen 348
14.3 Die Klasse CRegistry 351
14.3.1 Die Zwischenablage 354
14.4 Zusammenfassung 357

15 Klang 359
15.1 Wiedergabe aufgenommener Klänge 359
15.1.1 Die Klasse CWave kurz und bündig 360
15.1.2 WAV-Dateien über das API von Windows abspielen 360
15.1.3 Die Klassenfunktionen von CWave 362
15.2 Das Beispielprogramm WaveDemo 363
15.3 Abspielen von MIDI-Dateien 366
15.3.1 Was ist MIDI? 367
15.3.2 Die Klasse CMidi kurz und bündig 367
15.4 Das Beispielprogramm MIDIDemo 368
15.5 CD-Audio 372
15.5.1 Die Klassenbibliothek CCDAudio kurz und bündig 372
15.5.2 Die MCI-Schnittstelle 373
15.6 Das Beispielprogramm CDPlayer 375
15.7 Zusammenfassung 380

16 Zeitgeber und Verarbeitung in Ruhephasen 381
16.1 Zeitgeber 381
16.1.1 Einen Zeitgeber mit Hilfe der Nachricht WMJTIMER festlegen 382
16.1.2 Einen Zeitgeber mit Hilfe einer Callback-Prozedur festlegen 384
16.2 Das Beispielprogramm Clock 385
16.3 Die CWinApp-Funktion OnldleQ 391
16.4 Das Beispielprogramm OnldleDemo 393
16.5 Zusammenfassung 396

Teil III Architektur 397

17 Speicherverwaltung 399

17.1 Die Systemspeicherverwaltung 399
17.2 Die 32-Bit-Seitenadressierung für lntel-x86-Prozessoren 402
17.2.1 Die drei Bestandteile einer virtuellen Adresse 402
17.2.2 Der TLB-Puffer 403
17.3 Der Adreßraum pro Prozeß bei Windows 98 403
17.3.1 Speicherkontexte unter Windows 98 404
17.3.2 Unterschiede zwischen Windows 98 und Windows NT hinsichtlich des Prozeßspeicherbereichs 405
17.4 Die Bereinigung des Systemspeichers 407
17.5 Privater Prozeßspeicher 409
17.6 Seitenzuweisungen 410
17.6.1 Adreßraum reservieren 411
17.6.2 Die Zuweisung von Speicherseiten 412
17.6.3 Stackbereich zuweisen 414
17.7 Compilerspeicher zuweisen 414
17.7.1 Die Standardspeicherzuweisung von MFC 414
17.7.2 Die MFC-Zuweisungsdiagnose 415
17.8 Private Win32-Heaps 418
17.8.1 Hintergründe der Heap-lmplementierung 419
17.8.2 Das Win32-Heap-API 420
17.8.3 Lokaler Thread-Speicher 422
17.9 Gemeinsamer Speicher 424
17.9.1 Ein Dateiobjekt erstellen 426
17.9.2 Ein Dateizuordnungsobjekt erstellen 428
17.9.3 Ein Ansichtsobjekt erstellen 430
17.10 Gemeinsame Seiten dynamisch zuweisen 430
17.10.1 Unterschiede zwischen Windows 98 und Windows NT bei der gemeinsamen Speichernutzung 431
17.10.2 Win32-Funktionen für gemeinsame Seiten 431
17.10.3 Basiszeiger von verschiedenen Prozessen gemeinsam nutzen 432
17.10.4 Gemeinsame Seiten statisch zuweisen 433
17.11 Zusammenfassung 435

18 Dokumente, Ansichten und SDI 437
18.1 Entwurf von Dokumenten/Ansichten 437
18.2 Die Klasse CDocument 438
18.2.1 Eine Dokumentklasse in Ihrer eigenen Anwendung deklarieren 439
18.2.2 Die Member-Funktionen von CDocument 441
18.2.3 Dokumente und das Verarbeiten von Nachrichten 442
18.2.4 Virtuelle Dokumentfunktionen überschreiben 443
18.2.5 Mit komplexen Dokumentdaten arbeiten 444
18.2.6 Die Vorteile von CCmdTarget und CDocItem 446
18.3 Der Stellenwert von Initlnstance für Dokumente 448
18.3.1 Wie Ihre Anwendungen Dokumente und Ansichten verwalten 449
18.3.2 Die Klasse CSingleDocTemplate 449
18.3.3 Der Umgang mit Rahmenfenstern 450
18.3.4 Ressourcen von Dokumentvorlagen 450
18.3.5 Der Einfluß der Zeichenfolgenressource auf die Dokumentvorlage 451
18.3.6 Die Zeichenfolgenressource genauer betrachtet 451
18.3.7 Die Ansichtenressourcen 453
18.3.8 Die Lebensdauer von Dokumentvorlagen 453
18.3.9 Fortgeschrittener Umgang mit Dokumentvorlagen 454
18.3.10 Mit mehreren Vorlagen arbeiten 454
18.3.11 Mit AddDocTemplateQ hinzugefügte Dokumente löschen 456
18.4 Die Klasse CView verstehen und verwenden 456
18.4.1 Eine Ansichtsklasse deklarieren 457
18.4.2 Die Member-Funktionen von CView 458
18.4.3 Ansichten und Nachrichten 459
18.4.4 Von CView abgeleitete MFC-Klassen 460
18.4.5 Die Ansicht CForm im Vergleich zu dialogbasierten Anwendungen 461
18.4.6 Zurück zu Rahmenfenstern 461
18.4.7 Die Aufgabe von AfxGetMainWndQ 462
18.5 Die SDI-Anwendung HexView 462
18.6 Zusammenfassung 468

19 Der Aufbau einer MDI-Anwendung 471
19.1 Zurück zum Dokument/Ansicht-Modell 472
19.2 CDocument erneut betrachtet 473
19.3 Komplexere Kombinationen von Dokumenten, Ansichten und Rahmenfenstern 474
19.3.1 Mehrere Dokumentarten 475
19.3.2 Mehrere Ansichten für ein Dokument 475
19.3.3 Die Klasse CMDIFrameWnd 477
19.3.4 Die Klasse CMDIChildWnd 478
19.3.5 Die Klasse CMultiDocTemplate 480
19.3.6 Der durch die Verwendung von CDocument entstehende Overhead 480
19.3.7 Weiteres zu MDI-Anwendungen 481
19.4 Die Anwendung PaintObj 481
19.5 Geteilte Fenster 488
19.5.1 Zwischen den einzelnen Fenstern unterscheiden 489
19.5.2 Die Eigenarten der Klasse CSplitterWnd 490
19.5.3 Weiteres zu dynamischen geteilten Fenstern 491
19.5.4 Verschiedene Ansichten in dynamischen Fensterbereichen 493
19.5.5 Ein CRuntime-Klassenobjekt verwenden 493
19.5.6 Geteilte Fenster mit Ansichten mehrerer Dokumente nutzen 494
19.5.7 Statische geteilte Fenster 495
19.5.8 Ein statisches geteiltes Fenster verwenden 495
19.5.9 Gemeinsam genutzte Bildlaufleisten 496
19.5.10 Tatsächliche und ideale Fenstergrößen 497
19.5.11 Geteilte Fenster leistungsoptimiert 497
19.6 Die Anwendung Dynsplit 498
19.7 Subklassen für untergeordnete Fenster 502
19.7.1 Subklassen für Fenster mittels MFC 503
19.7.2 Alternativen zum Dokument/Ansicht-Modell 504
19.8 Zusammenfassung 505

20 MFC für fortgeschrittene Windows-Benutzerschnittstellen 507
20.1 Manchmal benötigen Sie mehr Kontrolle 507
20.2 Die modale Schleife 508
20.3 Hinter den Kulissen von RunModalLoop() 509
20.4 Parameter einer modalen Schleife 511
20.5 Die modale Schleife beenden 512
20.6 Die modale Anwendung 512
20.7 Das modale Fenster erstellen und schließen 513
20.7.1 Ereignisbehandlungsroutinen hinzufügen 513
20.7.2 Eine einfache modale Anwendung 516
20.8 Das modale Fenster weiter gedacht 516
20.9 Eine transparente Bitmap in einem transparenten Client-Bereich zeichnen 520
20.9.1 Die Bitmap zeichnen 521
20.9.2 Den Einfügeort festlegen 525
20.9.3 Kompatible Gerätekontexte 525
20.9.4 Die Bitmap-Struktur 526
20.9.5 Die Einzelteile zusammenfügen 527
20.9.6 Alles gesehen? 530
20.10 Zusammenfassung 531

21 Threads 533
21.1 Threads 534
21.1.1 Einen Worker-Thread erstellen 534
21.1.2 Die Thread-Funktion 536
21.1.3 Einen Thread für die Benutzerschnittstelle erstellen 536
21.1.4 Unterbrechen und Fortsetzen von Threads 538
21.1.5 Versetzen von Threads in einen Schlafzustand 538
21.1.6 Beenden eines Threads 538
21.1.7 Beenden eines Threads über einen anderen Thread 539
21.1.8 Threads, Prozesse und Prioritäten 542
21.1.9 Prioritätenklassen von Prozessen 543
21.2 Gemeinsames Benutzen von MFC-Objekten in mehreren Threads 544
21.3 Verwenden von C-Laufzeitfunktionen in Multithreading-Anwendungen 546
21.4 Das Beispielprogramm ThreadDemol 546
21.5 Zusammenfassung 550

Teil IV Datenbankprogrammierung 551

22 ODBC 553

22.1 Definitionen von ODBC und Datenbankbegriffe 554
22.2 ODBC - Die Notwendigkeit eines Standards 555
22.2.1 Der ODBC-Standard 556
22.2.2 ODBC-API-Conformance-Level 557
22.2.3 ODBC-Conformance-Level (SQL Grammar) 558
22.3 ODBC - Implementierung 558
22.3.1 ODBC konfigurieren 558
22.3.2 Die Verbindung zu einer Datenquelle herstellen 560
22.3.3 Die Daten und die Datenquelle abfragen 561
22.3.4 SQL-Anfragen vorbereiten und ausführen 562
22.3.5 Daten abrufen 562
22.3.6 Die Verbindung mit einer Datenquelle trennen 563
22.4 Erfassen von Daten mit ODBC 564
22.4.1 ODBC-Unterstützung zu einem Visual-C+ + -Projekt hinzufügen 565
22.4.2 Das Dialogfeld von ODBCDemo bearbeiten 565
22.4.3 Den Initialisierungs- und den Datenbankcode hinzufügen 566
22.5 Dynamisches Abfragen einer Datenquelle mit ODBC 571
22.5.1 DieCODBCDynamic-Klassendeklaration 572
22.5.2 Funktionsweise der Klasse CODBCDynamic 573
22.5.3 Verwenden der Klasse CODBCDynamic 578
22.6 Zusammenfassung 579

23 MFC-Datenbankklassen 581
23.1 CDatabase 582
23.2 CRecordset 585
23.2.1 Eine Datensatzgruppe erstellen 589
23.2.2 Eine Datensatzgruppe öffnen 589
23.2.3 Daten mittels RFX lesen und schreiben 590
23.2.4 Datensätze filtern 590
23.2.5 Von einer Datensatzgruppe zurückgegebene Datensätze sortieren 593
23.2.6 Die Ergebnismenge durchgehen 593
23.2.7 Datensätze sichern 594
23.2.8 Datensätze löschen 595
23.3 Die MFC-Datenbankklassen 595
23.3.1 Unterstützung für die MFC-Datenbankklassen 595
23.3.2 Die Benutzerschnittstelle des Beispiels 595
23.3.3 Die Benutzerdaten mit einer Helper-Klasse kapseln 595
23.3.4 Eine CRecordset-Klasse für die UserMaster-Tabelle 597
23.3.5 Die Header-Datei des Dialogs anpassen 597
23.3.6 Die Implementierungsdatei des Dialogs anpassen 597
23.4 Parametergesteuerte Datensatzgruppen und Abfragen 604
23.4.1 Die Benutzerschnittstelle des Beispiels 605
23.4.2 Die UserMaster-Datensatzgruppe erstellen 606
23.4.3 Parameter durch Anpassen von CRecordset annehmen 606
23.4.4 Die Anwendung um Suchfunktionen erweitern 607
23.4.5 Die Anwendung erstellen 608
23.4.6 Parametergesteuerte Abfragen erstellen 609
23.4.7 Die Beispieldatenbank 609
23.4.8 Die Datensatzgruppe Permissions erstellen 610
23.5 Zusammenfassung 613

24 DAO-Datenbankprogrammierung 615
24.1 Überblick über die DAO-Schnittstelle 616
24.1.1 Die Geschichte von DAO 616
24.1.2 Die DAO-Hierarchie 617
24.1.3 Die vielen Schnittstellen (Gesichter) von DAO 621
24.2 Gebrauch der MFC-DAO-Klassen 622
24.2.1 CDaoDatabase 623
24.2.2 CDaoWorkspace 625
24.2.3 CDaoRecordset 626
24.2.4 Ein MFC-DAO-Beispielprogramm 635
24.3 Zusammenfassung 644

Teil V Anwendungserweiterung 645

25 Umgang mit DLLs 647

25.1 Überblick über DLLs 648
25.1.1 Dynamische und statische Bibliotheken 648
25.1.2 Laden von DLLs 648
25.2 Reguläre Visual-C++ -DLLs 649
25.2.1 Die Funktionsweise regulärer DLLs verstehen 650
25.2.2 DLLs dynamisch laden 652
25.2.3 Beispiele dafür, wann eine DLL dynamisch geladen werden sollte 652
25.2.4 Windows-Hooks 653
25.2.5 Globale C++ -Objekte mit DLLs 660
25.3 Erweiterte MFC-DLLs 666
25.3.1 Die Funktionsweise der erweiterten MFC-DLLs verstehen 666
25.3.2 Klassen über die erweiterten MFC-DLLs exportieren 667
25.3.3 Weiteres zum Makro AFX_EXT_CLASS 667
25.3.4 Verschachtelte erweiterte MFC-DLLs verwenden 668
25.3.5 Ressourcen exportieren 668
25.3.6 Ein Beispielprogramm zum Kapseln von Dokumenten und Ansichten in eine DLL 668
25.4 Zusammenfassung 673

26 Bilder darstellen 675
26.1 Bibliotheken von Drittanbietern 675
26.2 Ein Blick auf die ImageObject-Bibliothek 678
26.2.1 Das BMP-Dateiformat 680
26.2.2 Das GIF-Dateiformat 680
26.2.3 Das JPEG-Dateiformat 681
26.2.4 Das PCX-Dateiformat 681
26.2.5 Das TGA-Dateiformat 681
26.2.6 Das TIF-Dateiformat 681
26.3 Bilder laden 682
26.4 Bilder anzeigen 683
26.5 Die Anwendung Display 685
26.6 Skalieren, Beschneiden und Ändern der Farbtiefe 688
26.7 Ein Bild aus einem Gerätekontext erstellen 689
26.8 Ein Bild aus der Zwischenablage erstellen 691
26.9 Bilder speichern 692
26.10 Bildbearbeitung 693
26.11 Die Anwendung Processlmage 694
26.12 Zusammenfassung 702

Teil VI Programmierung nach dem Common Object Model (COM) 703

27 Einführung zu ActiveX und zu ActiveX-Steuerelementen 705

27.1 Herkunft und Nutzen von ActiveX 705
27.2 Die verschiedenen ActiveX-Technologien 707
27.2.1 Automatisierungs-Server 707
27.2.2 Automatisierungs-Clients 708
27.2.3 ActiveX-Steuerelemente definieren 708
27.2.4 COM-Objekte verstehen 708
27.2.5 ActiveX-Dokumente verstehen 709
27.2.6 ActiveX-Container verstehen 709
27.3 Die Vorteile von ActiveX 710
27.4 Die Art der benötigten ActiveX-Komponente 711
27.4.1 Automatisierungs-Server und-Clients verwenden 711
27.4.2 ActiveX-Steuerelemente verwenden 712
27.4.3 COM-Objekte verwenden 712
27.4.4 ActiveX-Komponenten mit MFC erstellen 713
27.4.5 ActiveX-Komponenten mit der ActiveX-Vorlagenbibliothek erstellen 714
27.4.6 ActiveX-Komponenten mit BaseControl erstellen 714
27.4.7 Ein eigenes Anwendungsgerüst erstellen 715
27.5 Grundlegende Architektur von ActiveX-Komponenten 716
27.5.1 ActiveX-Automatisierungs-Server 716
27.5.2 ActiveX-Steuerelemente 717
27.6 Hilfsmittel für die Erstellung von ActiveX-Komponenten 718
27.6.1 MIDL-Compiler 718
27.6.2 Mktyplib 718
27.6.3 GUIDGEN 718
27.6.4 RegEdit 718
27.6.5 Registration Server 719
27.6.6 Ole2View 719
27.6.7 Die Hilfsmittel m die IDE von C++ einbinden 719
27.7 Ein grundlegendes ActiveX-Steuerelement in MFC einbinden 720
27.7.1 Das Projekt für das Steuerelement erstellen 720
27.7.2 Das Steuerelement registrieren 724
27.7.3 Methoden erstellen 724
27.7.4 Eigenschaften 729
27.7.5 Eigenschaftsblätter erstellen 734
27.7.6 Ereignisse hinzufugen 737
27.7.7 Datenbeständigkeit 738
27.8 Das Steuerelement anzeigen 740
27.9 Anzeigen, aber wie? 740
27.10 Zusammenfassung 743

28 ActiveX-Automatisierungs-Server mit MFC erstellen 745
28.1 Das grundlegende Projekt erstellen 745
28.1.1 Der Anwendung eine Schnittstelle hinzufügen 747
28.1.2 Den Server registrieren 750
28.1.3 Unterstützender Quellcode für den Beispiel-Server 751
28.1.4 Methoden hinzufügen 754
28.1.5 Dem Server Eigenschaften hinzufügen 758
28.2 OLE-Ausnahmen erzeugen 759
28.2.1 Server mit zwei Schnittstellen 765
28.2.2 OLE-Ausnahmen für Server mit zwei Schnittstellen erzeugen 772
28.3 Server-lnstanzierung mittels C + + 777
28.3.1 Probleme bei der Instanzierung 778
28.3.2 Gemeinsam nutzbare Server erstellen 778
28.3.3 Server für Einzelinstanzen 781
28.4 Zusammenfassung 782

29 Active Template Library (ATL) 783
29.1 Eine kurze Betrachtung von ATL 783
29.2 Erstellen eines ATL-Steuerelements 784
29.3 Hinzufügen eines COM-Objekts zum Projekt 786
29.4 Hinzufügen des Quellcodes zum Zeichnen 787
29.5 Implementieren der Schnittstellenfunktionen 789
29.6 Verwenden des Steuerelements in C + + 793
29.7 Datentypen 795
29.7.1 BSTR-Konvertierung 795
29.7.2 BSTR-Daten vergleichen 796
29.7.3 Den Inhalt von BSTR-Variablen im Debugger anzeigen 797
29.8 Einbetten eines ActiveX-Steuerelements in eine Web-Seite 797
29.9 Zusammenfassung 797

A Inhalt der CD-ROM 799

Index 815