C Tutorial / PDF
C Tutorial / PDF
Table of Contents:
Introduction to C . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1
Organization of C programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Hello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
An overview of the compilation process . . . . . . . . . . . . . . . . . . . . . . . . 5
Technical notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
The run time environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
An overview of the standard libraries . . . . . . . . . . . . . . . . . . . . . . . . . . 9
The “stdheaders.h” include file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
Windows specific headers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
Passing arguments to a program. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Iteration constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
while. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
Basic types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
Summary.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
Declarations and definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Variable declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
Function declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18
Function definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
Variable definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
Statement syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
Errors and warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Reading from a file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Commentaries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Standard comments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28
Describing a function . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28
Describing a file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
An overview of the whole language . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
Pre-processor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
Windows specific defined symbols. . . . . . . . . . . . . . . . . . . . . . . . . . . .38
Structured exception handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
Control-flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
Windows specific syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
A closer view. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Identifiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Constants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Integer constants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Floating constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Character string constants . . . . . . . . . . . . . . . . . . . . . . . . .40
Array syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
Function call syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
Functions with variable number of arguments. . . . . . . . . . . . . . . . . . . .42
Assignment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
Postfix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
Subtraction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
Conditional operator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
struct. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44
union. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44
typedef. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44
register. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44
sizeof. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44
enum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
Prototypes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
variable length array.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
const.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
unsigned. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
stdcall. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
break and continue statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
Null statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
Switch statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
inline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
Logical operators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
Bitwise operators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
Address-of operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
Sequential expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
Casts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
Indirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
Precedence of the different operators.. . . . . . . . . . . . . . . . . . . . . . . . .54
The printf family . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
The conversion flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
The minimum field width . . . . . . . . . . . . . . . . . . . . . . . . . .56
The precision. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
The size specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
The conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
setjmp and longjmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Register variables and longjmp(). . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
Simple programs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
strchr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
strlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
ispowerOfTwo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
Write ispowerOfTwo without any loops . . . . . . . . . . . . . . . . . . . . . . . .65
strlwr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
paste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
Using arrays and sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Summary of Arrays and sorting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
Pointers and references . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Structures and unions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Structures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
Structure size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
Defining new types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
Unions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
Using structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Fine points of structure use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
Identifier scope and linkage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Top-down analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Extending a program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Improving the design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Path handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Normal handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104
Security considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
Traditional string representation in C . . . . . . . . . . . . . . . . . . . . . . . . 110
Memory management and memory layout . . . . . . . . . . . . . . . . . . . . 113
Functions for memory allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . .115
Memory layout under windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115
Memory management strategies . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Static buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116
Stack based allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117
“Arena” based allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117
The malloc / free strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118
The malloc with no free strategy. . . . . . . . . . . . . . . . . . . . . . . . . . . .119
Automatic freeing (garbage collection). . . . . . . . . . . . . . . . . . . . . . . .119
Mixed strategies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .120
Counting words. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
The organization of the table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .122
Memory organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124
Displaying the results. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125
Code review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127
A closer look at the pre-processor. . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Time and Date functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Using structures (continued) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .134
Hash tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137
The preprocessor in detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Preprocessor commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .138
Preprocessor macros . . . . . . . . . . . . . . . . . . . . . . . . . . . .139
Conditional compilation. . . . . . . . . . . . . . . . . . . . . . . . . . .140
The pragma directive . . . . . . . . . . . . . . . . . . . . . . . . . . . .140
The ## operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140
Things to watch when using the preprocessor . . . . . . . . . . . . . . . . . .141
Using function pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Advanced C programming with lcc-win32 . . . . . . . . . . . . . . . . . . . . 145
Operator overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .145
How to use this facility . . . . . . . . . . . . . . . . . . . . . . . . . . .145
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146
Generic functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146
Default arguments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146
Structured exception handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . .147
Why exception handling? . . . . . . . . . . . . . . . . . . . . . . . . .147
How do I use SEH? . . . . . . . . . . . . . . . . . . . . . . . . . . . . .147
Auxiliary functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .148
Giving more information . . . . . . . . . . . . . . . . . . . . . . . . . .150
Catching stack overflow . . . . . . . . . . . . . . . . . . . . . . . . . .151
The __retry construct . . . . . . . . . . . . . . . . . . . . . . . . . . . .153
The signal function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154
Software signals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154
Using the signal mechanism . . . . . . . . . . . . . . . . . . . . . . .155
Numerical programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Floating point formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158
Float (32 bit) format. . . . . . . . . . . . . . . . . . . . . . . . . . . . .158
Double (64 bit) format . . . . . . . . . . . . . . . . . . . . . . . . . . .158
Long double (80 bit) format . . . . . . . . . . . . . . . . . . . . . . .159
The qfloat format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159
Special numbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159
What can we do with those numbers then? . . . . . . . . . . . . . . . . . . . .160
Range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160
Precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .162
Going deeper. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .164
Rounding modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165
Complex numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .167
Complex constants: . . . . . . . . . . . . . . . . . . . . . . . . . . . . .167
Pitfalls of the C language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Defining a variable in a header file . . . . . . . . . . . . . . . . . . . . . . . . . .169
Confusing = and == . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169
Forgetting to close a comment . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169
Easily changed block scope. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169
Using the ++ or -- more than once in an expression. . . . . . . . . . . . . .170
Unexpected Operator Precedence . . . . . . . . . . . . . . . . . . . . . . . . . . .170
Extra Semi-colon in Macros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171
Watch those semicolons! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171
Assuming pointer size is equal to integer size . . . . . . . . . . . . . . . . . . .171
Careful with unsigned numbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . .171
Changing constant strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .172
Indefinite order of evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .172
A local variable shadows a global one . . . . . . . . . . . . . . . . . . . . . . . .172
Windows Programming. . . . . . . . . . . . . . . . . . . . . . . . 173
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
WinMain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176
Resources. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179
The dialog box procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183
A more advanced dialog box procedure . . . . . . . . . . . . . . . . . . . . . . .186
User interface considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Dynamically linked libraries (DLLs). . . . . . . . . . . . . . . . . . . . . . . . . . 197
Using a DLL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
A more formal approach. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
New syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203
Event oriented programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203
A more advanced window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Working with keyboard accelerators . . . . . . . . . . . . . . . . . . . . . . . . .208
Customizing the wizard generated sample code . . . . . . . . . . . . . . . 211
Making a new menu or modifying the given menu. . . . . . . . . . . . . . . .211
Adding a dialog box. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .211
Drawing the window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
Initializing or cleaning up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
Getting mouse input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
Getting keyboard input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213
Handling moving/resizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213
Getting notified when the mouse passes over your window . . . . . . . . .213
Additional controls without using a dialog box . . . . . . . . . . . . . . . . . .214
Window controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
A more complex example: a "clone" of spy.exe . . . . . . . . . . . . . . . . 219
Creating the child windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219
Moving and resizing the child windows . . . . . . . . . . . . . . . . . . . . . . .220
Starting the scanning. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .220
Building the window tree.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221
Scanning the window tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221
Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222
Filling the status bar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224
Auxiliary procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225
Numerical calculations in C.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Filling the blanks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Using the graphical code generator . . . . . . . . . . . . . . . . . . . . . . . . . 242
Customizing controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Processing the WM_CTLCOLORXXX message . . . . . . . . . . . . . . . . . . .246
Using the WM_DRAWITEM message . . . . . . . . . . . . . . . . . . . . . . . . .248
The Registry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
The structure of the registry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .252
Enumerating registry subkeys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253
Rules for using the registry. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .255
Interesting keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256
Etc.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Clipboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .258
Serial communications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .259
Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .259
File systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .260
Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261
Handles and Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261
Inter-Process Communications . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261
Mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
Multimedia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
Hooks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
Shell Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .263
Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .263
Terminal Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .263
Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264
Advanced windows techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Memory mapped files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265
Letting the user browse for a folder: using the shell . . . . . . . . . . . . . .268
Retrieving a file from the internet . . . . . . . . . . . . . . . . . . . . . . . . . . .271
Error handling under windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Some tips for debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .274
Check the return status of any API call. . . . . . . . . . . . . . . .274
Always check allocations . . . . . . . . . . . . . . . . . . . . . . . . . .274
Some Coding Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Determining which version of Windows is running . . . . . . . . . . . . . . .276
Translating the value returned by GetLastError() into a readable string.276
Clearing the screen in text mode. . . . . . . . . . . . . . . . . . . . . . . . . . . .276
Getting a pointer to the stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .277
Disabling the screen saver from a program . . . . . . . . . . . . . . . . . . . .277
Drawing a gradient background . . . . . . . . . . . . . . . . . . . . . . . . . . . .278
Capturing and printing the contents of an entire window. . . . . . . . . . .278
Centering a dialog box in the screen . . . . . . . . . . . . . . . . . . . . . . . . .281
Determining the number of visible items in a list box . . . . . . . . . . . . .281
Starting a non-modal dialog box . . . . . . . . . . . . . . . . . . . . . . . . . . . .282
Propagating environment variables to the parent environment. . . . . . .282
Restarting the shell under program control . . . . . . . . . . . . . . . . . . . .282
Translating client coordinates to screen coordinates . . . . . . . . . . . . . .283
Passing an argument to a dialog box procedure . . . . . . . . . . . . . . . . .283
Calling printf from a windows application . . . . . . . . . . . . . . . . . . . . . .283
Enabling or disabling a button or control in a dialog box.. . . . . . . . . . .283
Making a window class available for all applications in the system. . . . .284
Accessing the disk drive directly without using a file system . . . . . . . .284
Retrieving the Last-Write Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . .285
Setting the System Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .285
Getting the list of running processes . . . . . . . . . . . . . . . . . . . . . . . . .285
Changing a File Time to the Current Time . . . . . . . . . . . . . . . . . . . . .287
Displaying the amount of disk space for each drive. . . . . . . . . . . . . . .287
Mounting and unmounting volumes in NTFS 5.0 . . . . . . . . . . . . . . . . .288
Mount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .288
Umount. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .289
FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
How do I create a progress report with a Cancel button? . . . . . . . . . .290
How do I show in the screen a print preview? . . . . . . . . . . . . . . . . . .292
How do I change the color of an edit field? . . . . . . . . . . . . . . . . . . . .292
How do I draw a transparent bitmap? . . . . . . . . . . . . . . . . . . . . . . . .292
How do I draw a gradient background? . . . . . . . . . . . . . . . . . . . . . . .295
How do I calculate print margins? . . . . . . . . . . . . . . . . . . . . . . . . . . .296
How do I calculate the bounding rectangle of a string of text? . . . . . .297
How do I close an open menu?. . . . . . . . . . . . . . . . . . . . . . . . . . . . .297
How do I center a dialog box in the screen?. . . . . . . . . . . . . . . . . . . .298
How do I create non-rectangular windows? . . . . . . . . . . . . . . . . . . . .298
How do I implement a non-blinking caret? . . . . . . . . . . . . . . . . . . . . .298
How do I create a title window (splash screen)?. . . . . . . . . . . . . . . . .298
How do I append text to an edit control? . . . . . . . . . . . . . . . . . . . . . .302
How do I spawn a process with redirected stdin and stdout? . . . . . . . .303
How to modify the width of the list of a combo box . . . . . . . . . . . . . .304
How do I modify environment variables permanently? . . . . . . . . . . . .305
How do I translate between dialog units and pixels? . . . . . . . . . . . . . .306
How do I translate between client coordinates to screen coordinates? .306
When should I use critical sections and when is a mutex better? . . . . .306
Why is my call to CreateFile failing when I use conin$ or conout$?. . . .307
How to erase a file into the recycle bin? . . . . . . . . . . . . . . . . . . . . . .307
Overview of lcc-win32’s documentation . . . . . . . . . . . . . . . . . . . . . . 313
Bibliography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Newsgroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Appendix. Code listings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
The window tree. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .319
Counting chars: countchars.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Click here for Download PDF / FREE
C Tutorial / PDF
0 commentaires: