About
Contents
STL
Android
Eigen
enchant.js
Firefox OS
OpenGL
OpenGL ES 2.0
pukiwiki
UE4
Unity
Windows Phone
Xamarin
Materials Link
その他
PR
STL
Android
Eigen
enchant.js
Firefox OS
OpenGL
OpenGL ES 2.0
pukiwiki
UE4
Unity
Windows Phone
Xamarin
WindowsのAPIを使ってフォントを生成し文字列を表示します。2バイト文字列も可。
#include <GL/freeglut.h> #include <stdio.h> HFONT g_hFont; HDC g_hDC; // フォント作成。 void CreateFont( wchar_t* _pFontName, int _Size ) { g_hFont = CreateFontW( _Size, // フォントの高さ 0, // 平均文字幅 0, // 文字送り方向の角度 0, // ベースラインの角度 FW_REGULAR, // フォントの太さ FALSE, // 斜体にするかどうか FALSE, // 下線を付けるかどうか FALSE, // 取り消し線を付けるかどうか SHIFTJIS_CHARSET, // 文字セットの識別子 OUT_DEFAULT_PRECIS, // 出力精度 CLIP_DEFAULT_PRECIS, // クリッピング精度 ANTIALIASED_QUALITY, // 出力品質 FIXED_PITCH | FF_MODERN, // ピッチとファミリ _pFontName); // フォント名 g_hDC = wglGetCurrentDC(); SelectObject( g_hDC, g_hFont ); } // 文字列の描画。 void DrawString( int _x,int _y, wchar_t *format, ... ) { wchar_t buf[256]; va_list ap; int length = 0; int list = 0; if( format == NULL ) { return; } //文字列変換 va_start( ap, format ); vswprintf_s( buf, format, ap ); va_end( ap ); length = wcslen( buf ); list = glGenLists( length ); for( int i = 0; i < length; i++ ) { wglUseFontBitmapsW( g_hDC, buf[i], 1, list + (DWORD)i ); } glDisable( GL_LIGHTING ); glRasterPos2i( _x, _y ); //ディスプレイリストで描画 for( int i = 0; i< length; i++ ) { glCallList(list + i); } glEnable( GL_LIGHTING ); //ディスプレイリスト破棄 glDeleteLists( list, length ); } // ディスプレイコールバック void displayCallBack() { // 画面の初期色設定。 glClearColor( 1.0f, 1.0f, 1.0f, 1.0 ); // 画面クリア。 glClear( GL_COLOR_BUFFER_BIT ); // テキスト描画。 glColor4f( 0.0f, 0.0f, 1.0f, 1.0f ); DrawString( 40, 40, L"全角文字。" ); glColor4f( 1.0f, 0.0f, 0.0f, 1.0f ); DrawString( 40, 60, L"Hallo OpenGL !!!" ); // ダブルバッファ交換。 glutSwapBuffers(); } // キーボード入力用コールバック void KeyboardCallBack( unsigned char _key, int _x, int _y ) { switch( _key ) { case '\033': // ESC { exit(0); // 終了 } break; default: break; } } // メイン int main( int argc, char *argv[] ) { // GLUTの初期化 glutInit( &argc, argv ); // ウィンドウの位置を指定。 glutInitWindowPosition( 100, 100 ); // ウインドウサイズ指定 glutInitWindowSize( 640, 480 ); // ウインドウの表示モード指定 glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA ); // ウインドウ生成 glutCreateWindow( argv[0] ); // コールバック関数の登録。 glutDisplayFunc( displayCallBack ); // ディスプレイ。 glutKeyboardFunc( KeyboardCallBack ); // キーボード // 現在の行列と正射影行列の乗算を行う。 glOrtho( 0, glutGet( GLUT_INIT_WINDOW_WIDTH ), glutGet( GLUT_INIT_WINDOW_HEIGHT ), 0, -1, 1 ); // フォント作成。 CreateFont( L"MSゴシック", 18 ); // メインループ glutMainLoop(); // フォント破棄。 DeleteObject( g_hFont ); return 0; }