본문 바로가기

Programming/DirectX

DirectX Text 출력 클래스

다이렉트x로 텍스트를 출력하는게 귀찮아서 클래스로 만들어놓고 디버그용 텍스트출력 매니저로 사용했던 소스코드 입니다.

cText.h 파일

#pragma once

class cText
{
private:
	static	cText*		TextInst;
			ID3DXFont*	m_pFont;
			int			m_nMax_X;
			int			m_nMax_Y;
	cText(void);

public:	
	~cText(void);
	void	Init(void);
	void    Print( LPCSTR cSTR, int nX/*문자열의 왼쪽좌표*/ = 0, int nY/*문자열의 윗쪽좌표*/ = 0, D3DXCOLOR ARGB = 0xFFFFFFFF );
	static	cText*		GetInst(void);
			void		FreeInst(void);
};

// 사용법
//TCHAR	str_Text[256];	// 문자열 변수
//ZeroMemory(str_Text,sizeof(str_Text)); //문자열 변수 초기화
////sprintf(변수명,이후로는 printf처럼 사용);
//sprintf(str_Text,"출력 : %d",A0); // 이런식으로 사용
//TEXTMGR->Print(str_Text); // 텍스트출력
//sprintf(str_Text,"출력 : %d",A1); // 이런식으로 사용
//TEXTMGR->Print(str_Text); // 텍스트출력
//sprintf(str_Text,"출력 : %d",A2); // 이런식으로 사용
//TEXTMGR->Print(str_Text); // 텍스트출력
//sprintf(str_Text,"출력 : %d",A3); // 이런식으로 사용
//TEXTMGR->Print(str_Text); // 텍스트출력
//한개 변수로 출력후에 재사용 가능
//dx D3DFRAME->GetDevice()->BeginScene();과 D3DFRAME->GetDevice()->EndScene(); 사이에 넣을것


cText.cpp 파일


#include "cText.h"
//
cText*		cText::TextInst	=	NULL;

cText::cText(void)
{
	Init();
}
cText::~cText(void)
{
}

void	cText::Init(void)
{
	D3DXFONT_DESC DXFont_DESC;
	ZeroMemory(&DXFont_DESC, sizeof(D3DXFONT_DESC));

	DXFont_DESC.Height = 15;							// 전체 글자 높이
	DXFont_DESC.Width = 15;								// 전체 글자 넓이
	DXFont_DESC.Weight = FW_NORMAL;						// 긁자 굵기 ( FW_BOLD 하면 굵음 )
	DXFont_DESC.MipLevels = D3DX_DEFAULT;
	DXFont_DESC.Italic = false;							// 이텔릭
	DXFont_DESC.CharSet = DEFAULT_CHARSET;
	DXFont_DESC.OutputPrecision = OUT_DEFAULT_PRECIS;
	DXFont_DESC.Quality = DEFAULT_QUALITY;
	DXFont_DESC.PitchAndFamily = DEFAULT_PITCH;
	DXFont_DESC.FaceName, TEXT("돋움체");				// 글씨체
	m_nMax_X	=	1280;								// 윈도우 최대 X
	m_nMax_Y	=	960;								// 윈도우 최대 Y
	D3DXCreateFontIndirect(D3DFRAME->GetDevice(),&DXFont_DESC, &m_pFont);
}

void	cText::Print( LPCSTR cSTR, int nX/*문자열의 왼쪽좌표*/, int nY/*문자열의 윗쪽좌표*/, D3DXCOLOR ARGB )
{
	RECT rt = { nX, nY, m_nMax_X, m_nMax_Y };

#ifdef UNICODE // 유니코드 부분
	m_pFont->DrawTextW(0, cSTR, -1, &rt, DT_TOP|DT_LEFT, ARGB);

#else
	m_pFont->DrawTextA(0, cSTR, -1, &rt, DT_TOP|DT_LEFT, ARGB);

#endif
}

cText*	cText::GetInst(void)
{
	if ( !TextInst )
	{
		TextInst	=	new cText;
		RSCMGR->m_bTEXT_MGR	=	true;
	}
	return TextInst;
}

void	cText::FreeInst(void)
{
	if ( TextInst )
	{
		m_pFont->Release();
		delete	TextInst;
		TextInst	=	NULL;
		RSCMGR->m_bTEXT_MGR	=	false;
	}
}