Overview
The CDC (Device Context) class in MFC provides comprehensive functionality for text rendering operations. As a wrapper around Windows GDI functions, CDC handles everything from text positioning to font management.
Core Text Rendering Functions
DrawText
The DrawText method formats and draws text within a specified bounding rectangle. It supports various alignment options and automatic text wrapping.
int DrawText(
LPCTSTR textBuffer, // pointer to text content
int characterCount, // number of characters to render
LPRECT boundingBox, // pointer to RECT structure
UINT formattingFlags // layout and display options
);
Formatting Flags
Alignment options control how text positions within the rectangle:
DT_CENTER: Horizontal centeringDT_LEFT: Left alignmentDT_RIGHT: Right alignmentDT_VCENTER: Vertical centeringDT_TOP: Top alignmentDT_BOTTOM: Bottom alignment
Line breaking behavior options:
DT_SINGLELINE: Forces single-line rendering, truncating overflowDT_WORDBREAK: Breaks lines at word boundariesDT_WORDELLIPSIS: Truncates with ellipsis at the last complete wordDT_PATH_ELLIPSIS: Adds elipsis in the middle of path strings
Special rendering modes:
DT_CALCRECT: Calculates rectangle dimensions without drawingDT_EXPANDTABS: Converts tab characters to spacesDT_NOPREFIX: Disables mnemonic character processingDT_END_ELLIPSIS: Places ellipsis at the text end
Combine multiple flags using the bitwise OR operator. For instance, DT_CENTER | DT_VCENTER centers text both horizontally and vertically.
TextOut
The TextOut method renders a single line of text starting at a specified coordinate:
BOOL TextOut(
int startX, // horizontal starting position
int startY, // vertical starting position
LPCTSTR textContent, // pointer to null-terminated string
int charCount // character count (usually -1 for auto-detect)
);
The character count parameter can typical be omitted when working with null-terminated strings.
Text Styling Functions
SetTextColor
Sets the foreground color for subsequant text operations:
COLORREF SetTextColor(
COLORREF newColor // RGB color value
);
SetBkColor
Defines the background color behind rendered text:
COLORREF SetBkColor(
COLORREF backgroundColor // RGB color value
);
GetTextMetrics
Retrieves detailed information about the currently selected font, including character dimensions and baseline data:
BOOL GetTextMetrics(
LPTEXTMETRIC fontMetrics // pointer to TEXTMETRIC structure
);
This function proves essential when calculating precise text positioning or spacing requirements.
Implementation Workflow
Standard practice involves configuring text attributes before rendering:
CDC* deviceContext = GetDC();
deviceContext->SetTextColor(RGB(255, 0, 0));
deviceContext->SetBkColor(RGB(255, 255, 255));
deviceContext->TextOut(10, 20, _T("Sample Text"), -1);
TEXTMETRIC tm;
deviceContext->GetTextMetrics(&tm);
// Use tm values for subsequent positioning
ReleaseDC(deviceContext);
When modifying device context resources, always restore original settings after completing text operations to prevent resource leaks and unexpected visual behavior in other application areas.
Character Encoding Notes
MFC provides both ANSI and Unicode variants of text functions. DrawTextA handles ANSI strings while DrawTextW manages Unicode strings. Most modern projects use Unicode by default, and the framework automatically selects the appropriate version based on project configuration settings.