Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

108 lines
3.2 KiB

//// DspGDI.CPP - Display strings with GDI API
//
//
#include "precomp.hxx"
#include "global.h"
void PaintGDI(
HDC hdc,
int *piY,
RECT *prc,
int iLineHeight)
{
HFONT hfont, hfontOld;
HBRUSH hbrush, hbrushOld;
HPEN hpen, hpenOld;
COLORREF color, colorOld;
hfont = CreateFontW(
-(INT)(g_style[0].emSize + 0.5),
0, // int nWidth, // average character width
0, // int nEscapement, // angle of escapement
0, // int nOrientation, // base-line orientation angle
g_style[0].style & FontStyleBold ? 700 : 400,
g_style[0].style & FontStyleItalic ? 1 : 0,
g_style[0].style & FontStyleUnderline ? 1 : 0,
g_style[0].style & FontStyleStrikeout ? 1 : 0,
0, // DWORD fdwCharSet, // character set identifier
0, // DWORD fdwOutputPrecision, // output precision
0, // DWORD fdwClipPrecision, // clipping precision
g_TextMode == 3 ? ANTIALIASED_QUALITY : NONANTIALIASED_QUALITY, // DWORD fdwQuality, // output quality
0, // DWORD fdwPitchAndFamily, // pitch and family
g_style[0].faceName
);
Color textColor(g_TextColor);
// Establish available width and height in device coordinates
int plainTextWidth = prc->right - prc->left;
int plainTextHeight = prc->bottom - *piY;
RECT textRect = *prc;
textRect.top = *piY;
textRect.left = textRect.left + (plainTextWidth / 4);
textRect.right = textRect.left + (plainTextWidth / 2);
textRect.bottom = textRect.top + (plainTextHeight / 3);
color = RGB(textColor.GetRed(), textColor.GetGreen(), textColor.GetBlue());
hbrush = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
hpen = CreatePen(PS_SOLID, 0, color);
colorOld = SetTextColor(hdc, color);
hfontOld = (HFONT)SelectObject(hdc, hfont);
hbrushOld = (HBRUSH)SelectObject(hdc, hbrush);
hpenOld = (HPEN)SelectObject(hdc, hpen);
SetBkMode(hdc, TRANSPARENT);
PatBlt(hdc, prc->left, *piY, prc->right, prc->bottom, WHITENESS);
for(int iRender=0;iRender<g_iNumRenders;iRender++)
{
if (g_UseDrawText)
{
int flags = DT_EXPANDTABS | DT_WORDBREAK;
if (g_formatFlags & StringFormatFlagsNoWrap)
flags |= DT_SINGLELINE;
DrawTextW(
hdc,
g_wcBuf,
g_iTextLen,
&textRect,
flags
);
}
else
{
ExtTextOutW(
hdc,
textRect.left,
textRect.top,
ETO_CLIPPED,
&textRect,
g_wcBuf,
g_iTextLen,
NULL);
}
}
Rectangle(hdc, textRect.left, textRect.top, textRect.right, textRect.bottom);
GdiFlush();
SetTextColor(hdc, colorOld);
SelectObject(hdc, hbrushOld);
SelectObject(hdc, hpenOld);
SelectObject(hdc, hfontOld);
DeleteObject(hpen);
DeleteObject(hfont);
*piY += (textRect.bottom - textRect.top) + iLineHeight;
}