この章から、実際に電卓を実装していきます
まず、共通して使用する変数および関数を定義します
共通で使用する変数の定義
用意する変数は次の通りです
- current_buffer:文字列、初期値:空文字
- last_operator: 文字列、初期値:空文字
- stack[2] : 文字列の配列、初期値:空文字
MyCalculatorDlg.hのCMyCalculatorDlgクラスに、変数の定義を追加します
class CMyCalculatorDlg : public CDialogEx
{
// コンストラクション
public:
CMyCalculatorDlg(CWnd* pParent = nullptr); // 標準コンストラクター
// ダイアログ データ
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_MYCALCULATOR_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート
// 実装
// 以下に追加する --ここから
private:
CString current_buffer = _T("");
CString last_operator = _T("");
CString stack[2] = {_T(""),_T("")};
// -- ここまで
protected:
HICON m_hIcon;
// 生成された、メッセージ割り当て関数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:OnInitDialogについて
MyCalculateDlg.cppにはBOOL CMyCalculatorDlg::OnInitDialog()という関数が定義されています
OnInitDialog はダイアログの初期化処理を行うメソッドです
このメソッド内で、ダイアログボックスに表示されるコントロールの初期状態を設定したり、メンバ変数の値を初期化したりします
例えば、編集ボックスに初期値を設定する、チェックボックスをオンにするなどが可能です
既存の処理以外に、何か初期処理を実行したい場合、
// TODO: 初期化をここに追加します。と記載されている行の下へ追加します
BOOL CMyCalculatorDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// "バージョン情報..." メニューをシステム メニューに追加します。
// IDM_ABOUTBOX は、システム コマンドの範囲内になければなりません。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、
// Framework は、この設定を自動的に行います。
SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定
// TODO: 初期化をここに追加します。
return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
}たとえば、先に定義した変数を初期化する関数initVariableを定義し、その関数をOnInitDialogから呼び出すときは以下のように記述します
- MyCalculatorDlg.h
MyCalculatorDlg.hにvoid initVariable()を定義します
class CMyCalculatorDlg : public CDialogEx
{
// コンストラクション
public:
CMyCalculatorDlg(CWnd* pParent = nullptr); // 標準コンストラクター
// ダイアログ データ
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_MYCALCULATOR_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート
// 実装
private:
void initVariable(); // 初期化用関数を定義
CString current_buffer = _T("");
CString last_operator = _T("");
CString stack[2] = {_T(""),_T("")};
protected:
HICON m_hIcon;
// 生成された、メッセージ割り当て関数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
};- MyCalculatorDlg.cppの中に実体の関数を記述します
// 変数の初期化
void CMyCalculatorDlg::initVariable()
{
clearCurrentBuffer();
last_operator = "";
stack[0] = "";
stack[1] = "";
}- MyCalculatorDlg.cppのOnInitDialog()内からinitVariable()を呼び出します
// TODO: 初期化をここに追加します。の下に呼び出す関数を記述します
// TODO: 初期化をここに追加します。この記述より上は、自動で生成された部分ですので、変更や削除は控えましょう
BOOL CMyCalculatorDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// "バージョン情報..." メニューをシステム メニューに追加します。
// IDM_ABOUTBOX は、システム コマンドの範囲内になければなりません。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、
// Framework は、この設定を自動的に行います。
SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定
// TODO: 初期化をここに追加します。
initVariable(); // 初期化関数を呼び出す
return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
}変数の定義が終わりましたので、次回はACボタンの実装に入ります
コメント