/// ****************************************************************************
/// @file   
/// @author Dr.Neeton
/// @date   200X/X/X - 2014/01/24
/// 
/// @brief  イベントのタイミング管理等。
/// 
/// ****************************************************************************

#pragma once

#include "CPL_WIN_Base.h"


namespace CPL {
namespace WIN {


// _____________________________________________________________________________
/// @brief ウィンドウズメッセージイベントクラス
///
// *****************************************************************************
class MsgEvent
  : public Core::EventItem
{
protected:
  HWND   m_hdl_window;
  UINT   m_message;
  WPARAM m_wparam;
  LPARAM m_lparam;

protected:
public:
  MsgEvent
  ( HWND   in_hdl_window
  , UINT   in_message
  , WPARAM in_wparam
  , LPARAM in_lparam
  ) : m_hdl_window(in_hdl_window)
    , m_message(in_message)
    , m_wparam(in_wparam)
    , m_lparam(in_lparam)
  {}
  // デストラクタ。イベント実行する。
  ~MsgEvent()
  {
    ::SendMessage( m_hdl_window, m_message, m_wparam, m_lparam );
  }

  bool Comp( Core::EventItem const* in_ptr_evt )
  {
    auto p = dynamic_cast<MsgEvent const*>(in_ptr_evt);
    if( p )
    {
      return
        m_hdl_window == p->m_hdl_window  &&
        m_message    == p->m_message  &&
        m_wparam     == p->m_wparam  &&
        m_lparam     == p->m_lparam;
    }
    return false;
  }
};


} // namespace WIN
} // namespace CPL
