lehrerbibliothek.deDatenschutzerklärung
Inside Visual C++ .NET Das Microsoft Standardwerk zur Programmierung mit Visual C++ .NET
Inside Visual C++ .NET
Das Microsoft Standardwerk zur Programmierung mit Visual C++ .NET




George Shepherd, David Kruglinski

Microsoft Press
EAN: 9783860636787 (ISBN: 3-86063-678-2)
950 Seiten, paperback, 20 x 24cm, Februar, 2003, mit CD-ROM

EUR 49,90
alle Angaben ohne Gewähr

Umschlagtext
• Der Klassiker für alle C++ Programmierer - jetzt in der 6. Auflage!

• Klassische C++ Anwendungsentwicklung und Programmierung mit dem .NET Framework




Inside Visual C++ .NET ist die neuste Ausgabe eines Buchs, das zu den Standardwerken der Visual C++ Programmierung gehört. In der 6. Auflage präsentiert es sich komplett überarbeitet und an die neuen Möglichkeiten von Microsoft Visual C++ .NET und des .NET Frameworks angepasst, ohne Abstriche bei der klassischen C++ und MFC-Programmierung zu machen. Das Buch ist in sechs

Abschnitte aufgeteilt, die sich mit allen wesentlichen Aspekten der Visual C++ Programmierung befassen, wie Windows-Grundlagen, MFC, den Ansichtsklassen der MFC-Bibliothek, der Dokument/Ansicht-Architektur, COM und Automatisierung, der Programmierung für das Internet und der .NET-Programmierung mit verwaltetem C++. Damit bietet Inside Visual C++ .NET in seiner 6. Auflage noch mehr an detaillierten und wertvollen Informationen, die dieses Buch zur umfassenden Informationsquelle und zum idealen Lehrbuch für eines der mächtigsten und komplexesten Entwicklungswerkzeuge machen.



Lesen Sie:

• Einführung in Visual C++, MFC und .NET

• Windows-Meldungen

• GDI-Funktionen, Schriften und Bitmaps

• Dialogfelder, allgemeine und ActiveX-Steuerlemente

• Win 32-Speicherverwaltung und Multithreadir

• Menüs, Zugriffstasten, das Rich-Edit-Steuerelement und Eigenschaftsblätter

• Drucken und Seitenansicht

• Teilbare Fenster und Mehrfachansichten

• Kontextabhängige Hilfe

• MFC-Anwendungen ohne Dokument- und Ansichtsklassen

• COM und Automatisierung

• Zwischenablage und OLE-Drag& Drop

• ATL und ActiveX-Steuerelemente

• Datenbanken mit OLE DB

• TCP/IP, Winsock und WINInet

• IIS, ISAPI und ATL Server

• Die Common Language Runtime

• Verwaltetes C++

• Windows Forms-Programmierung

• ASP.NET- und ADO.NET-Programmierung



Auf Begleit-CD:

• Die Beispielprogramme aus dem Buch

• Das englische Original des Titels als Ebook
Inhaltsverzeichnis
Danksagung XXVII

Einführung XXIX
.NET, MFC und ATL XXIX
Verwaltetes C++ und C# XXX
.NET und Java XXXI
Zielgruppe dieses Buchs XXXI
Was hier nicht behandelt wird XXXII
Verwendung dieses Buchs XXXII
Aufbau dieses Buchs XXXII
Teil I: Einführung in Windows, Visual C++ .NET und die Grundlagen des MFC-Anwendungsgerüsts XXXII
Teil II: Die Ansichtsklassen der MFC-Bibliothek XXXIII
Teil III: Die Dokument/Ansicht-Architektur XXXIII
Teil IV: COM, Automatisierung, ActiveX und OLE XXXIII
Teil V: Programmierung für das Internet XXXIV
Teil VI: .NET und darüber hinaus XXXIV
Anhänge XXXIV
Win32 und Winl6 XXXIV
Anforderungen an das System XXXIV
Beispielprogramme XXXV
Windows Forms XXXV
Support XXXVI

Teil I
Windows, Visual C++ .Net und die Grundlagen des Anwendungsgerüsts 1

1 Windows und Visual C++ .NET 3

Das Windows-Programmiermodell 3
Meldungsbearbeitung 3
Graphics Device Interface (GDI) 4
Ressourcengestützte Programmierung 5
Speicherverwaltung 5
DLLs (Dynamic Link Libraries) 5
Die Win32-Programmierschnittstelle 6
Die Visual C++ .NET-Komponenten 6
Visual C++ .NET und der Erstellungsprozess 7
Das Ressourcenansichtsfenster und die Ressourcen-Editoren 9
C-/C++-Compiler 10
Quelltext-Editor 10
Ressourcencompiler 10
Linker 10
Debugger 11
MFC-Anwendungsassistent 12
Klassenansicht 13
Projektmappenexplorer 13
Objektbrowser 13
UML-Werkzeuge 14
Onlinehilfe 14
Windows-Diagnosewerkzeuge 15
MFC-Bibliothek Version 7 15
ATL-Bibliothek Version 7.0 15
.NET-Unterstützung 16

