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

No comments:

Post a Comment

Related Posts with Thumbnails

Put Your Ads Here!