XmlFile.cpp
#include "StdAfx.h"
#include "XmlFile.h"
using namespace Core;
using namespace System;
using namespace System::Diagnostics;
/// [ Constructor ]
XmlFile::XmlFile()
{
}
/// ルートを生成する
System::Xml::XmlElement^ XmlFile::CreateRoot( System::String^ name )
{
// XML 宣言ノードを追記する
this->AppendChild( this->CreateXmlDeclaration( "1.0", "UTF-8", nullptr ) );
// ルート要素を生成する
Xml::XmlElement^ result = this->CreateElement( name );
// ... それをドキュメントに追加する
this->AppendChild( result );
return result;
}
/// 要素を生成する
System::Xml::XmlElement^ XmlFile::CreateElement( System::String^ name, System::Object^ text )
{
// 要素を作成する
Xml::XmlElement^ result = this->CreateElement( name );
// ... それの値を設定する
result->InnerText = text->ToString();
return result;
}
/// ファイルを読み込む
bool XmlFile::LoadFile( System::String^ fileName )
{
// ファイルが存在するか確認する
if( IO::File::Exists( fileName ) )
{
try
{
// XML ドキュメントを読み込む
this->Load( fileName );
return true;
}
catch( Xml::XmlException^ e )
{
Debug::WriteLine( "設定ファイルの読み込みエラー : " + e->Message );
}
}
return false;
}
/// ウィンドウの情報を読み込む
System::Xml::XmlElement^ XmlFile::LoadWindowStatus( System::Windows::Forms::Form^ form, System::Xml::XmlElement^ element )
{
Xml::XmlElement^ windowElement = element[ "window" ]; // ウィンドウの要素
if( windowElement != nullptr )
{
Xml::XmlElement^ location = windowElement[ "location" ]; // 位置の要素
// 属性から 位置を取得する
int x = int::Parse( location->GetAttribute( "x" ) );
int y = int::Parse( location->GetAttribute( "y" ) );
// ディスプレイの作業領域を取得する
Drawing::Rectangle displayArea = Windows::Forms::Screen::GetWorkingArea( form );
if( displayArea.Contains( x, y ) )
{
// ウィンドウ位置が それの範囲内ならば設定する
form->Location = Drawing::Point( x, y );
}
Xml::XmlElement^ size = windowElement[ "size" ]; // 大きさの要素
// 属性から 位置を取得する
form->Width = int::Parse( size->GetAttribute( "width" ) );
form->Height = int::Parse( size->GetAttribute( "height" ) );
}
return windowElement;
}
/// ウィンドウの情報を保存する
System::Xml::XmlElement^ XmlFile::SaveWindowStatus( System::Windows::Forms::Form^ form, System::Xml::XmlElement^ element )
{
// ウィンドウの要素を生成する
Xml::XmlElement^ windowElement = this->CreateElement( "window" );
// ... それを引数の要素に追加する
element->AppendChild( windowElement );
Drawing::Rectangle formArea; // フォームの領域
// 最大化または最小化されているか?
if( form->WindowState != Windows::Forms::FormWindowState::Normal )
{
// 通常時の位置とサイズを取得する
formArea = form->RestoreBounds;
}
else
{
// 現在の位置とサイズを取得する
formArea = form->Bounds;
}
// 位置の要素を生成する
Xml::XmlElement^ location = this->CreateElement( "location" );
// ... 属性を設定する
location->SetAttribute( "x", formArea.X.ToString() );
location->SetAttribute( "y", formArea.Y.ToString() );
// ... それをウィンドウの要素に追加する
windowElement->AppendChild( location );
// 大きさの要素を生成する
Xml::XmlElement^ size = this->CreateElement( "size" );
// ... 属性を設定する
size->SetAttribute( "width", formArea.Width.ToString() );
size->SetAttribute( "height", formArea.Height.ToString() );
// ... それをウィンドウの要素に追加する
windowElement->AppendChild( size );
return windowElement;
}