2 Das MFC-Anwendungsgerüst 17
Warum gibt es das Anwendungsgerüst? 17
Einarbeitungszeit 21
Was ist ein Anwendungsgerüst? 22
Anwendungsgerüst im Vergleich zu Klassenbibliothek 22
Beispiel für ein Anwendungsgerüst 22
MFC-Meldungszuordnung 25
Dokumente und Ansichten 26

Teil II
MFC-Grundlagen 29

3 Einstieg mit dem MFC-Anwendungsassistenten: »Hello, world!« 31

Was versteht man unter einer Ansicht? 32
MFC-Anwendungsarten 32
Benutzeroberflächen der MFC-Bibliothek 33
Ex03a: Die Minimalanwendung 33
Die Ansichtsklasse CEx03aView 38
Datenanzeige im Ansichtsfenster 38
Die Memberfunktion OnDraw 38
Der Windows-Gerätekontext 39
Anzeigecode in das Programm Ex03a einfügen 39
Vorschau auf die Ressourcen-Editoren 40
Der Inhalt von Ex03a.rc 40
Experimente mit den Ressourcen-Editoren 41
Konfigurationen »Win32 Debug« und »Win32 Release« 42
Vorkompilierte Headerdateien 43
Zwei Methoden der Programmausführung 45

4 Visual C++ .NET-Assistenten 47
Die verschiedenen Arten von Assistenten 47
So funktionieren Assistenten 48
Entwicklung eines Assistenten 49
Erstellung eines Assistenten zur Entwicklung von Webanwendungen mit verwaltetem C++ 50

5 Windows-Meldungen 57
Benutzereingaben verarbeiten: Meldungszuordnungen 57
Die Meldungszuordnung 58
Den Zustand eines Ansichtsobjekts speichern: Datenelemente 58
Was sind ungültige Rechtecke? 59
Der Clientbereich eines Fensters 60
Berechnungen mit CRect, CPoint und CSize 60
Liegt ein Punkt in einem Rechteck? 60
Der CRect-Operatoi LPCRECT 61
Liegt ein Punkt innerhalb einer bestimmten Ellipse? 61
Das Beispielprogramm ExOSa 61
Die Klassenansicht und ExOSa 64
Abbildungsmodi 67
Der Abbildungsmodus MM_TEXT 68
Abbildungsmodi mit fester Skalierung 69
Abbildungsmodi mit variabler Skalierung 69
Koordinatenumwandlung 71
Das Beispielprogramm ExOSb: Umwandlung in den
Abbildungsmodus MM_HIMETRIC 73
Ein bildlauffähiges Ansichtsfenster 74
Größe von Fenster und Ausgabebereich 74
Bildlaufleisten 74
Bildlaufalternativen 75
Die Funktion OnlnitialUpdate 75
Eingaben von der Tastatur annehmen 75
Das Beispielprogramm ExOSc: Bildlauf 75
Weitere Windows-Meldungen 79
Die Meldung WM_CREATE 79
Die Meldung WM_CLOSE 79
Die Meldung WM_QUERYENDSESSION 79
Die Meldung WM_DESTROY 79
Die Meldung WM_NCDESTROY 80

6 CDI-Funktionen, Schriften und Bitmaps 81
Die Gerätekontextklassen 81
Die Bildschirmkontextklassen CClientDC und CWindowDC 82
CDC-Objekte anlegen und entsorgen 82
Der Zustand des Gerätekontexts 83
Die Klasse CPaintDC 84
GDI-Objekte 84
GDI-Objekte anlegen und entsorgen 85
GDI-Objekte überwachen 85
Vordefinierte GDI-Objekte 86
Wie lange gilt eine GDI-Auswahl? 86
Schriften 87
Schriften sind GDI-Objekte 87
Eine Schrift auswählen 88
Schriften drucken 88
Schriften anzeigen 88
Logische und tatsächliche Bildschirmmaße 89
Die Zeichenhöhe berechnen 90
Das Beispielprogramm Ex06a 90
Elemente des Programms Ex06a 93
Das Beispielprogramm Ex06b 94
Die Elemente des Programms Ex06b 96
Das Beispielprogramm Ex06c: Noch einmal CScrollView 97
Elemente des Programms Ex06c 99
SetScaleToFitSize-Modus in CScrollView 101
Den Abbildungsmodus für logische Twips in bildlauffähigen Ansichten verwenden 101
Bitmaps 102
GDI-Bitmaps und geräteunabhängige Bitmaps 102
Farbige Bitmaps und monochrome Bitmaps 103
DIBs und die Klasse CDib 103
Anmerkungen zur Palettenprogrammierung 104
DIBs, Pixel und Farbtabellen 105
Die Struktur einer DIB in einer BMP-Datei 105
Zugriffsfunktionen für DIBs 106
Die Klasse CDib 107
Die Anzeigegeschwindigkeit von DIBs 112
Das Beispielprogramm Ex06d 113
Weitere Möglichkeiten zur DIB-Programmierung 115
Die Funktion Loadlmage 115
Die Funktion DrawDibDraw 116
Schaltflächen mit Bitmaps belegen 117
Das Beispielprogramm Ex06e 118
Weitere Möglichkeiten für Bitmap-Schaltflächen 120

