#pragma once
/// ****************************************************************************
/// @file   
/// @author Dr.Neeton
/// @date   2015/11/16 - 2015/11/16
/// 
/// @brief  クリップボード
/// 
/// ****************************************************************************

#include "CPL_WIN_Base.h"

namespace CPL {
namespace WIN {

// _____________________________________________________________________________
/// @brief クリップボード管理用オブジェクト
///
// *****************************************************************************
class Clipboard
  : public Core::BaseObject
{
public:
  // Standard Clipboard Formats
  CPL_SCOPED_ENUM
    ( eFormat
    , UINT
    , Bitmap          = CF_BITMAP
    , Dib             = CF_DIB
    , DibV5           = CF_DIBV5
    , Dif             = CF_DIF
    , DspBitmap       = CF_DSPBITMAP
    , DspEnhMetaFile  = CF_DSPENHMETAFILE
    , DspMetaFilePict = CF_DSPMETAFILEPICT
    , DspText         = CF_DSPTEXT
    , EnhMetaFile     = CF_ENHMETAFILE
    , GdiObjFirst     = CF_GDIOBJFIRST
    , GdiObjLast      = CF_GDIOBJLAST
    , HDrop           = CF_HDROP
    , Locale          = CF_LOCALE
    , MetaFilePict    = CF_METAFILEPICT
    , OemText         = CF_OEMTEXT
    , OwnerDisplay    = CF_OWNERDISPLAY
    , Palette         = CF_PALETTE
    , PenData         = CF_PENDATA
    , PrivateFirst    = CF_PRIVATEFIRST
    , PrivateLast     = CF_PRIVATELAST
    , Riff            = CF_RIFF
    , Sylk            = CF_SYLK
    , Text            = CF_TEXT
    , Tiff            = CF_TIFF
    , UnicodeText     = CF_UNICODETEXT
    , Wave            = CF_WAVE
    );

  Clipboard();
  ~Clipboard();

  size_t GetData( _in<U32    > in_format, rout<std::vector<char>> out_data ) const;
  size_t GetData( _in<eFormat> in_format, rout<std::vector<char>> out_data ) const
  {
    return GetData( (U32)in_format, out_data );
  }
  size_t
    SetData
      ( _in<S32   > in_format
      , pin<void  > in_ptr_data
      , _in<size_t> in_size_data
      );

private:
};


} // namespace WIN
} // namespace CPL
