Для рисования(текста, боксов, бордеров и прочего) опишим еще один класс - cRender.
Подключаем cRender.h к Base.cpp:
Код HTML:
#include "cRender.h"
задаем указатель на класс
Код HTML:
cRender Render;
Также для всего нам понадобится определения цветов. Создадим фаил Colors.h.
Для определения будем использовать структуру enum:
Код HTML:
enum Colors : D3DCOLOR
{
};
У меня это выглядит так:
Код HTML:
enum Colors : D3DCOLOR
{
ORANGE       =   D3DCOLOR_ARGB(255,255,125,0),
YELLOW        =   D3DCOLOR_ARGB(255,255,255,0),
GREY          =   D3DCOLOR_ARGB(255,128,128,128),
PURPLE        =   D3DCOLOR_ARGB(255,125,0,255),
WHITE    =   D3DCOLOR_ARGB(255, 255, 255, 255),
RED     =   D3DCOLOR_ARGB(255, 255, 000, 000),
GREEN    =   D3DCOLOR_ARGB(255, 000, 255, 000),
BLUE    =   D3DCOLOR_ARGB(255, 000, 000, 255),
BLACK    =   D3DCOLOR_ARGB(255, 000, 000, 000),
AliceBlue = 0xFFF0F8FF,
RED_1    =   D3DCOLOR_ARGB(40, 255, 000, 000),
line_Color = 0xff00ffff,
AntiqueWhite = 0xFFFAEBD7,
Aqua = 0xFF00FFFF,
Aquamarine = 0xFF7FFFD4,
Azure = 0xFFF0FFFF,
Beige = 0xFFF5F5DC,
Bisque = 0xFFFFE4C4,
BlanchedAlmond = 0xFFFFEBCD,
BlueViolet = 0xFF8A2BE2,
Brown = 0xFFA52A2A,
BurlyWood = 0xFFDEB887,
CadetBlue = 0xFF5F9EA0,
Chartreuse = 0xFF7FFF00,
Chocolate = 0xFFD2691E,
Coral = 0xFFFF7F50,
CornflowerBlue = 0xFF6495ED,
Cornsilk = 0xFFFFF8DC,
Crimson = 0xFFDC143C,
Cyan = 0xFF00FFFF,
DarkBlue = 0xFF00008B,
DarkCyan = 0xFF008B8B,
DarkGoldenrod = 0xFFB8860B,
DarkGray = 0xFFA9A9A9,
DarkGreen = 0xFF006400,
DarkKhaki = 0xFFBDB76B,
DarkMagenta = 0xFF8B008B,
DarkOliveGreen = 0xFF556B2F,
DarkOrange = 0xFFFF8C00,
DarkOrchid = 0xFF9932CC,
DarkRed = 0xFF8B0000,
DarkSalmon = 0xFFE9967A,
DarkSeaGreen = 0xFF8FBC8B,
DarkSlateBlue = 0xFF483D8B,
DarkSlateGray = 0xFF2F4F4F,
DarkTurquoise = 0xFF00CED1,
DarkViolet = 0xFF9400D3,
DeepPink = 0xFFFF1493,
DeepSkyBlue = 0xFF00BFFF,
DimGray = 0xFF696969,
DodgerBlue = 0xFF1E90FF,
Firebrick = 0xFFB22222,
FloralWhite = 0xFFFFFAF0,
ForestGreen = 0xFF228B22,
Fuchsia = 0xFFFF00FF,
Gainsboro = 0xFFDCDCDC,
GhostWhite = 0xFFF8F8FF,
Gold = 0xFFFFD700,
Goldenrod = 0xFFDAA520,
GreenYellow = 0xFFADFF2F,
Honeydew = 0xFFF0FFF0,
HotPink = 0xFFFF69B4,
IndianRed = 0xFFCD5C5C,
Indigo = 0xFF4B0082,
Ivory = 0xFFFFFFF0,
Khaki = 0xFFF0E68C,
Lavender = 0xFFE6E6FA,
LavenderBlush = 0xFFFFF0F5,
LawnGreen = 0xFF7CFC00,
LemonChiffon = 0xFFFFFACD,
LightBlue = 0xFFADD8E6,
LightCoral = 0xFFF08080,
LightCyan = 0xFFE0FFFF,
LightGoldenrodYellow = 0xFFFAFAD2,
LightGray = 0xFFD3D3D3,
LightGreen = 0xFF90EE90,
LightPink = 0xFFFFB6C1,
LightSalmon = 0xFFFFA07A,
LightSeaGreen = 0xFF20B2AA,
LightSkyBlue = 0xFF87CEFA,
LightSlateGray = 0xFF778899,
LightSteelBlue = 0xFFB0C4DE,
LightYellow = 0xFFFFFFE0,
Lime = 0xFF00FF00,
LimeGreen = 0xFF32CD32,
Linen = 0xFFFAF0E6,
Magenta = 0xFFFF00FF,
Maroon = 0xFF800000,
MediumAquamarine = 0xFF66CDAA,
MediumBlue = 0xFF0000CD,
MediumOrchid = 0xFFBA55D3,
MediumPurple = 0xFF9370DB,
MediumSeaGreen = 0xFF3CB371,
MediumSlateBlue = 0xFF7B68EE,
MediumSpringGreen = 0xFF00FA9A,
MediumTurquoise = 0xFF48D1CC,
MediumVioletRed = 0xFFC71585,
MidnightBlue = 0xFF191970,
MintCream = 0xFFF5FFFA,
MistyRose = 0xFFFFE4E1,
Moccasin = 0xFFFFE4B5,
NavajoWhite = 0xFFFFDEAD,
Navy = 0xFF000080,
OldLace = 0xFFFDF5E6,
Olive = 0xFF808000,
OliveDrab = 0xFF6B8E23,
Orange = 0xFFFFA500,
OrangeRed = 0xFFFF4500,
Orchid = 0xFFDA70D6,
PaleGoldenrod = 0xFFEEE8AA,
PaleGreen = 0xFF98FB98,
PaleTurquoise = 0xFFAFEEEE,
PaleVioletRed = 0xFFDB7093,
PapayaWhip = 0xFFFFEFD5,
PeachPuff = 0xFFFFDAB9,
Peru = 0xFFCD853F,
Pink = 0xFFFFC0CB,
Plum = 0xFFDDA0DD,
PowderBlue = 0xFFB0E0E6,
RosyBrown = 0xFFBC8F8F,
RoyalBlue = 0xFF4169E1,
SaddleBrown = 0xFF8B4513,
Salmon = 0xFFFA8072,
SandyBrown = 0xFFF4A460,
SeaGreen = 0xFF2E8B57,
SeaShell = 0xFFFFF5EE,
Sienna = 0xFFA0522D,
Silver = 0xFFC0C0C0,
SkyBlue = 0xFF87CEEB,
SlateBlue = 0xFF6A5ACD,
SlateGray = 0xFF708090,
Snow = 0xFFFFFAFA,
SpringGreen = 0xFF00FF7F,
SteelBlue = 0xFF4682B4,
Tan = 0xFFD2B48C,
Teal = 0xFF008080,
Thistle = 0xFFD8BFD8,
Tomato = 0xFFFF6347,
Transparent = 0x00FFFFFF,
Turquoise = 0xFF40E0D0,
Violet = 0xFFEE82EE,
Wheat = 0xFFF5DEB3,
WhiteSmoke = 0xFFF5F5F5,
YellowGreen = 0xFF9ACD32
};
в сRender.h дописываем:
Код HTML:
#include <d3d9.h>
#include <d3dx9.h>
#include <stdio.h>
#include <stdlib.h>
#include "Colors.h"
Теперь непосредственно о самом тексте:
Внутри класса добавляем указатель на интерфейс
Код HTML:
ID3DXFont* pFont;
и прототип нашей будущей функции отрисовки текста:
Код HTML:
void  Draw_Text(int x,int y,DWORD color,LPSTR text,DWORD ST);
x,y - положение текста
color - цвет
text - непосредственно сам текст
ST - стиль и выравнивание.

