#pragma once

namespace FDK
{
	public ref class MouseCursor
	{
	public:
		MouseCursor()
		{
			this->Disposed = gcnew CDisposed();
			this->lockObject = gcnew Object();
			this->b表示中 = true;
		}
		~MouseCursor()
		{
			if( this->Disposed->bDispose済みまたは処理中である )
				return;		// 例外は発出させない。

			if( !this->Disposed->t開始を宣言する() )
				return;		// 例外は発出させない。


			Cursor::Show();
			SAFE_REF_DELETE( this->lockObject );

			//GC::SuppressFinalize( this );   --> コンパイラが勝手にやる
		}
		property bool bマウスカーソルの表示
		{
			bool get()
			{
				this->Disposed->tDispose済みまたは実行中なら例外発生( "MouseCursor" );

				lock l( this->lockObject );
				return this->b表示中;
			}
			void set( bool value )
			{
				this->Disposed->tDispose済みまたは実行中なら例外発生( "MouseCursor" );

				lock l( this->lockObject );

				if( value )
				{
					if( this->b表示中 )
					{
						// すでに表示中なので何もしない
					}
					else
					{
						Cursor::Show();
					}
				}
				else
				{
					if( this->b表示中 )
					{
						Cursor::Hide();
					}
					else
					{
						// すでに非表示なので何もしない
					}
				}

				this->b表示中 = value;
			}
		}

	private:
		CDisposed^ Disposed;
		bool b表示中;
		Object^ lockObject;
	};
}