7 Dialogfelder 121
Modale und nichtmodale Dialogfelder 121
Ressourcen und Steuerelemente 122
Programmierung eines modalen Dialogfelds 122
Das Beispiel Ex07a: Der Dialog aller Dialoge 124
Das Dialogfeld entwickeln 124
Erstellung der Dialogklasse 130
Das Dialogfeld mit der Ansicht verknüpfen 134
Erläuterungen zur Anwendung Ex07a 136
Erweiterung des Programms Ex07a 137
Änderung von OnOK 137
Verarbeitung von OnCancel 139
Einbindung der Bildlaufleisten 139
Identifizierung von Steuerelementen: IDs und CWnd-Zeiger 140
Die Hintergrundfarbe für Dialogfelder und Steuerelemente festlegen 141
Dialogsteuerelemente zur Laufzeit hinzufügen 142
Andere Steuerelementfunktionen verwenden 142
Die Standarddialogfelder von Windows 142
Direkter Einsatz der Klasse CFileDialog 143
Klassen von Standarddialogfeldklassen ableiten 143
Verschachtelte Dialogfelder 144
Ein Beispiel mit CFileDialog: EX07B 144
Weitere Anpassungsmöglichkeiten von CFileDialog 149
Nichtmodale Dialogfelder 150
Nichtmodale Dialogfelder erstellen 150
Benutzerdefinierte Meldungen 150
Besitzverhältnisse 151
Das Beispiel Ex07c: Ein nichtmodales Dialogfeld 151

8 Allgemeine Steuerelemente 159
Allgemeine Standardsteuerelemente 159
Das Steuerelement Statuskontrolle 160
Das Schieberegler-Steuerelement 160
Das Drehfeld 161
Das Listensteuerelement 161
Die Strukturansicht 161
Die Meldung WM_NOTIFY 162
Das Beispiel ExOSa: Allgemeine Steuerelemente 162
Weitere allgemeine Steuerelemente 174
Das Datums-/Zeitauswahl-Steuerelement 174
Das Monatskalender-Steuerelement 175
Das IP-Adressensteuerelement 176
Das erweiterte Kombinationsfeld 176
Das Beispielprogramm ExOSb: Weitere allgemeine Steuerelemente 177

9 ActiveX-Steuerelemente verwenden 189
ActiveX-Steuerelemente im Vergleich zu normalen Windows-Steuerelementen 190
Normale Steuerelemente im Rückblick 190
Ähnlichkeiten zwischen ActiveX-Steuerelementen und normalen Steuerelementen 191
Unterschiede zwischen ActiveX-Steuerelementen und normalen Steuerelementen: Eigenschaften und Methoden 191
ActiveX-Steuerelemente installieren 192
Das Kalender-Steuerelement 193
Programmierung von ActiveX-Steuerelementcontainern 195
Zugriff auf Eigenschaften 195
C++-Klassen für ActiveX-Steuerelemente 196
Unterstützung des MFC-Anwendungsassistenten für ActiveX-Steuerelemente 198
Der MFC-Klassenassistent und das Container-Dialogfeld 198
ActiveX-Steuerelemente im Speicher halten 199
Das Beispielprogramm Ex09a: Ein Dialogfeld als ActiveX-Steuerelementcontainer 200
ActiveX-Steuerelemente in HTML-Dateien 207
ActiveX-Steuerelemente zur Laufzeit erstellen 207
Das Beispielprogramm Ex09b: Das ActiveX-Webbrowser-Steuerelement 208
Bildeigenschaften 211
Bindbare Eigenschaften: Änderungsbenachrichtigungen 212

10 Speicherverwaltung unter Win32 215
Prozesse und Speicherbereiche 216
Der Prozessadressraum unter Windows 95/98 217
Der Prozessadressraum unter Windows NT/2000/XP 217
Das Konzept des virtuellen Arbeitsspeichers 219
Die Funktion VirtualAlloc: reservierter und verfügbarer Speicher 221
Heap-Funktionen und GlobalAlloc-Funktionen 222
Der Heap für kleine Blöcke, die Operatoren new und delete und die Funktion _heapmin 223
Speicherbilddateien 224
Zugriff auf Ressourcen 225
Tipps zum Umgang mit dynamischem Speicher 226
Speicherstrategien für konstante Daten 226

11 Meldungsbearbeitung und Multithread-Programmierung unter Windows 229
Meldungsbearbeitung unter Windows 229
Wie ein Programm mit einem einzigen Thread Meldungen bearbeitet 230
Die Kontrolle abgeben 230
Zeitgeber 231
Das Programm Ex11a 231
Leerlaufroutinen 234
Multithread-Programmierung 235
Einen Arbeitsthread schreiben und starten 235
Wie der Hauptthread mit einem Arbeitsthread kommuniziert 236
Wie der Arbeitsthread mit dem Hauptthread kommuniziert 237
Das Programm Ex11b 238
Ereignisse zur Synchronisation von Threads einsetzen 239
Das Programm ExO11c 240
Threads blockieren 241
Kritische Abschnitte 242
Mutexe und Semaphore 244
Benutzeroberflächenthreads 244

Teil III
Die Dokument/Ansicht-Architektur 245

12 Menüs, Zugriffstasten, das Rich-Edit-Steuerelement und Eigenschaftsblätter 247

