文字列を表示させる

オープニングやエンディングで文章を出したり、スタッフロールなどを表示する場合、文章を画像で用意してキャラクタのように表示するなんてことはやりたくない。ここでは、文字配列に格納した文字列を画面に表示する方法を紹介したい。

1.準備

以下の関数を作成する。

//-----------------------------------------------------------------------------
// 関数名 : strOut()
// 機能概要: 文字列表示
// 引数  : x,y:表示する座標 *str:表示する文字列の先頭アドレス rgb:文字列の色
//-----------------------------------------------------------------------------
void strOut(int x, int y, char *str, COLORREF rgb)
{
    HDC         hdc;

    g_pDDSBack->GetDC(&hdc);
    SetBkMode(hdc, TRANSPARENT);
    SetTextColor(hdc, rgb);
    TextOut(hdc, x, y, str, strlen(str));
    g_pDDSBack->ReleaseDC(hdc);

}

2.使い方

例えば「むかしむかしあるところに」という文字列を画面に出したい場合、次のようにコーディングする。

char str[80] = "むかしむかしあるところに";

strOut(200, 200, str, RGB(255, 255, 255));

これを実行すると、(200,200)の座標に文字列が白色で表示される。

3.関数の置き場所

私の基本プログラムの場合、myDraw.cppに関数を作成し、プロトタイプ宣言をmyDraw.cppとmyDraw.hの両方に行った。
これにより、どのソースファイルからもstrOut関数を呼び出せる。

4.応用

文字列は現在、システムフォントというデフォルトのフォントが使われているため、全然かっこよくない。フォントを自作するのは大げさだとしてもせめて明朝体とかゴシック体を使いたいものだ。文字の大きさも変えたい。
上記の関数を次のように改造する。

//-----------------------------------------------------------------------------
// 関数名 : strOut2()
// 機能概要: 文字列表示 ポイント数、フォントの種類指定版
// 引数  : x,y:表示する座標 *str:表示する文字列の先頭アドレス rgb:文字列の色
//       *fonttype:フォントの種類を示す文字列の先頭アドレス itaric:イタリック(斜)体にするかどうか
//-----------------------------------------------------------------------------
void strOut(int x, int y, char *str, COLORREF rgb, long point, char *fonttype, BOOL itaric)
{
    HDC         hdc;
    PLOGFONT    FontInfo;
    HGDIOBJ     OldFont, NewFont;

    //フォント情報のセット
    FontInfo=(PLOGFONT)GlobalAlloc(GPTR, sizeof(LOGFONT));
    lstrcpy(FontInfo->lfFaceName, fonttype);
    FontInfo->lfWeight = FW_NORMAL;
    FontInfo->lfWidth = 0;
    FontInfo->lfEscapement = 0;
    FontInfo->lfHeight = point;
    FontInfo->lfItalic = itaric;
    FontInfo->lfUnderline = 0;
    FontInfo->lfCharSet = SHIFTJIS_CHARSET;
    NewFont=CreateFontIndirect(FontInfo);

    g_pDDSBack->GetDC(&hdc);
    OldFont = SelectObject(hdc, NewFont);
    SetBkMode(hdc, TRANSPARENT);
    SetTextColor(hdc, rgb);
    TextOut(hdc, x, y, str, strlen(str));
    g_pDDSBack->ReleaseDC(hdc);
    DeleteObject(NewFont);

}

使い方

例えば「むかしむかしあるところに」という文字列を以下の条件で画面に出したい場合、次のようにコーディングする。

char str[80] = "むかしむかしあるところに";

strOut(200, 200, str, RGB(255, 255, 255), 32, "MS P明朝", TRUE);

補足

  1. フォントの種類は、使用しているパソコンにインストールされているものであれば何でも指定できる。しかし、人によって環境は違うため、代表的なフォント(標準ゴシック、標準明朝、MS ゴシック、MS 明朝、MS Pゴシックなど)しか使わないようにしよう。
  2. 「MS 明朝」や「MS Pゴシック」などのMSフォントを指定する場合、注意が必要である。例えば「MS 明朝」の場合、「MS」と「明朝」の間は半角空白である。全角空白では認識されないため、デフォルトのフォントになってしまう。気をつけよう。

[ TOP ]