font.cpp
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