Hauptrahmenfensterklassen und Dokumentklassen 248
Windows-Menüs 249
Zugriffstasten 250
Befehlsausführung 250
Befehlsausführung in abgeleiteten Klassen 251
Befehle zur Aktualisierung der Benutzeroberfläche 251
Aus Dialogfeldern stammende Befehle 252
Die Standardmenübefehle des Anwendungsgerüsts 253
Menübefehle freischalten oder sperren 253
MFC-Textverarbeitungsoptionen 254
Die Klasse CEditView 254
Die Klasse CRichEditView 254
Die Klasse CRichEditCtrl 254
Das Beispiel Exl2a 255
Eigenschaftsblätter 260
Eigenschaftsblätter erstellen 260
Datenaustausch in Eigenschaftsblättern 261
Das Beispielprogramm Exl2a wird überarbeitet 262
Die Schaltfläche Übernehmen 271
Die Klasse CMenu 272
Kontextmenüs erstellen 272
Erweiterte Befehlsverarbeitung 273

13 Symbol- und Statusleisten 275
Steuerleisten und das Anwendungsgerüst 275
Symbolleisten 276
Symbolleisten-Bitmaps 276
Schaltflächenzustände 277
Symbolleisten und Befehlsmeldungen 277
Aktualisierungshandler für Symbolleisten 278
Quickinfos 279
Die Suche nach dem Hauptrahmenfenster 279
Das Beispielprogramm Exl3a: Symbolleisten 280
Statusleisten 284
Definition der Statusleiste 284
Die Meldungszeile 285
Die Statusanzeige 285
Steuerung der Statusleiste 286
Das Beispielprogramm Exl3b: Statusleiste 287
Infoleisten 291
Aufbau einer Infoleiste 291
Das Beispielprogramm Exl3c: Infoleiste 292

14 Eine wiederverwendbare Rahmenfensterklasse 297
Warum wiederverwendbare Basisklassen schwer zu schreiben sind 298
Die Klasse CPersistentFrame 298
Die Klasse CFrameWnd und die Funktion ActivateFrame 299
Die Funktion PreCreateWindow 299
Die Windows-Registrierung 300
Mit der Klasse CString arbeiten 302
Die Position eines maximierten Fensters 304
Der Zustand der Steuerleiste und die Registrierung 305
Statische Datenelemente 305
Das Standard-Fensterrechteck 305
Das Beispielprogramm Exl4a: Eine persistente Rahmenfensterklasse 306
Persistente Rahmenfenster in MDI-Anwendungen 310

15 Trennung von Dokument und Ansicht 313
Funktionen für die Interaktion zwischen Dokument und Ansicht 314
Die Funktion CView::GetDocument 314
Die Funktion CDocument::UpdateAllViews 315
Die Funktion CView::OnUpdate 315
Die Funktion CView::OnInitialUpdate 316
Die Funktion CDocument::OnNewDocument 316
Eine einfache Dokument/Ansicht-Anwendung 316
Die Klasse CFormView 317
Die Klasse CObject 318
Diagnosedumps 318
Das Makro TRACE 319
Das Objekt afxDump 319
Der Dumpkontext und die Klasse CObject 320
Automatischer Dump von nicht gelöschten Objekten 321
Das Beispielprogramm Ex15a: Ein einfaches Dokument/Ansicht-Beispiel 323
Eine etwas komplexere Interaktion zwischen Dokument und Ansicht 329
Die Funktion CDocument::DeleteContents 330
Die Listenklasse CObList 330
Eine FIFO-Liste auf der Basis von CObList 331
Die Elemente von CObList durchlaufen: Die POSITION-Variable 332
CTypedPtrList: eine Listenklasse auf der Basis von Vorlagen 333
Die Funktion Dump und die Listenklassen 333
Das Beispielprogramm Exl5b: Eine SDI-Anwendung mit mehreren Ansichten 334
Ressourcen 335
Quelltext 336
Geschützte virtuelle Funktionen 347
Test der Anwendung ExlSb 348
Zwei Übungen für den Leser 348

