www.pudn.com > mfcopentree.rar > MyFont.h


#if !defined MYFONT_H 
#define MYFONT_H 
 
///////////////////////////////// 
/////My Fonts documents////////// 
///////////////////////////////// 
#include  
#include 			// Header File For Standard Input/Output 
#include 			// Header File For The OpenGL32 Library 
#include 			// Header File For The GLu32 Library 
#include 		// Header File For The Glaux Library 
#include 			// Header File For Variable Argument Routines 
 
 
class CMyFont 
{ 
public: 
	char *	buffer; 
	GLuint	base; 
	GLuint	list_number; 
	GLint	fontheight; 
 
public: 
	CMyFont() 
	{	 
		list_number    = 96; 
		fontheight	   = 24; 
	} 
 
	~CMyFont()  
	{ 
		glDeleteLists(base, list_number); 
	} 
 
	//////////////////////////// 
	///some necessary operations 
	//////////////////////////// 
 
	void InitFont(HDC hDC, GLint height) 
	{ 
		//when what you want are bitmap fonts, the initialization as following: 
		//NOTATION: 
		//YOU MUST DISABLE GL_TEXTURE_2D FIRST!!! 
		HFONT	font;										// Windows Font ID 
		fontheight = height; 
		base = glGenLists(96);								// Storage For 96 Characters 
 
		font = CreateFont(	-fontheight,					// Height Of Font 
							0,								// Width Of Font 
							0,								// Angle Of Escapement 
							0,								// Orientation Angle 
							FW_BOLD,						// Font Weight 
							FALSE,							// Italic 
							FALSE,							// Underline 
							FALSE,							// Strikeout 
							CHINESEBIG5_CHARSET,			// Character Set Identifier 
							OUT_TT_PRECIS,					// Output Precision 
							CLIP_DEFAULT_PRECIS,			// Clipping Precision 
							ANTIALIASED_QUALITY,			// Output Quality 
							FF_DONTCARE|DEFAULT_PITCH,		// Family And Pitch 
							"Arial");					// Font Name 
 
		SelectObject(hDC, font);							// Selects The Font We Want 
 
		wglUseFontBitmaps(hDC, 32, 96, base);				// Builds 96 Characters Starting At Character 32 
	}			 
 
 
	//NOTATION: 
	//When you call this method ,you MUST call glDisable(GL_TEXTURE_2D)!! 
	//if you wanna show transparent effect, you must call glEnable(GL_DEPTH_TEST); 
	//and in the initialization partition, glBlendFunc(GL_SRC_ALPHA, GL_ONE). 
	void DisplayFonts(char *mystring, ...) 
	{ 
		char		text[256];								// Holds Our String 
		va_list		ap;										// Pointer To List Of Arguments 
 
		if (mystring == NULL)									// If There's No Text 
			return;											// Do Nothing 
 
		va_start(ap, mystring);									// Parses The String For Variables 
			vsprintf(text, mystring, ap);						// And Converts Symbols To Actual Numbers 
		va_end(ap);											// Results Are Stored In Text 
 
		glPushAttrib(GL_LIST_BIT);							// Pushes The Display List Bits 
		glListBase(base - 32);								// Sets The Base Character to 32 
		glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);	// Draws The Display List Text 
 
		glPopAttrib();			 
	} 
 
}; 
 
#endif