1 //フォント関連のソースファイル 2 #include "font.h" 3 4 //グローバル変数 5 AddFont addDot; //ドットフォントを追加 6 Font fontDefault; //デフォルトのフォント 7 Font fontDot; //ドットフォント 8 Font fontDotLarge; //大きいドットフォント 9 Font fontDotSmall; //小さいドットフォント 10 11 //フォントのインストール&作成 12 bool FontInit() 13 { 14 //外部フォントのインストール 15 addDot= FontInstall(FONT_PATH_DOT, FONT_NAME_DOT); 16 if (!addDot.CanInstall) 17 { 18 return false; 19 } 20 21 //フォントデータを生成してハンドルで管理 22 //デフォルトのフォント 23 fontDefault = FontCreate(FONT_NAME_DEFAULT, FONT_SIZE_DEFAULT, FONT_THINCK_DEFAULT, FONT_TYPE_DEFAULT); 24 if (fontDefault.Handle == -1) 25 { 26 return false; 27 } 28 29 //ドットフォント 30 fontDot = FontCreate(addDot.FontName,24,1,FONT_TYPE_DEFAULT); 31 if(fontDot.Handle == -1) 32 { 33 return false; 34 } 35 //大きいドットフォント 36 fontDotLarge = FontCreate(addDot.FontName,64,1,FONT_TYPE_DEFAULT); 37 if(fontDot.Handle == -1) 38 { 39 return false; 40 } 41 //小さいドットフォント 42 fontDotSmall = FontCreate(addDot.FontName,18,1,FONT_TYPE_DEFAULT); 43 if(fontDot.Handle == -1) 44 { 45 return false; 46 } 47 48 49 } 50 51 ///フォントのインストール 52 /// @param path フォントのパス 53 /// @param name フォントの名前 54 AddFont FontInstall(const char* path, const char* name) 55 { 56 AddFont add; 57 //フォントのパスと名前を設定 58 strcpy_s(add.FontPath,sizeof(add.FontPath), path); 59 strcpy_s(add.FontName,sizeof(add.FontName), name); 60 61 //このソフト内で使うフォントをインストール 62 if(!AddFontResourceEx(add.FontPath, FR_PRIVATE, NULL)) 63 { 64 //インストール失敗の場合エラーメッセージを表示 65 FontInstallErrMessage(add.FontPath); 66 add.CanInstall = false; 67 } 68 else 69 { 70 //インストール成功 71 add.CanInstall = true; 72 } 73 //フォントのインストール 74 return add; 75 } 76 77 /// フォントのインストールエラーメッセージ 78 /// @param path フォントのパス 79 void FontInstallErrMessage(const char* path) 80 { 81 //エラー用文字列 82 char ErrStr[FONT_ERR_STR_MAX]; 83 84 //エラー用文字列の内容を空にする 85 for (int i = 0; i < FONT_ERR_STR_MAX; i++) 86 { 87 ErrStr[i] = '\0'; 88 } 89 90 //エラー内容を連結して生成 91 sprintf_s(ErrStr, sizeof(ErrStr), "%s%s", path, FONT_INSTALL_ERRCAP); 92 93 MessageBox(GetMainWindowHandle(), //ウィンドウのハンドル 94 ErrStr, //エラーメッセージ 95 FONT_INSTALL_ERRTITLE, //エラータイトル 96 MB_OK); //OKボタンのみ 97 98 return; 99 } 100 101 /// フォントの作成 102 /// @param FontName フォントの名前 103 /// @param Size フォントのサイズ 104 /// @param Thick フォントの太さ 105 /// @param Type フォントの種類 106 Font FontCreate(const char* FontName, int Size, int Thick, int Type) 107 { 108 Font font; 109 strcpy_s(font.Name,sizeof(font.Name), FontName); 110 font.Size = Size; 111 font.Thick = Thick; 112 font.Type = Type; 113 114 //フォントの名前が違っているなどでフォントが作れない場合エラー 115 if (!CheckFontName(font.Name)) 116 { 117 FontCreateErrMessage(font); 118 font.Handle = -1; //エラーの場合-1を返す 119 } 120 else 121 { 122 //フォントの作成 123 font.Handle = CreateFontToHandle(font.Name, font.Size, font.Thick, font.Type); 124 } 125 return font; 126 } 127 128 /// フォントの作成エラーメッセージ 129 /// @param font フォントのインストール情報 130 void FontCreateErrMessage(Font font) 131 { 132 //エラー用文字列 133 char ErrStr[FONT_ERR_STR_MAX]; 134 135 //エラー用文字列の内容を空にする 136 for (int i = 0; i < FONT_ERR_STR_MAX; i++) 137 { 138 ErrStr[i] = '\0'; 139 } 140 141 //エラー内容を連結して生成 142 sprintf_s(ErrStr, sizeof(ErrStr), "%s%s", font.Name, FONT_CREATED_ERRCAP); 143 144 MessageBox(GetMainWindowHandle(), //ウィンドウのハンドル 145 ErrStr, //エラーメッセージ 146 FONT_CREATED_ERRTITLE, //エラータイトル 147 MB_OK); //OKボタンのみ 148 149 return; 150 } 151 152 ///フォントハンドルの削除 153 /// @param font フォントのインストール情報 154 void FontDelete(Font font) 155 { 156 //フォントハンドルが有効なら 157 if(font.Handle != -1) 158 { 159 //フォントデータの削除 160 DeleteFontToHandle(font.Handle); 161 } 162 return; 163 } 164 165 ///フォントのアンインストール 166 /// @param add フォントのインストール情報 167 void FontUnInstall(AddFont add) 168 { 169 //フォントをインストールしたなら 170 if (add.CanInstall) 171 { 172 //フォントのアンインストール 173 RemoveFontResourceEx(add.FontPath, FR_PRIVATE, NULL); 174 } 175 return; 176 } 177 178 //フォントの削除&アンイストール 179 void FontEnd() 180 { 181 //フォントの削除 182 FontDelete(fontDefault); 183 FontDelete(fontDot); 184 FontUnInstall(addDot); 185 186 return; 187 } 188 189 190 191 192