16 Dokumente lesen und schreiben 349
Was ist Serialisierung? 350
Dateien und Archive 350
Eine Klasse serialisierbar machen 351
Eine Serialize-Funktion schreiben 351
Aus Archiven lesen: Eingebettete Objekte oder Zeiger? 352
Auflistungen serialisieren 354
Die Funktion Serialize und das Anwendungsgerüst 354
Die SDI-Anwendung 355
Das Windows-Anwendungsobjekt 355
Die Dokumentvorlagenklasse 356
Die Dokumentvorlagenressource 358
Mehrere Ansichten für ein SDI-Dokument 358
Ein leeres Dokument erstellen: die Funktion CWinApp::OnFileNew 358
Die Funktion OnNewDocument in der Dokumentklasse 359
Dateien öffnen: die Funktion OnFileOpen 360
Die Funktion DeleteContents der Dokumentklasse 360
Dateien speichern: OnFileSave und OnFileSaveAs 360
Das Änderungsflag des Dokuments 361
Das Beispielprogramm Exlöa: SDI mit Serialisierung 362
Die Klasse CStudent 362
CExWaApp 362
CMainFrame 366
CExWaDoc 369
CExl6aView 370
Die Anwendung Exl6a testen 370
Dokumente aus dem Windows-Explorer laden 370
Programmregistrierung 371
Doppelklick auf ein Dokument 371
Drag & Drop aktivieren 372
Startparameter von Programmen angeben 372
Start im Explorer und die Drag & Drop-Funktionen ausprobieren 372
MDI-Anwendungen 373
Eine typische MDI-Anwendung im MFC-Stil 373
Das MDI-Anwendungsobjekt 374
Die MDI-Dokumentvorlagenklasse 374
Das MDI-Rahmenfenster und die untergeordneten MDI-Fenster 375
Ressourcen für Hauptrahmenfenster und Dokumentvorlagen 376
Ein leeres Dokument erstellen 377
Eine zusätzliche Ansicht für ein vorhandenes Dokument erstellen 378
Dokumente öffnen und speichern 378
Mehrere Dokumentvorlagen 378
Dokumente aus dem Windows-Explorer laden und per
Drag & Drop verschieben 379
Das Beispiel Exl6b: eine MDI-Anwendung 380
CEx16bApp 380
CMainFrame 383
CChildFrame 386
Die Anwendung Exl6b testen 388
MTI-Anwendungen 388
Das Beispiel Exl6c: Eine MTI-Anwendung 388
Test der Anwendung Exl6c 390

17 Drucken und Seitenansicht 391
Drucken unter Windows 391
Standarddialogfelder zur Druckersteuerung 392
Druckseiten interaktiv auswählen 393
Bildschirmseiten und Druckseiten 393
Seitenansicht 394
Druckausgaben programmieren 394
Der Druckergerätekontext und die Funktion CView.:OnDraw 394
Die Funktion CView::OnPrint 394
Den Gerätekontext vorbereiten: Die Funktion CView::OnPrepareDC 395
Beginn und Ende eines Druckauftrags 395
Das Beispiel Exl7a: Ein WYSIWYG-Druckprogramm 396
Den bedruckbaren Bereich ermitteln 401
Die Klasse CArray 402
Das Beispiel Exl7b: Mehrere Seiten drucken 403

18 Teilbare Fenster und Mehrfachansichten 409
Teilbare Fenster 410
Ansichtsoptionen 410
Dynamische und statische Fensterteilung 411
Beispiel Ex18a: Eine SDI-Anwendung mit einer Ansichtsklasse und dynamisch teilbarem Fenster 411
Ressourcen für die Fensterteilung 412
CMainFrame 412
Die Anwendung Ex18a testen 413
Das Beispiel Ex18b: Eine SDI-Anwendung mit zwei Ansichtsklassen und statisch geteiltem Fenster 413
CHexView 414
CMainFrame 414
Die Anwendung Ex18b testen 415
Das Beispiel Ex18c: Verschiedene Ansichten ohne teilbares Fenster 416
Ressourcen 416
CMainFrame 416
Die Anwendung Ex18c testen 417
Das Beispiel Ex18d: Eine MDI-Anwendung mit mehreren Ansichtsklassen 418
Ressourcen 419
CExlSdApp 419
CMainFrame 420
Die Anwendung Ex18d testen 421

19 Kontextabhängige Hilfe 423
WinHelp oder HTML Help? 423
Das WinHelp-Programm 425
Das Rich Text Format 425
Eine einfache Hilfedatei verfassen 426
Ein verbessertes Inhaltsverzeichnis 431
Das Anwendungsgerüst und WinHelp 431
WinHelp aufrufen 432
Schlüsselwörter und Textsuche 432
WinHelp aus dem Anwendungsmenü aufrufen 433
Aliasbezeichner für Hilfekontext-IDs 433
Den Hilfekontext festlegen 433
Hilfe mit Fl 434
Hilfe mit Umschalt+Fl 434
Hilfe in Meldungsfeldern: Die Funktion AfxMessageBox 435
Generische Hilfe 435
Ein Hilfebeispiel ohne Programmierung 436
Hilfebefehle verarbeiten 438
Hilfeanforderungen mit Fl 438
Hilfeanforderungen mit Umschalt+Fl 439
Das Beispielprogramm Exl9b: Verarbeitung von Hilfebefehlen 439
Headerdateien 439
CStringView 439
CHexView 440
Ressourcen 440
Hilfedateien 441
Die Anwendung Exl9b testen 441
MFC und HTML Help 442
Beispiel Exl9c: HTML Help 442

