In this blog, 25.000 books will be uploaded, so far more than 1400 books are available. Books, will be added daily, please check this blog daily.
Friday, September 16, 2011
The Tomes of Delphi 3 Win32 Core API Windows 2000
Contents
Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvi
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xviii
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
Chapter 1 Delphi and the Windows API . . . . . . . . . . . . . . . . . . . . . . . . . 1
Windows Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Handles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Imprting Windows Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Incorrectly Imprted Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Callback Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Function Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Delphi vs. the Windows API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Chapter 2 Window Creation Functions . . . . . . . . . . . . . . . . . . . . . . . . . 9
Creating Windows: The Basic Steps . . . . . . . . . . . . . . . . . . . . . . . . . 9
Window Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
The Window Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Hardcore Windows Programming . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Window Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Multiple Document Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Extending Functionality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Delphi vs. the Windows API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Window Creation and Registration Functions . . . . . . . . . . . . . . . . . . . 26
CreateMDIWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
CreateWindowEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
DestroyWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
MessageBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
RegisterClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
RegisterClassEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
UnregisterClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Chapter 3 Message Processing Functions. . . . . . . . . . . . . . . . . . . . . . . . 57
The Message Queue and Message Loop . . . . . . . . . . . . . . . . . . . . . . 57
Windows Hooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Interprocess Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Delphi vs. the Windows API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Message Processing Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
BroadcastSystemMessage. . . . . . . . . . . . . . . . . . . . . . . . . . . 63
CallNextHookEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
CallWindowProc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
DefFrameProc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
DefMDIChildProc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
DefWindowProc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
DispatchMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
GetMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
GetMessageExtraInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
GetMessagePos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
GetMessageTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
GetQueueStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
InSendMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
PeekMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
PostMessage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
PostQuitMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
PostThreadMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
RegisterWindowMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
ReplyMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
SendMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
SendMessageCallback . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
SendMessageTimeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
SendNotifyMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
SetMessageExtraInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
SetWindowsHookEx. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
WH_CALLWNDPROC Hook Function . . . . . . . . . . . . . . . . . . 105
WH_CALLWNDPROCRET Hook Function . . . . . . . . . . . . . . . . 106
WH_CBT Hook Function . . . . . . . . . . . . . . . . . . . . . . . . . . 107
WH_DEBUG Hook Function . . . . . . . . . . . . . . . . . . . . . . . . 110
WH_FOREGROUNDIDLE Hook Function . . . . . . . . . . . . . . . . 111
WH_GETMESSAGE Hook Function . . . . . . . . . . . . . . . . . . . . 111
WH_JOURNALPLAYBACK Hook Function . . . . . . . . . . . . . . . 112
WH_JOURNALRECORD Hook Function . . . . . . . . . . . . . . . . . 114
WH_KEYBOARD Hook Function . . . . . . . . . . . . . . . . . . . . . 115
WH_MOUSE Hook Function . . . . . . . . . . . . . . . . . . . . . . . . 116
WH_MSGFILTER Hook Function . . . . . . . . . . . . . . . . . . . . . 117
WH_SHELL Hook Function . . . . . . . . . . . . . . . . . . . . . . . . 118
WH_SYSMSGFILTER Hook Function . . . . . . . . . . . . . . . . . . . 120
TranslateMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
UnhookWindowsHookEx . . . . . . . . . . . . . . . . . . . . . . . . . . 123
WaitMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Chapter 4 Memory Management Functions. . . . . . . . . . . . . . . . . . . . . . 125
The Win32 Virtual Memory Architecture . . . . . . . . . . . . . . . . . . . . . 125
Categories of Memory Allocation Functions . . . . . . . . . . . . . . . . . . . 126
Heaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
The 16-Bit Memory Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Virtual Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Three States of Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
How Much Memory is Really There? . . . . . . . . . . . . . . . . . . . . . . . 128
Multiple Heaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Error Trapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Thread Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Delphi vs. the Windows API . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Memory Management Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 131
CopyMemory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
FillMemory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
GetProcessHeap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
GlobalAlloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
GlobalDiscard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
GlobalFlags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
GlobalFree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
GlobalHandle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
GlobalLock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
GlobalMemoryStatus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
GlobalReAlloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
GlobalSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
GlobalUnlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
HeapAlloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
HeapCreate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
HeapDestroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
HeapFree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
HeapReAlloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
HeapSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
IsBadCodePtr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
IsBadReadPtr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
IsBadStringPtr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
IsBadWritePtr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
MoveMemory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
VirtualAlloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
VirtualFree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
VirtualProtect. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
VirtualQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
ZeroMemory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Chapter 5 Dynamic-Link Library Functions . . . . . . . . . . . . . . . . . . . . . . 169
Imprting/Exporting Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Calling Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
The Dynamic-Link Library Entry Point Function . . . . . . . . . . . . . . . 170
Delphi vs. the Windows API . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Dynamic-Link Library Functions . . . . . . . . . . . . . . . . . . . . . . . . . 171
DLLMain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
DisableThreadLibraryCalls . . . . . . . . . . . . . . . . . . . . . . . . . . 172
FreeLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
FreeLibraryAndExitThread . . . . . . . . . . . . . . . . . . . . . . . . . . 174
GetModuleFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
GetModuleHandle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
GetProcAddress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
LoadLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
LoadLibraryEx. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Chapter 6 Process and Thread Functions . . . . . . . . . . . . . . . . . . . . . . 187
Imprtant Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Priority Levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Synchronization and Coordination . . . . . . . . . . . . . . . . . . . . . . . . . 188
Deadlocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Synchronization Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Critical Sections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Semaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Mutexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Synchronizing Processes with a Mutex . . . . . . . . . . . . . . . . . . . . 191
Delphi vs. the Windows API . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Process and Thread Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
CreateEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
CreateMutex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
CreateProcess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
CreateSemaphore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
CreateThread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
DeleteCriticalSection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
DuplicateHandle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
EnterCriticalSection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
ExitProcess. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
ExitThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
GetCurrentProcess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
GetCurrentProcessId. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
GetCurrentThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
GetCurrentThreadId . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
GetExitCodeProcess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
GetExitCodeThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
GetPriorityClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
GetThreadPriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
GetWindowThreadProcessId . . . . . . . . . . . . . . . . . . . . . . . . 225
InitializeCriticalSection . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
InterlockedDecrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
InterlockedExchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
InterlockedIncrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
LeaveCriticalSection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
OpenEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
OpenMutex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
OpenProcess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
OpenSemaphore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
PulseEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
ReleaseMutex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
ReleaseSemaphore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
ResetEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
ResumeThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
SetEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
SetPriorityClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
SetThreadPriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Sleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
SuspendThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
TerminateProcess. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
TerminateThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
TlsAlloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
TlsFree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
TlsGetValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
TlsSetValue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
WaitForInputIdle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
WaitForSingleObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Chapter 7 Timer Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Emulating a Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Precise Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Delphi vs. the Windows API . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Timer Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
GetTickCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
KillTimer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
QueryPerformanceCounter. . . . . . . . . . . . . . . . . . . . . . . . . . . 262
QueryPerformanceFrequency . . . . . . . . . . . . . . . . . . . . . . . . . 263
SetTimer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Chapter 8 Error Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Error Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Audible Error Cues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Delphi vs. the Windows API . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Error Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Beep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
ExitWindows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
ExitWindowsEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
FatalAppExit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
GetLastError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
MessageBeep. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
SetLastError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Chapter 9 Graphical Device Interface Functions . . . . . . . . . . . . . . . . . . . 279
Device Independence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Device Contexts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Device Context Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Screen, Window, and Client Area Device Contexts . . . . . . . . . . . . . . 282
Coordinate Systems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Mapping Logical Coordinates into Device Coordinates . . . . . . . . . . . 284
Mapping Modes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Problems with Logical Coordinate Mapping . . . . . . . . . . . . . . . . . 288
Delphi vs. the Windows API . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Graphical Device Interface Functions . . . . . . . . . . . . . . . . . . . . . . . 289
ChangeDisplaySettings . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
ClientToScreen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
CreateCompatibleDC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
DeleteDC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
DPtoLP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
EnumDisplaySettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
GetDC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
GetDCOrgEx. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
GetDeviceCaps
ReleaseDC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
RestoreDC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
SaveDC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
ScaleViewportExtEx. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
ScaleWindowExtEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
ScreenToClient. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
ScrollDC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
SetMapMode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
SetViewportExtEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
SetViewportOrgEx. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
SetWindowExtEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
SetWindowOrgEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Chapter 10 Painting and Drawing Functions . . . . . . . . . . . . . . . . . . . . . . 345
Graphical Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Pens and Brushes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Delphi vs. the Windows API . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Painting and Drawing Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Arc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
BeginPaint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Chord. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
CreateBrushIndirect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
CreateHatchBrush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
CreatePatternBrush. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
CreatePen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
CreatePenIndirect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
CreateSolidBrush. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
DeleteObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
DrawCaption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
DrawEdge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
DrawFocusRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
DrawFrameControl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
DrawState . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Ellipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
EndPaint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
EnumObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
ExtCreatePen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
ExtFloodFill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
FillPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
FillRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
FillRgn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
FrameRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
FrameRgn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
GetBkColor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
GetBkMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
GetBoundsRect. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
GetBrushOrgEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
GetCurrentObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
GetCurrentPositionEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
GetMiterLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
GetObject. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
GetObjectType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
GetPixel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
GetPolyFillMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
GetROP2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
GetStockObject. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
GetUpdateRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
GetUpdateRgn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
GrayString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
InvalidateRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
InvalidateRgn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
LineDDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
LineTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
LockWindowUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
MoveToEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
PaintDesktop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
PaintRgn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Pie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
PolyBezier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
PolyBezierTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
Polygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
Polyline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
PolylineTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
PolyPolygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
PolyPolyline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
Rectangle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
RoundRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
SelectObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
SetBkColor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
SetBkMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
SetBoundsRect. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
SetBrushOrgEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
SetMiterLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
SetPixel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
SetPixelV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
SetPolyFillMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
SetROP2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
StrokeAndFillPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
StrokePath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
Chapter 11 Region and Path Functions . . . . . . . . . . . . . . . . . . . . . . . . . 455
Regions and Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Regions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Paths. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
Special Effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
Delphi vs. the Windows API . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Region and Path Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
AbortPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
BeginPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
CloseFigure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
CombineRgn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
CopyRect. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
CreateEllipticRgn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
CreateEllipticRgnIndirect . . . . . . . . . . . . . . . . . . . . . . . . . . 469
CreatePolygonRgn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
CreatePolyPolygonRgn . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
CreateRectRgn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
CreateRectRgnIndirect. . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
CreateRoundRectRgn . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
EndPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
EqualRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
EqualRgn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
ExcludeClipRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
ExtCreateRegion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
ExtSelectClipRgn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
FlattenPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
GetClipBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
GetClipRgn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
GetPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
GetRegionData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
GetRgnBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
InflateRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
IntersectRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
InvertRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
InvertRgn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
IsRectEmpty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
OffsetClipRgn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
OffsetRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
OffsetRgn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
PathToRegion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
PtInRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
PtInRegion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
PtVisible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
RectInRegion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
RectVisible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
SelectClipPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
SelectClipRgn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
SetRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
SetRectEmpty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
SetRectRgn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
SetWindowRgn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
SubtractRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
UnionRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
WidenPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
Chapter 12 Bitmap and Metafile Functions. . . . . . . . . . . . . . . . . . . . . . . 529
Bitmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
Device-dependent Bitmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
Device-independent Bitmaps. . . . . . . . . . . . . . . . . . . . . . . . . . 530
Bitmap Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
Metafiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
Enhanced Metafiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
Delphi vs. the Windows API . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
Bitmap and Metafile Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 538
BitBlt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
CloseEnhMetaFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
CopyEnhMetaFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
CopyImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
CreateBitmap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
CreateBitmapIndirect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
CreateCompatibleBitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
CreateDIBitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
CreateDIBSection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
CreateEnhMetaFile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562
DeleteEnhMetaFile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
EnumEnhMetaFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566
GetBitmapBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
GetBitmapDimensionEx. . . . . . . . . . . . . . . . . . . . . . . . . . . 571
GetDIBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
GetEnhMetaFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
GetEnhMetaFileDescription . . . . . . . . . . . . . . . . . . . . . . . . . 578
GetEnhMetaFileHeader . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
GetStretchBltMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
LoadBitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
LoadImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
PatBlt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
PlayEnhMetaFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
PlayEnhMetaFileRecord. . . . . . . . . . . . . . . . . . . . . . . . . . . 591
SetBitmapBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
SetBitmapDimensionEx . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
SetDIBits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
SetDIBitsToDevice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
SetStretchBltMode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
StretchBlt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
StretchDIBits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
Chapter 13 Text Output Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 609
Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609
Font Families . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609
Character Sets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
Character Dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611
The Windows Font Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611
Font Embedding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Delphi vs. the Windows API . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
Text Output Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
AddFontResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
CreateFont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
CreateFontIndirect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
CreateScalableFontResource . . . . . . . . . . . . . . . . . . . . . . . . 632
DrawText. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
DrawTextEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
EnumFontFamilies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
EnumFontFamiliesEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
GetCharABCWidths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653
GetCharWidth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
GetFontData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656
GetGlyphOutline. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
GetKerningPairs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
GetOutlineTextMetrics . . . . . . . . . . . . . . . . . . . . . . . . . . . 664
GetRasterizerCaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679
GetTabbedTextExtent . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
GetTextAlign. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681
GetTextCharacterExtra . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
GetTextColor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
GetTextExtentExPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
GetTextExtentPoint32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686
GetTextFace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
GetTextMetrics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
RemoveFontResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694
SetTextAlign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694
SetTextCharacterExtra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
SetTextColor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
SetTextJustification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
TabbedTextOut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700
TextOut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
Appendix A Bibliography. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
Appendix B Virtual Key Code Chart . . . . . . . . . . . . . . . . . . . . . . . . . . 707
Appendix C Tertiary Raster Operation Codes . . . . . . . . . . . . . . . . . . . . . 711
Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719
Another Delphi Books
Another Microsoft Books
Download
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment