前提・実現したいこと
このリンクで実装していること。
OpenGLで文字列描画をしたい。
発生している問題・エラーメッセージ
リンクのソースコードを写して学習していましたが、エラーを吐かれました。
//該当箇所 *1 ・型"const wchar_t*"の引数は型"wchar_t*"のパラメータと互換性がありません ・'void GLFONT::DrawStringW(int,int,wchar_t*,...)'引数3を'const wchar_t[17]'から’wchar_t*’へ変換できません。 //該当箇所 *2 ・コンストラクター"GLFONT::GLFONT"のインスタンスが引数リストと一致しません ・'GLFONT::GLFFONT(wchar_t*, int)':引数1を'const wchar_t[5]'から'wchar_t*'へ変換できません。
該当のソースコード
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の世界!!"); <-- 該当箇所 *1 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); <--該当箇所 *2 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}
試したこと
VisualStudioのプロジェクトプロパティの「文字セット」を
Unicode文字セットを使用する→マルチバイト文字セットを使用する
に変更した。
補足情報(FW/ツールのバージョンなど)
VisualStudio2019
プログラミング初心者です。足りない情報など多いかと思いますので、他に必要な情報があれば追記致しますのでお知らせください。
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/23 03:07