20 Dynamic Link Libraries (DLLs) 445
DLL-Grundlagen 445
Wie Importe und Exporte abgeglichen werden 446
Implizite und explizite Bindung 447
Symbolische und ordinale Bindung 448
Der Eintrittspunkt in die DLL: DllMain 448
Instanzhandies und das Laden von Ressourcen 449
So findet das Clientprogramm eine DLL 449
Eine DLL testen 450
MFC: Normale und Erweiterungs-DLLs 450
Klassen aus Erweiterungs-MFC-DLLs exportieren 451
Die Suchreihenfolge für Ressourcen in Programmen mit
Erweiterungs-MFC-DLLs 452
Beispiel Ex20a: Eine Erweiterungs-MFC-DLL 452
Beispiel Ex20b: Ein Testclient für DLLs 454
Normale MFC-DLLs: Die Struktur AFX_EXTENSION_MODULE 455
Das Makro AFX_MANAGE_STATE 455
Die Suchreihenfolge für Ressourcen in Programmen mit normalen MFC-DLLs 455
Beispiel Ex20c: Eine normale MFC-DLL 455
Eine Aktualisierung von Ex20b: Code zum Testen von Ex20c.dll 457
Eine DLL mit einem benutzerdefinierten Steuerelement 459
Was ist ein benutzerdefiniertes Steuerelement? 459
Die Fensterklasse eines benutzerdefinierten Steuerelements 459
Die MFC-Bibliothek und die Funktion WndProc 460
Benachrichtigungen von benutzerdefinierten Steuerelementen 460
Benutzerdefinierte Meldungen an das Steuerelement senden 461
Das Beispielprogramm Ex20d: Ein benutzerdefiniertes Steuerelement 461
Eine weitere Überarbeitung von Ex20b: Code zum Testen von Ex20d.dll 466

21 MFC-Anwendungen ohne Dokument- und Ansichtsklassen 469
Das Beispielprogramm Ex21a: Eine Anwendung auf Dialogfeldbasis 469
Die Initlnstance-Funktion der Anwendungsklasse 471
Die Dialogfeldklasse und das Programmsymbol 472
Das Beispielprogramm Ex21b: Eine SDI-Anwendung 473
Das Beispielprogramm Ex21c: Eine MDI-Anwendung 475

Teil IV
COM, Automation, ActiveX und OLE 477

22 Das Komponentenobjektmodell COM 479

Die Grundlagen von ActiveX 479
Was ist COM? 480
Wesentliche Merkmale von COM 480
Was ist eine COM-Schnittstelle? 481
Die Schnittstelle Wnknown und die Memberfunktion Querylnterface 486
Referenzzählung: Die Funktionen A ddRef und Release 488
Klassenfactory 489
Die Klasse CCmdTarget 490
Das Beispiel Ex22a: Eine simulierte COM-Anwendung 491
COM-Anwendungen mit der MFC-Bibliothek erstellen 497
Die COM-Funktion CoGetClassObject 498
COM und die Windows-Registrierung 498
Objektregistrierung zur Laufzeit 500
Wie ein COM-Client prozessinterne Komponenten aufruft 500
Wie ein COM-Client eine prozessfremde Komponente aufruft 502
Die MFC-Schnittstellenmakros 504
Die MFC-Klasse COleObjectFactory 505
Unterstützung für prozessinterne COM-Komponenten durch Assistenten 506
Clientprogramme für COM-MFC-Anwendungen 508
Das Beispiel Ex22b: Eine MFC-gestützte prozessinterne COM-Komponente 508
Das Beispiel Ex22c: Ein MFC-gestützter COM-Client 512
Einbettung und Aggregation im Vergleich zur Vererbung 513

23 Automatisierung 517
Entwicklung von C++-Komponenten für VBA 518
Automatisierungsclients und Komponenten 518
Microsoft Excel: Ein besseres Visual Basic als Visual Basic 519
Eigenschaften, Methoden und Auflistungen 521
Automatisierungsschnittstellen 522
Die Schnittstelle IDispatch 522
Möglichkeiten der Programmierung 523
Die MFC-Implementierung von IDispatch 525
Eine MFC-Automatisierungskomponente 525
Ein MFC-Automatisierungsclient 526
Einen Automatisierungsclient mit der Compilerdirektive #import erstellen 529
Der Datentyp VARIANT 530
Die Klasse COleVariant 531
Typumwandlungen für Parameter und Rückgabewerte von Invoke 533
Beispiele für die Automatisierung 534
Das Beispiel Ex23a: Automatisierungsserver ohne Benutzeroberfläche 535
Das Beispiel Ex23b: Automatisierungskomponente als DLL 543
Das Beispiel Ex23c: Automatisierungskomponente mit SDI-Benutzeroberfläche 551
Das Beispiel Ex23d: Ein Automatisierungsclient 557
Das Beispiel Ex23e: Ein weiterer Automatisierungsclient 572
Frühe Bindung unter VBA 575
Eine Typbibliothek registrieren 575
Wie eine Komponente ihre Typbibliothek registriert 575
Die IDL-Datei 576
Wie Excel eine Typbibliothek benutzt 577
Warum frühe Bindung verwenden? 578
Schnellere Verbindungen zwischen Client und Komponente 578

24 Vereinheitlichter Datenaustausch: Zwischenablage und OLE-Drag & Drop 579
Die Schnittstelle IDataObject 579
Verbesserte Nutzung der Zwischenablage durch IDataObject 580
Die Strukturen FORMATETC und STGMEDIUM 581
FORMATETC 581
Die Struktur STGMEDIUM 581
Die Memberfunktionen der Schnittstelle IDataObject 582
Andere Memberfunktionen der Schnittstelle IDataObject:
Hinweisverbindungen 583
MFC-Unterstützung für den vereinheitlichten Datenaustausch (UDT) 583
Die Klasse COleDataSource 583
Die Klasse COleDataObject 584
MFC-Datenaustausch über die Zwischenablage 585
Die MFC-Klasse CRectTracker 587
Koordinaten eines CRectTracker-Ob]ekts konvertieren 588
Das Beispiel Ex24a: Datentransfer über die Zwischenablage 589
Die Klasse CMainFrame 590
Die Klasse CEx24aDoc 590
Die Klasse CEx24aView 590
MFC-Unterstützung für Drag & Drop 596
Die Seite der Datenquelle 597
Die Seite des Ziels 597
Ablauf einer Drag & Drop-Operation 598
Das Beispiel Ex24b: OLE-Drag & Drop 599
Die Klasse CEx24bDoc 599
Die Klasse CEx24bView 599

