前提
c++でopengl(freegult)を使用しています。
実現したいこと
https://w.atwiki.jp/opengl/pages/24.html
このサイトに従って、
openglで文字列を描画するようにしたいのですが、エラーが発生して描画できません。
発生している問題・エラーメッセージ
font->DrawStringW(10,120,L"こんにちは OpenGLの世界!!");
というのを入力すると"L"の部分にエラーが起きます。
.
説明 | コード 型 の引数は型 のパラメーターと互換性がありません E0167
該当のソースコード(サイトの内容そのまま)
c++
1#pragma comment(linker, "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup") 2#include <GL/freeglut/freeglut.h> 3#include <stdio.h> 4 5#define WIDTH 320 6#define HEIGHT 240 7 8class GLFONT 9{ 10public: 11 HFONT Hfont; 12 HDC Hdc; 13 GLFONT(wchar_t *fontname, int size); 14 void DrawStringW(int x,int y,wchar_t *format, ...); 15}; 16//コンストラクタ フォント作成 17GLFONT::GLFONT(wchar_t *fontname, int size) 18{ 19 Hfont = CreateFontW( 20 size, //フォント高さ 21 0, //文字幅 22 0, //テキストの角度 23 0, //ベースラインとx軸との角度 24 FW_REGULAR, //フォントの太さ 25 FALSE, //イタリック体 26 FALSE, //アンダーライン 27 FALSE, //打ち消し線 28 SHIFTJIS_CHARSET, //文字セット 29 OUT_DEFAULT_PRECIS, //出力精度 30 CLIP_DEFAULT_PRECIS, //クリッピング精度 31 ANTIALIASED_QUALITY, //出力品質 32 FIXED_PITCH | FF_MODERN, //ピッチとファミリー 33 fontname); //書体名 34 35 Hdc = wglGetCurrentDC(); 36 SelectObject(Hdc, Hfont); 37} 38//ワイド文字列の描画 39void GLFONT::DrawStringW(int x,int y,wchar_t *format, ...) 40{ 41 wchar_t buf[256]; 42 va_list ap; 43 int Length=0; 44 int list=0; 45 46 //ポインタがNULLの場合は終了 47 if ( format == NULL ) 48 return; 49 50 //文字列変換 51 va_start(ap, format); 52 vswprintf_s(buf, format, ap); 53 va_end(ap); 54 55 Length = wcslen(buf); 56 list = glGenLists(Length); 57 for( int i=0; i<Length; i++ ){ 58 wglUseFontBitmapsW(Hdc, buf[i], 1, list + (DWORD)i); 59 } 60 61 glDisable(GL_LIGHTING); 62 glRasterPos2i(x, y); 63 //ディスプレイリストで描画 64 for( int i=0; i<Length; i++ ) 65 { 66 glCallList(list + i); 67 } 68 glEnable(GL_LIGHTING); 69 //ディスプレイリスト破棄 70 glDeleteLists(list, Length); 71 list = 0; 72 Length = 0; 73} 74 75GLFONT *font; 76 77void display(void) 78{ 79 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 80 glColor4f(0.0f, 0.0f, 1.0f, 1.0f); 81 font->DrawStringW(10,120,L"こんにちは OpenGLの世界!!"); 82 glutSwapBuffers(); 83} 84void idle(void) 85{ 86 glutPostRedisplay(); 87} 88void Init(){ 89 glClearColor(1.0, 1.0, 1.0, 1.0); 90 glOrtho(0, WIDTH, HEIGHT, 0, -1, 1); 91 font = new GLFONT(L"MS明朝", 24); 92} 93int main(int argc, char *argv[]) 94{ 95 glutInitWindowPosition(100, 100); 96 glutInitWindowSize(WIDTH, HEIGHT); 97 glutInit(&argc, argv); 98 glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 99 glutCreateWindow("文字列を描画"); 100 glutDisplayFunc(display); 101 glutIdleFunc(idle); 102 Init(); 103 glutMainLoop(); 104 return 0; 105}
補足情報
Visual studio 2022
c++
何か足りなければすみません。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/10/13 15:02
退会済みユーザー
2022/10/13 21:56