今回は、ビルドを自動化して、2つの不具合を修正します。
MsgCrackを起動して、「CMakeLists」と入力して下さい。
「CMakeLists.txt」が選択されましたね。Enterキーを押してコピーします。 コピーした内容で、MyProjectフォルダに「CMakeLists.txt」というテキストファイルを作成します。
次に、MSYS2で、CMakeをインストールします。MSYS2で「pacman -S cmake」を実行して、 英語の指示に従ってインストールして下さい。これでcmakeコマンドが使えるようになります。
次に、MSYS2でMyProjectフォルダに移動し、「cmake -G "MSYS Makefiles"」を実行して下さい。
エラーメッセージが表示されず、MyProjectフォルダの中に「Makefile」というファイルができたらOKです。 さらに、「make」を実行して下さい。
MyProjectフォルダの中に「build」フォルダができ、「build」フォルダの中に「MyProject.exe」ができればビルド成功です。
これで、「make」を実行するだけでビルドできるようになります。
次に不具合を修正しましょう。OnPsh1メソッドを次のように修正します。
void OnPsh1(HWND hwnd)
{
MString str1 = GetDlgItemText(edt1);
MString str2 = GetDlgItemText(edt2);
double eValue1 = _tcstod(str1.c_str(), NULL);
double eValue2 = _tcstod(str2.c_str(), NULL);
double eValue3 = 0;
HWND hCmb1 = GetDlgItem(hwnd, cmb1);
INT iSel = ComboBox_GetCurSel(hCmb1);
switch (iSel)
{
case 0: // "+"
eValue3 = eValue1 + eValue2;
break;
case 1: // "-"
eValue3 = eValue1 - eValue2;
break;
case 2: // "*"
eValue3 = eValue1 * eValue2;
break;
case 3: // "/"
if (eValue2 == 0)
{
SetDlgItemText(hwnd, edt3, TEXT("N/A"));
return;
}
eValue3 = eValue1 / eValue2;
break;
}
TCHAR szText[128];
StringCchPrintf(szText, _countof(szText), TEXT("%g"), eValue3);
SetDlgItemText(hwnd, edt3, szText);
}
MStringはMZC4の文字列クラスであり、std::stringか、std::wstringのいずれかです。 _tcstodは、_UNICODEマクロが定義されているかどうかによって、 wcstodかstrtodに切り替わります。 wcstodとstrtodは、文字列をdoubleに変換するC言語の関数です。 割り算のとき、if文でちゃんとゼロをチェックさせます。 StringCchPrintfは、C言語のsprintfを安全にした関数です。 Cchは、「Count of CHaracters」すなわち「文字数」を表しています。 _countofは、配列内の要素の個数を取得するマクロです。
再び、makeしましょう。ビルドが成功すれば、電卓の完成です。
ゼロで割っても問題はありません。