25 Einführung in die ATL-Bibliothek 603
COM-Konzepte 603
Die zentrale Schnittstelle: lUnknown 605
COM-Code schreiben 606
COM-Klassen, die Mehrfachvererbung verwenden 607
Die COM-Infrastruktur 608
ActiveX, OLE und COM 609
ActiveX, MFC und COM 610
Überblick über die ATL 610
AtlBase.H 610
AÜCom.H 611
AtlConv.cpp und AtlConv.h 611
AtlCtl.cpp und AÜCtl.h 611
AtlIFace.idl und AtlIFace.h 611
Atllmpl.cpp 611
AtlWin.cpp und AtlWin.h 611
StatReg.cpp und StatReg.h 612
Clientseitige ATL-Programmierung 612
C++-Vorlagen 612
Smart Pointer 613
Intelligente C++-Zeiger 615
Smart Pointer verwenden 616
Smart Pointer und COM 617
Die Smart Pointer der ATL 618
Die Klasse CComPtrBase 618
Die Klasse CComPtr 621
Die Klasse CComQlPtr 623
Nachteile der Smart-Pointer-Klassen 625
Serverseitige ATL-Programmierung 626
Die ATL und COM-Klassen 626
ATL-Projektoptionen 627
Entwicklung einer klassischen COM-Klasse 629
Apartments und Threadmodelle 630
Verbindungspunkte und ISupportErrorlnfo 632
Der Freethreaded Marshaller 632
Implementierung der Klasse CSpaceship mit klassischem ATL-Code 632
Die grundlegende ATL-Architektur 634
VTBL-Verwaltung 635
Die ATL-Version von lUnknown: CComObjectRootEx 636
Die ATL und QueryInterface 638
Die Klasse CSpaceship erweitern 641
Methoden zu einer Schnittstelle hinzufügen 643
Duale Schnittstellen 644
Die ATL und IDispatch 645
Die Schnittstellen IMotion und IVisual 646
Mehrere duale Schnittstellen 648
Programmieren mit Attributen 649

26 ATL und ActiveX-Steuerelemente 653
Was sind ActiveX-Steuerelemente? 654
Steuerelemente mit der ATL entwickeln 655
Ein Steuerelement erstellen 655
Die Steuerelementarchitektur der ATL 659
Entwicklung eines Steuerelements 665
Ein attributiertes Steuerelement erstellen 692
Ereignisse im attributierten ATL-Code 694

27 Die OLE DB-Vorlagen 695
Warum OLE DB? 695
Grundlegende OLE D B-Architektur 697
Grundlegende Architektur der OLE DB-Vorlagen 697
Die Architektur der OLE DB-Consumervorlagen 698
Aufbau der OLE DB-Vorlagen für Provider 700
Einen OLE DB-Consumer erstellen 705
Den Code des OLE DB-Consumers verwenden 709
Einen OLE DB-Provider erstellen 710
Den Providercode überarbeiten 715
Den Provider verbessern 717
OLE DB-Programmierung mit Attributen 718

Teil V
Programmierung für das Internet 721

28 Internet-Grundlagen 723

Internet-Einführung 724
Netzwerkprotokolle und das Schichtenmodell 724
IP 725
UDP 726
IP-Adressenformat 727
TCP 728
DNS 729
HTTP 731
FTP 733
Internet und Intranet 733
Ein eigenes Mini-Intranet einrichten 734
Das NT-Dateisystem und die Dateizuordnungstabelle (FAT) 734
Netzwerk-Hardware 734
Windows für den Netzwerkbetrieb konfigurieren 735
Hostnamen für ein Intranet: Die Datei hosts 736
Das Intranet testen: Fing 736
Ein Intranet mit einem Computer: Die TCP/IP-Adresse für den
Schleifenbetrieb 736
Winsock-Programmierung 736
Synchrone und asynchrone Winsock-Programmierung 736
Die Winsock-Klassen der MFC-Bibliothek 737
Die blockierenden Socketklassen 737
Die Hilfsklasse CSockAddr 737
Die Klasse CBlockingSocketException 739
Ein vereinfachtes HTTP-Serverprogramm 744
Ein einfaches HTTP-Clientprogramm 747
Einen Webserver mit CHttpBlockingSocket erstellen 748
Serverbeschränkungen im Beispiel Ex28a 748
Architektur des Ex28a-Servers 748
Die Win32-Funktion TransmitFile verwenden 749
Die Anwendung Ex28a erstellen und testen 750
Einen Webclient mit CHttpBlockingSocket erstellen 751
Der Winsock-Client Ex28a 751
Ex28a-Unterstützung für Proxyserver 751
Den Ex28a-Winsock-Client testen 752
WinInet 752
Vorteile von WinInet gegenüber Winsock 752
Die WinInet-Klassen der MFC 753
Rückruffunktionen für Internet-Sitzungen 754
Ein vereinfachtes WinInet-Clientprogramm 756
Mit den MFC-Winlnet-Klassen einen Webclient entwickeln 757
Ex28a: Erster WinInet-Client mit CHttpConnection 757
Den WinInet-Client Nr. 1 testen 757
Ex28a: Zweiter WinInet-Client mit OpenURL 757
Den WinInet-Client Nr. 2 testen 758
Asynchrone Monikerdateien 759
Moniker 759
Die MFC-Klasse CAsyncMonikerFüe 759
Die Klasse CAsyncMonikerFile in einem Programm verwenden 759
Asynchrone Monikerdateien im Vergleich mit Winlnet-Programmierung 760