Выше класса укажим константы для переменной ST:
Код HTML:
#define C_Text (DT_CENTER|DT_NOCLIP)
#define L_Text (DT_LEFT|DT_NOCLIP)
#define R_Text (DT_RIGHT|DT_NOCLIP)
C_Text - выравнивание текста по центру
L_Text - выравнивание текста по левому краю
R_Text- выравнивание текста по правому краю

работаем с cRender.cpp и описываем функцию Draw_Tex:

Код HTML:
void  cRender::Draw_Text(int x,int y,DWORD color,LPSTR text,DWORD ST)
{
RECT rect, rect2;
SetRect( &rect, x, y, x, y );
SetRect( &rect2, x - 0.1, y + 0.2, x - 0.1, y + 0.1 );
pFont->DrawTextA(NULL,text,-1,&rect2, ST, 0xff000000 );
pFont->DrawTextA(NULL,text,-1,&rect,  ST, color );
}
Теперь нужно инициализировать все написанное выше. Для этого в классе cRender заводим болевую переменную
Код HTML:
bool Init;
И переходим к Base.cpp к методу myEndScene и пишем :
Код HTML:
if( !Render.Init )
{
D3DXCreateFont(pDevice, 15, 0, FW_BLACK,0, FALSE, DEFAULT_CHARSET, OUT_TT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &Render.pFont);
Render.Init = true;
}
теперь отрисуем текст(все в том же блоке myEndScene)
Код HTML:
if( !Render.pFont)
  Render.pFont->OnLostDevice();
else
{
 
  Render.Draw_Text(40,40, GREEN, "Hello World. (Les#4)",L_Text);

  Render.pFont->OnLostDevice();
  Render.pFont->OnResetDevice();
}
При потере контекста устройства будет произведена сброс и перегрузка шрифта, что в свою очередь позволит избежать черных экранов и потери текста при сворачивании\разворачиван и приложения.