drawtext

This function is used to output a string in the specified format within the specified area.

int drawtext(
	LPCTSTR str,
	RECT* pRect,
	UINT uFormat
);
int drawtext(
	TCHAR c,
	RECT* pRect,
	UINT uFormat
);

Parameters

str

A string to be output.

pRect

The pointer to the specified rectangular area. Some uFormat flags use this rectangular area to make a return value. See the details below.

uFormat

Specify how to format the output text. See the details below.

c

A character to be output.

Return Value

When the function executes successfully, the height of the text is returned.

If the DT-VCENTER or DT-BOTTOM flag is specified, the return value represents the offset from the pRect-top to the bottom of the output text.

If the function fails to execute, 0 is returned.

Remarks

By default, the background of the output string is filled with the current background color. Use the function setbkmode to set the background portion of the text to remain transparent or to fill with a background color.

The following are the settings that the uFormat parameter can use to format the text output:

Sign Description
DT_BOTTOM Justifies the text to the bottom of the rectangle. This value is used only with the DT_SINGLELINE value.
DT_CALCRECT Determines the width and height of the rectangle. If there are multiple lines of text, DrawText uses the width of the rectangle pointed to by the lpRect parameter and extends the base of the rectangle to bound the last line of text. If the largest word is wider than the rectangle, the width is expanded. If the text is less than the width of the rectangle, the width is reduced. If there is only one line of text, DrawText modifies the right side of the rectangle so that it bounds the last character in the line. In either case, DrawText returns the height of the formatted text but does not draw the text.
DT_CENTER Centers text horizontally in the rectangle.
DT_EDITCONTROL Duplicates the text-displaying characteristics of a multiline edit control. Specifically, the average character width is calculated in the same manner as for an edit control, and the function does not display a partially visible last line.
DT_END_ELLIPSIS For displayed text, if the end of a string does not fit in the rectangle, it is truncated and ellipses are added. If a word that is not at the end of the string goes beyond the limits of the rectangle, it is truncated without ellipses.
The string is not modified unless the DT_MODIFYSTRING flag is specified.
DT_EXPANDTABS Expands tab characters. The default number of characters per tab is eight. The DT_WORD_ELLIPSIS, DT_PATH_ELLIPSIS, and DT_END_ELLIPSIS values cannot be used with the DT_EXPANDTABS value.
DT_EXTERNALLEADING Includes the font external leading in line height. Normally, external leading is not included in the height of a line of text.
DT_HIDEPREFIX Ignores the ampersand (&) prefix character in the text. The letter that follows will not be underlined, but other mnemonic-prefix characters are still processed.
Example:
input string: "A&bc&&d"
normal: "Abc&d"
DTDT_HIDEPREFIX: "Abc&d"
DT_INTERNAL Uses the system font to calculate text metrics.
DT_LEFT Aligns text to the left.
DT_MODIFYSTRING Modifies the specified string to match the displayed text. This value has no effect unless DT_END_ELLIPSIS or DT_PATH_ELLIPSIS is specified.
DT_NOCLIP Draws without clipping. DrawText is somewhat faster when DT_NOCLIP is used.
DT_NOFULLWIDTHCHARBREAK Prevents a line break at a DBCS (double-wide character string), so that the line breaking rule is equivalent to SBCS strings. For example, this can be used in Korean windows, for more readability of icon labels. This value has no effect unless DT_WORDBREAK is specified.
DT_NOPREFIX Turns off processing of prefix characters. Normally, DrawText interprets the mnemonic-prefix character & as a directive to underscore the character that follows, and the mnemonic-prefix characters && as a directive to print a single &. By specifying DT_NOPREFIX, this processing is turned off.
Example:
input string: "A&bc&&d"
normal: "Abc&d"
DT_NOPREFIX: "A&bc&&d"
DT_PATH_ELLIPSIS

For displayed text, replaces characters in the middle of the string with ellipses so that the result fits in the specified rectangle. If the string contains backslash (\\) characters, DT_PATH_ELLIPSIS preserves as much as possible of the text after the last backslash.
The string is not modified unless the DT_MODIFYSTRING flag is specified.

DT_PREFIXONLY Draws only an underline at the position of the character following the ampersand (&) prefix character. Does not draw any other characters in the string.
Example:
input string: "A&bc&&d"
normal: "Abc&d"
DT_PREFIXONLY: " _   "
DT_RIGHT Aligns text to the right.
DT_RTLREADING Layout in right-to-left reading order for bidirectional text when the font selected into the hdc is a Hebrew or Arabic font. The default reading order for all text is left-to-right.
DT_SINGLELINE Displays text on a single line only. Carriage returns and line feeds do not break the line.
DT_TABSTOP Sets tab stops. Bits 15-8 of the uFormat parameter specify the number of characters for each tab. The default number of characters per tab is 8. The DT_CALCRECT, DT_EXTERNALLEADING, DT_INTERNAL, DT_NOCLIP, and DT_NOPREFIX values cannot be used with the DT_TABSTOP value.
DT_TOP Justifies the text to the top of the rectangle.
DT_VCENTER Centers text vertically. This value is used only with the DT_SINGLELINE value.
DT_WORDBREAK Breaks words. Lines are automatically broken between words if a word would extend past the edge of the rectangle specified by the lpRect parameter. A carriage return-line feed sequence also breaks the line.
If this is not specified, output is on one line.
DT_WORD_ELLIPSIS Truncates any word that does not fit in the rectangle and adds ellipses.

Using the flags DT_NOFULLWIDTHCHARBREAK, DT_HIDEPREFIX, DT_PREFIXONLY requires WINVER >= 0x0500 before referencing graphics.h or easyx.h (not supported in VC6.0). For example:

#define WINVER 0x0500

Examples

The following example outputs a string "Hello World" in the center of the screen:

#include <graphics.h>
#include <conio.h>

int main()
{
	// Drawing window initialization
	initgraph(640, 480);

	// Output string sin in the center of the screen
	RECT r = {0, 0, 639, 479};
	drawtext(_T("Hello World"), &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);

	// Press any key to exit
	_getch();
	closegraph();
}
(贡献者:Krissi  编辑