Step 4. 解析条件の入力
解析の方法によっては解析条件を入力しなければならないことがあります。ここではメニューから「解析条件の入力」を選択するとダイアログボックスが表示されここに数値を入力できるようにします。ラジオボタン、チェックボタンはやや面倒だったので応用編にまわします。
1. メニューの追加
Step.3でやった手順をおさらいします。いまは「データ解析」メニューには「データの和を求める」しかないのですが、ここに「解析条件の入力」を追加します。IDはたとえば ID_SumDataBase などとしておきます。
2. ダイアログボックスの設置(その1)
左ウインドウのResourceの札をクリックします。つづいてメニューバーの「挿入」から「リソース」をクリックします。いくつか選択が表示されますので「Dialog」を選択し新規作成します。すると「OK」と「キャンセル」がすでに配置されたダイアログボックスが表示されます。ここで右クリックして ClassWizard を選択します。クラスの追加に関するメッセージボックスが表示されますので新規クラスの作成を選びます。つづいてクラス名にはたとえば CMyDialog などと入力します。
3. ダイアログボックスの設置(その2)
ダイアログボックスの横にいろんなコントロールツールが表示されています(見えない場合はメニューバーのツールから「カスタマイズ」「ツールバー」「コントロール」のチェック)のでここでは「エディットボックス」をつまんでダイアログボックスに配置します。
「エディットボックス」が白い枠でハイライトされている間に右クリックしClassWizardを選択します。ここで「メンバ変数」をクリックします。コントロールIDのところに「IDC_EDIT1」がありますのでここをダブルクリックします。メンバ変数をここでは m_base とし変数のタイプを double にしてOKをクリックします。するともとの画面の下に最大値、最小値を入力する欄がでてきますのでたとえば -100.0, 100.0 などと入力します。これでこのエディットボックスに入力された数値を m_base として取得できる準備が整いました。(このm_base のようにウインドウを越えて値を受け渡しできるようにすることをDDXというらしい。)
4. ***View.cppの変更
まず #include "MyDialog.h" を先頭の方に書き加えます。
つづいて(すべてのクラスメンバ)のところをクリックして ID_SumDataBase を選択し、その横のCOMMAND を選択クリックします。すると関数名を「OnSumDataBase」でよいか聞いてきますのでOKとすると ***View.cpp の一番下にこの関数が準備されますのでここを次のように書き換えます。このなかの変数Getaは OnSumData 関数で使えるようヘッダファイルで宣言しておき、またいつものように0に初期化しておきます。
void CStep1View::OnSumDataBase()
{
// TODO: この位置にコマンド ハンドラ用のコードを追加してください
int ret;
CMyDialog myDL;
ret=myDL.DoModal();
if (ret==IDOK) {
Geta=myDL.m_base;
}
}
5. OnSumData関数の変更
Step.3 で作ったOnSumData関数にゲタをはかせます。
void CStep1View::OnSumData()
{
// TODO: この位置にコマンド ハンドラ用のコードを追加してください
SumData=0.0;
for (int i=0; i<ndata; i++){
if (x[i]>=Xmin && x[i]<=Xmax && y[i]>=Ymin && y[i]<=Ymax) {
SumData=SumData+y[i]+Geta;
}
}
MSumData=1;
RedrawWindow();
}
6. エディットボックス/font>
いまのままですとエディットボックスの値はメニューを表示するたびに0に戻されてしまいます。前回入力した値を保ちたい場合もあると思います。これについては応用編で対応しています。
7. ラジオボタン、チェックボタンの設置
チェックボタンについてはエディットボックスの設置とほぼ同じ手順で大丈夫です。DDXを利用する際にエディットボックスではメンバ変数をいろんなデータ型から選べたのに対し、チェックボタンでは BOOL 型になります。
ラジオボタンはやや面倒だったので応用編にまわします。