I am not trying to discourage you, it just appears that you have not really gotten into the windows api since the the problem in question is pretty mundane. However since C++ programmers generally have a harder time starting with the Windows API (since it is written in C) I will attempt to start you off in the right direction.
Outputting text with Windows API
The first function you want to look at here is TextOut. It has the following function definition:
Code:
TextOut(hdc, x, y, psText, iLength)
where
hdc - Handle to the device context (aka where you want to output text)
x, y - coordinates to start writing text with (0,0) being the upper left hand corner
psText - pointer to a string containing the text to be displayed
iLenght - integer representing string's length (Textout does not recognize /0 denoting end of string)
The second function to look at is sprintf, which is the window's brother of printf. In case you haven't had the opportunity to use it here is a quick rundown. Sprintf is a formatting text function that has its first argument of the buffer where the formatted text goes followed by an indeterminate number of arguments corrosponding to codes in the formatting string. Here is a look at the function definition:
Code:
sprintf(char *szbuffer, const char *szFormat, ...)
Now an example of its use is:
Code:
char szBuffer[100];
sprintf(szBuffer, "The sum of %i and %i is %i", 2, 2, 2+2)
Now the char* szBuffer will contain the text:
Code:
The sum of 2 and 2 is 4
Now you might be wondering what those %i things are. They are format specifiers that tell the function what kind of data it is going to put there, it is known as the character type. The following is a list of character types used by sprintf.
Character Type Output format
Code:
c int or wint_t When used with printf functions, specifies a
single-byte character; when used with wprintf functions, specifies a wide character.
C int or wint_t When used with printf functions, specifies a
wide character; when used with wprintf functions, specifies a single-byte character.
d int Signed decimal integer.
i int Signed decimal integer.
o int Unsigned octal integer.
u int Unsigned decimal integer.
x int Unsigned hexadecimal integer, using "abcdef."
X int Unsigned hexadecimal integer, using "ABCDEF."
e double Signed value having the
form [ – ]d.dddd e [sign]ddd where d is a single decimal digit, dddd is one or more decimal digits,
ddd is exactly three decimal digits, and sign is + or –.
E double Identical to the e format except that E rather than e introduces the exponent.
f double Signed value having the form [ – ]dddd.dddd, where dddd is one or more decimal digits. The number of digits before the
decimal point depends on the magnitude of the number, and the
number of digits after the decimal point depends on the requested precision.
g double Signed value printed in f or e format, whichever is more compact for the given value and precision. The e format
is used only when the exponent of the value is less than –4 or greater than or equal to the precision argument.
Trailing zeros are truncated, and the decimal point appears only if one or more digits follow it.
G double Identical to the g format, except that E, rather than e, introduces the
exponent (where appropriate).
n Pointer to integer Number of characters successfully written so far to the stream or buffer; this value is stored in the
integer whose address is given as the argument.
p Pointer to void Prints the address of the argument in hexadecimal digits.
s String When used with printf functions, specifies a single-byte–character string; when used with wprintf functions, specifies
a wide-character string. Characters are printed up to the first
null character or until the precision value is reached.
S String
Ok, almost there. The last part is putting these two functions together to achieve output to the screen. You may be saying well that's great but how to I get the size? A little detail I forgot to mention is that sprintf returns an integer representing the number of bytes written. You can use this feature to determine length for the TextOut function.
Code:
int iLength, a=2, b=2;
char *szbuffer;
. . . . . . .
iLength = sprintf(szbuffer, "The sum of %i and %i is %i", a, b, a+b);
TextOut(hdc, 0, 0, szbuffer, iLength);
Now you should have obtained hdc during the call to begin paint or by using some other function. This is by far not all that is required knowledge for text outputting in Windows however I hope it serves to get you pointed in the right direction.
-Andy