ダイアログからのデータをメモリーに

  

ここに紹介するプログラムは、WIN XP 2003/Windows 7 (32bits) - OS 環境でマイクロソフトのVisual Studio 2010 で作ったものです。
Windows XP/ Windows 7(32bits) での動作は確認済みですが…

ダイアログから入力したデータをメモリーに保存。 任意の個数を常に保存し、
再現性があるデータ管理が必要です。


負荷計算で必要なデータを拡張性のあるメモリーである、アレーに格納します。

最終的な保存アレーは、CAirconDataクラスメンバを持つ m_ArrayAircon に保存することにしました。

CArray<CAirconData, CAirconData> m_ArrayAircon;

 

このCAirconData クラスは、CRoomDataクラスと同じですが、CAutoACDocクラスのメンバ変数とし、負荷計算・ファイルに保存など最終的なデータ群としています。

すなわち、各データ入出力のダイアログで編集されたデータは、各々のアレーに書き込まれ、確定した段階でこのm_ArrayAirconにコピーされます。  これにより、編集中のデータは確定されなければ、いつでも元に戻せます。

 

RoomData と WallData・GlassData・OtherDataは 従属関係にあり、このRoomDataを削除したらWallData・GlassDataやOtherData も削除される必要があります。

 

また、新しいRoomDataが追加されたら、自動的にWallData・GlassData・OtherDataも作成されなければなりません。

このような理由で、まわりくどいアレーが作られました、最良のアルゴリズムではないと思いますので皆様改造してみてください。

 

 

機能など

メンバ変数

メンバ変数の元となるクラス

CAutoACDocクラス

最終的に書き込まれる

m_ArrayAircon

CAirconData

CRoomDataDlgクラス

部屋データ編集時、書き込まれる

m_RoomArray

CRoomData

CWallDataDlgクラス

壁のデータ編集時、書き込まれる

m_WallArray

CWallData

CGlassDataDlgクラス

窓のデータ編集時、書き込まれる

m_GlassArray

CGlassData

COtherDataDlgクラス

その他データ編集時、書き込まれる

m_OtherArray

COtherData

 

壁のデータ書き込み

 CAutoACDocクラスのなかに、CreatWallDataという関数をつくりここでWallDataを書き込みます。 この関数は、ツリービューのWallアイコンをマウスで左クリックした時に呼ばれるようにしました。

 ///////////////////////////////////////////////
// Wall DataArray の作成
BOOL CAutoACDoc::CreateWallDataArray(int nIndex) //nIndexは、記録されたメモリーの番号です
{
  CWallDlg dlg;
  CAirconData ad;
  BOOL bRet = FALSE;
// 既存データがある場合コピーして編集できるようにしています
  dlg.m_ArrayWall.Copy( m_ArrayAircon[nIndex].m_ArrayWall );
  dlg.m_Array_WallComp.RemoveAll( );
  dlg.m_Array_WallComp.Copy( m_ArrayWallComp );  // 壁の熱貫流率表を記録
  dlg.m_unit = m_unit; // 単位換算

  if( dlg.DoModal() == IDOK ) { // 壁データ入力用のダイアログを呼び出します

    m_ArrayAircon[nIndex].m_ArrayWall.RemoveAll(); // 最終アレーの初期化
    ad = m_ArrayAircon[nIndex];

  if( dlg.m_ArrayWall.GetSize( )) {
    ad.m_ArrayWall.Copy( dlg.m_ArrayWall );
  }

  m_ArrayAircon.SetAt( nIndex, ad );
  SetModifiedFlag( TRUE );

  if( m_Result.GetSize() > nIndex )  // 負荷計算完了データを扱う変数
    m_Result[nIndex].m_bIndex = FALSE;
    bRet = TRUE; // Tree Icon の色をグレーに変更
  }
  return bRet;
}  

 

壁のデータ・その他のデータの書き込みも同様にしています。

///////////////////////////////////////////////
// Glass DataArray の作成
BOOL CAutoACDoc::CreateGlassDataArray(int nIndex)
{
  CGlassDlg dlg;
  CAirconData ad;
  BOOL bRet = FALSE;

  dlg.m_ArrayGlass.Copy( m_ArrayAircon[nIndex].m_ArrayGlass );
  if( dlg.DoModal() == IDOK ) {

    m_ArrayAircon[nIndex].m_ArrayGlass.RemoveAll(); // アレーの初期化
    ad = m_ArrayAircon[nIndex];

    if( dlg.m_ArrayGlass.GetSize( )) {
      ad.m_ArrayGlass.Copy( dlg.m_ArrayGlass );
    }

    m_ArrayAircon.SetAt( nIndex, ad );
    SetModifiedFlag( TRUE );

    if( m_Result.GetSize() > nIndex )
      m_Result[nIndex].m_bIndex = FALSE;
      bRet = TRUE; // Tree Icon の色をグレーに変更
    }
  return bRet;
}

///////////////////////////////////////////////
// Other DataArray の作成
BOOL CAutoACDoc::CreateOtherData(int nIndex)
{
  COtherDlg dlg;
  CAirconData ad;
  CCheckData cd;
  BOOL bRet = FALSE;

  // Other Dlg に表示する項目(既存データの読み込み)
  dlg.m_strStorey = m_ArrayAircon[nIndex].m_storey;
  dlg.m_strRoomName = m_ArrayAircon[nIndex].m_roomname;
  dlg.m_ceiling = atof( m_ArrayAircon[nIndex].m_ceiling );
  dlg.m_floorarea = atof( m_ArrayAircon[nIndex].m_floorarea );
  dlg.m_roomtemp = atof( m_ArrayAircon[nIndex].m_temp );
  dlg.m_roomrh = atof( m_ArrayAircon[nIndex].m_rh );
  dlg.m_unit = m_unit;
  dlg.m_it = m_it;

  // 既存のデータを表示
  dlg.m_other = m_ArrayAircon[nIndex].m_other;
  if(dlg.DoModal() == IDOK) {
    ad = m_ArrayAircon[nIndex];
    ad.m_other = dlg.m_other;
    m_ArrayAircon.SetAt( nIndex, ad );
    SetModifiedFlag( TRUE );

    if( m_Result.GetSize() > nIndex ) m_Result[nIndex].m_bIndex = FALSE;

      bRet = TRUE; // Tree Icon の色をグレーに変更
    }
  return bRet;
}


ページ先頭に戻る
最終更新日: 2020/02/04