コード:
// main.cpp
# include <vector>
# include "DxLib.h"
# include "resource.h"
int FontHandle;
int FontColor;
int EdgeColor;
void SetFont(const char *pFontName, int pFontSize, int pFontThick, int pFontEdge)
// 引数はそのまま<CreateFontToHandle>に渡すだけ
{
if (pFontEdge) // 縁つきのフォントにするかどうか
{
FontHandle = CreateFontToHandle(pFontName, pFontSize, pFontThick, DX_FONTTYPE_ANTIALIASING_EDGE_8X8, DX_CHARSET_DEFAULT, pFontEdge);
}
else
{
FontHandle = CreateFontToHandle(pFontName, pFontSize, pFontThick, DX_FONTTYPE_ANTIALIASING_8X8, DX_CHARSET_DEFAULT);
}
if (FontHandle == -1) // 読み込み失敗検出
{
AppLogAdd("UserMes: Image::SetFont Font Create Error.\n");
MessageBox(NULL, "フォントの作成に失敗。", ("エラー"), MB_OK | MB_ICONERROR);
return;
}
}
void SetFontColor(int pR, int pG, int pB)
{
FontColor = GetColor(pR, pG, pB);
}
void SetEdgeColor(int pR, int pG, int pB)
{
EdgeColor = GetColor(pR, pG, pB);
}
// 描画
void DrawStr(int pX, int pY, const char *pStr, int pID)
{
SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 255);
DrawStringToHandle(pX, pY, pStr, FontColor, FontHandle, EdgeColor);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HRSRC hFontResource = FindResource(NULL, MAKEINTRESOURCE(USERFONT), RT_FONT);
HGLOBAL LoadRes = LoadResource(NULL, hFontResource);
LPVOID lpFontImage = LockResource(LoadRes);
DWORD dwFontImageSize = SizeofResource(NULL, hFontResource);
DWORD dwFontCount = 0;
HANDLE hFontResourceHandle = AddFontMemResourceEx(lpFontImage, dwFontImageSize, NULL, &dwFontCount);
// ここまでで実行ファイルに埋め込んだリソースを、フォントとして認識できるようにします。
// ウィンドウ登録と同じくらい定型文コードです
ChangeWindowMode(1); // ウィンドウ
DxLib_Init(); // 初期化
SetDrawScreen(DX_SCREEN_BACK); // 裏画面化
// フォント追加関数です。(インストール済み、またはリソースからすでに読み込んでいるものからDXライブラリのハンドルを生成します)
SetFont("DS-Digital", 64, 5, 1); // 元はクラス内で管理してたので、返り値はないです。
SetFontColor(255, 255, 255); // 文字色
SetEdgeColor(100, 100, 100); // 縁色
while(1) // ループ突入。グッドラック!
{
ClearDrawScreen();
DrawStr(0, 0, "]-[|/34<#!", 0); // 記号
DrawStr(0, 90, "0123456789", 0); // 数字
DrawStr(0, 180, "ABCDEFGHIJKLM", 0); // アルファベット
DrawStr(0, 270, "NOPQRSTUVWXYZ", 0);
DrawStr(0, 360, "死ぬがよい", 0); // 描画できない文字の例
ScreenFlip();
// 以下終了判定
if (CheckHitKey(KEY_INPUT_ESCAPE))
{
break;
}
if (ProcessMessage() == -1)
{
break; // エラーが発生したらループを抜ける
}
}
DxLib_End();
}
// ***********************************************************************************************************************************
// resource.h
# define USERFONT 101
// ***********************************************************************************************************************************
// resource.rc
# include <windows.h>
# include "resource.h"
USERFONT FONT "DS-DIGI.TTF"