OpenGLを使用し可変長引数を用いて文字を描画するプログラミングを何回か書いてきましたが、
インターネットの説明でいろいろな記事を見ましたが、まだイメージが難しいところがあるので、質問させていただきました。
va_list・va_start・vswprintf_s・についてお聞きしたいのですが
va_list
可変長引数を扱ううえで必要な情報を保持する変数だといることはわかるのですが、
具体的にどのような情報を保持しているのでしょうか?
va_start
可変長引数リストの初期化
ネットの記事では[第2引数:指定した引数以降を引数リストに格納]と書いてあったのですが、
下の場合では、可変長引数リストformatに格納されている文字列を、va_listで定義したargListに格納するということでしょうか?
va_start(argList, format);
そして、
vswprintf_s
下の場合では、第3引数の型を基に第2引数が示す文字列を第1引数に格納する。でいいのでしょうか?
vswprintf_s(buf, format, argList);
va_startとvswprintf_sの関係性がいまいちイメージできませんでした。
どなたかわかる方教えていただければ幸いです。<(_ _)>
C++
1void font_Draw(const wchar_t* format, ...) { 2 va_list argList; 3 4 if (format == nullptr)return; 5 6 wchar_t buf[256]; 7 va_start(argList, format); 8 vswprintf_s(buf, format, argList); 9 va_end(argList); 10 11 int length = wcslen(buf);//ワイド文字列の長さ 12 int list = glGenLists(length);//連続した空のディスプレイ・リストを生成します 13 14 wchar_t fontType[] = { L"MS明朝" }; 15 HFONT Ofont = CreateFontW( 16 20, //_In_ int cHeight:論理フォントの高さ 17 0, //_In_ int cWidth:論理フォントのはば 18 0, //_In_ int cEscapement:文字の方向(左から右) 19 0, //_In_ int cOrientation 20 FW_REGULAR, //_In_ int cOrientation 21 FALSE, //_In_ DWORD bItalic 22 FALSE, //_In_ DWORD bUnderline 23 FALSE, //_In_ DWORD bStrikeOut 24 SHIFTJIS_CHARSET, //_In_ DWORD iCharSet 25 OUT_DEFAULT_PRECIS, //_In_ DWORD iOutPrecision 26 CLIP_DEFAULT_PRECIS, //_In_ DWORD iClipPrecision, 27 DEFAULT_QUALITY, //_In_ DWORD iQuality 28 FIXED_PITCH | FF_MODERN,//_In_ DWORD iPitchAndFamily 29 fontType); //_In_opt_ LPCWSTR pszFaceName 30 31 HDC Odc = wglGetCurrentDC(); 32 SelectObject(Odc, Ofont); 33 34 wchar_t* font = buf; 35 int i = 0; 36 for (; (*font != '\0') && (*font != '\n'); font++) { 37 wglUseFontBitmapsW( 38 Odc, // HDC 39 *font, // DWORD 40 1, // DWORD 41 list+(DWORD)i// DWORD 42 ); 43 i++; 44 } 45 glColor3f(0xff,0xff,0xff); 46 glPushMatrix(); 47 { 48 glRasterPos2i(100, 100); 49 for (int i = 0; i < length; i++) { 50 glCallList(list + i); 51 } 52 } 53 glPopMatrix(); 54 55 if (*font == '\n' || '\0') { 56 glDeleteLists(list, length); 57 list = 0; 58 length = 0; 59 60 font_Draw(++font); 61 } 62}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。