29 Einführung in Dynamic HTML 763
Das DHTML-Objektmodell 764
Visual C++ .NET und DHTML 768
Das Beispiel Ex29a: MFC und DHTML 769
Das Beispiel Ex29b: DHTML und MFC 770
Das Beispiel Ex29c: ATL und DHTML 773
Weitere Informationen 776

30 ATL Server 777
IIS 777
Internetdienste-Manager 778
HS-Sicherheit 778
IIS-Verzeichnisse 780
IlS-Protokolle 781
Die IIS testen 782
ISAPI-Servererweiterungen 782
CGI und ISAPI 782
Eine einfache ISAPI-Servererweiterung 783
HTML-Formulare: GET und POST 783
Auftritt ATL Server 785
ATL und ATL Server 785
Wo passt ATL Server ins Bild? 786
Die Architektur von ATL Server 786
SRF-Dateien 788
Das Beispiel Ex30a: Eine ATL Server-Website 792

Teil VI
.NET 795

31 Microsoft .NET 797

Komponententechnik 797
Zur Geschichte der Komponenten 797
Was stimmt mit den DLLs nicht? 798
COM 799
Die Vorteile von COM 800
Die Nachteile von COM 800
Die Common Language Runtime 801
Keine Grenzen 802
Es dreht sich alles um Typen 803
Typen der Common Language Runtime 804
Die Common Language Specification 808
Assemblys 808
.NET und das Versionsproblem 811
Das (virtuelle) Leben in der Common Language Runtime 811
Threads und die Common Language Runtime 814
Anwendungsdomänen 814
Interoperabilität 815

32 Managed C++ 817
Die Common Language Runtime ist Ihre Verbündete 817
Warum C++ 818
Verwaltete C++-Erweiterungen 820
Visual C++ .NET und die Managed Extensions 821
Das Beispiel Ex32a: Eine verwaltete C++-DLL 821
DaysOfTheWeek 826
AManagedValueStruct und AManagedGcStruct 826
IAManagedlnterface und IPerson 826
DotCOMVP, SoftwareDeveloper und Bum 826
AManagedDelegate 826
AManagedClass 827
So macht man die Assembly einsatzbereit 827
Das Beispiel Ex32b: Ein eigenständiger verwalteter Client 828
Umstellung vorhandenen Codes auf verwaltetes C++ 830

33 Windows Forms-Programmierung mit verwaltetem C++ 833
Windows Forms 833
Hinter der Fassade 834
Die Struktur von Windows Forms 834
Ein Windows Forms-Assistent 835
Die Form-Klasse 838
Ereignisse 839
Ausgaben auf dem Bildschirm 839
Was in Windows Forms noch fehlt 854

34 ASP.NET-Programmierung mit verwaltetem C++ 855
Das Internet als Entwicklungsplattform 855
Die Entwicklung von ASP.NET 856
Die Rolle der IIS 858
Das Kompilierungsmodell von ASP.NET 858
Die Page-Klasse 859
Code-Behind 860
Web Forms 863
Und wo bleibt ActiveX? 868
Die HTTP-Pipeline 869
Das HttpCorctext-Objekt 869
Das HttpApplication-Obiekt 870
Das HttpModute-Objekt 870
Das HttpHandler-Ob]ekt 872
Webdienste 875
Webdienste und verwaltetes C++ 876
WSDL und ASP.NET 877
Der Aufruf von Webmethoden 878

35 ADO.NET-Programmierung mit verwaltetem C++ 879
Verwaltete Datenanbieter 879
Verwaltete Anbieter in .NET 880
Mit den Datenanbietern arbeiten 881
Aufnahme einer Verbindung zur Datenbank 881
Datenbankabfrage 883
Gespeicherte Prozeduren 884
Einlesen der Daten mit Datenlesern 885
Der Umgang mit Fehlern 886
ADO.NET-Datasets 886
Datasets und Datenadapter 887
Erstellung von Datasets im Speicher 888
Umwandlung von Datasets in XML 890

Anhänge

A Meldungshandler der MFC-Bibliothek 893

B MFC-Klassenidentifikation und dynamische Objekterstellung 899

Den Namen der Objektklasse zur Laufzeit ermitteln 899
Die MFC-Struktur CRuntimeClass und das Makro RUNTIME_CLASS 900
Dynamische Erstellung 901
Ein Beispielprogramm 902

Stichwortverzeichnis 905

Der Autor 924