Nanashi-softプログラマ専用Windows Mobile 6


◇Windows Mobile 6-フォントを追加する方法-

通常は PDAにデフォルトで設定されたフォントを使用するのが無難な選択です
ここでは、好きなフォントを本体に追加して、それを表示する方法を書きます
尚、この方法で追加したフォントは、本体をリセットすると消滅します

○フォントを追加する

これは、文字を表示する前であればいつでも良いです
当たり前ですが、エラー時のメッセージで追加するフォントはまだ使えません

//プログラムのフルパスを調べる
wchar_t MyAppDir[449]; //プログラムフォルダ

//プログラムパス取得
GetModuleFileName(GetModuleHandle(NULL), MyAppDir, sizeof(MyAppDir));
//プログラム名をカット
int i;
for(i=wcslen(MyAppDir)-1; 0 < i; i--){
  if(MyAppDir[i] == L'\\'){
    break;
  }else{
    MyAppDir[i]= 0;
  }
}

//プログラムファイルと同じ場所に置いた IPAフォントを本体に認識させる
//※この方法で追加したフォントはレジストリに書き込まれないので、リセットすると消える
wchar_t searchdir[449];
swprintf(searchdir, L"%sipag.otf", MyAppDir);
AddFontResource(searchdir);
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);

○追加したフォントで表示する

WM_PAINTで文字を表示する際に、追加したフォントを選択します
それ以外は通常の文字表示と同じです

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  switch(msg){
  case WM_PAINT:
    //フォントを生成
    LOGFONT gLogfont;
    gLogfont.lfHeight = 30;
    gLogfont.lfWidth = gLogfont.lfHeight/2;
    gLogfont.lfEscapement = 0;
    gLogfont.lfOrientation = 0;
    gLogfont.lfWeight = FW_MEDIUM;
    gLogfont.lfItalic = FALSE;
    gLogfont.lfUnderline = FALSE;
    gLogfont.lfStrikeOut = FALSE;
    gLogfont.lfCharSet = SHIFTJIS_CHARSET;
    gLogfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
    gLogfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
    gLogfont.lfQuality = DEFAULT_QUALITY;
    gLogfont.lfPitchAndFamily = FIXED_PITCH|FF_MODERN;
    wcscpy(gLogfont.lfFaceName, L"IPAゴシック"); //IPAフォントを選択

    HFONT hFont = CreateFontIndirect(&gLogfont);

    //生成したフォントをウィンドウに適用
    HDC hdc = GetDC(hWnd);
    SelectObject(hdc, hFont);

    //追加したフォントで文字表示
    ExtTextOut(hdc, 0, 0, 0, 0, L"IPAゴシックフォント", 11, 0);

    ReleaseDC(hWnd, hdc);
  }
}

本当はフォントファイルが存在するか? などのエラーチェックが必要なのでしょうけれど
無ければスルーされてデフォルトフォントで表示されるので、面倒なので省略しました(*'-')


Nanashi-softプログラマ専用Windows Mobile 6