#pragma once
#include "Defines.h"

#ifdef BKSCRDLL_EXPORTS
#define BKSCRDLL_API __declspec(dllexport)
#else
#define BKSCRDLL_API __declspec(dllimport)
#endif

#ifdef __cplusplus
#define BKEXTERN_C     extern "C"
#else
#define BKEXTERN_C
#endif // __cplusplus


//структура параметров экрана
struct ScrsParams
{
	DWORD *pBits;
	int nTxX; //реальный размер текстуры по Х
	int nTxY; //реальный размер текстуры по Y
	RECT rcFSDim; //текущее разрешение экрана
	RECT rcFSWnd; //размер виевпорта в полноэкранном режиме
};

BKEXTERN_C class BKSCRDLL_API CBKScreen_Shared
{
	protected:
		HWND                m_hwndScreen; // хэндл окна оконного режима
		HWND                m_hwndFullScreen; //хэндл окна полноэкранного режима
		CWnd               *m_pwndMain; //указатель на главное окно
		CWnd               *m_pwndParent; //указатель на родительское окно (View)
		CWnd               *m_pwndScreen; //указатель на окно оконного режима
		CWnd               *m_pwndFullScr; //указатель на окно полноэкранного режима
		DWORD              *m_bits;
		BOOL                m_bMWHdn;   //флаг, показывающий, что главное окно скрыто в полноэкранном режиме
		BOOL                m_bFullScreen; //флаг работы в полноэкранном режиме
		int                 m_nTextureWidth;
		int                 m_nTextureHeight;
		RECT                m_rectFullScreen; //размеры окна в полноэкранном режиме
		RECT                m_rectFSWnd; //размеры viewporta в полноэкранном режиме
		//left, top - координаты экрана, right, bottom - размеры, а не координаты!!!

	public:
		virtual HRESULT     BKSS_ScreenView_Init(ScrsParams &sspar, CWnd *pwndScr, CWnd *pwndFullScr)
		{
			//заполняем хэндлы и указатели на окна
			m_pwndScreen = pwndScr;
			m_pwndFullScr = pwndFullScr;
			m_pwndParent = m_pwndScreen->GetParent();
			m_pwndMain = m_pwndParent->GetParentOwner();
			m_hwndScreen = m_pwndScreen->GetSafeHwnd();
			m_hwndFullScreen = m_pwndFullScr->GetSafeHwnd();
			m_nTextureWidth = sspar.nTxX;
			m_nTextureHeight = sspar.nTxY;
			m_rectFullScreen = sspar.rcFSDim;
			m_rectFSWnd = sspar.rcFSWnd;
			return S_OK;
		}
		virtual void        BKSS_ScreenView_Done() {}
		virtual void        BKSS_DrawScreen() {}
		virtual BOOL        BKSS_SetFullScreenMode()
		{
			return FALSE;
		}
		virtual BOOL        BKSS_SetWindowMode()
		{
			return FALSE;
		}
		virtual CWnd       *BKSS_GetBackgroundWindow()
		{
			return NULL;
		}

		virtual void        BKSS_SetColorMode() {}
		virtual void        BKSS_OnEraseBackground() {}
		virtual void        BKSS_OnSize(int cx, int cy) {}

		CBKScreen_Shared()
			: m_hwndScreen(NULL)
			, m_hwndFullScreen(NULL)
			, m_pwndMain(NULL)
			, m_pwndParent(NULL)
			, m_pwndScreen(NULL)
			, m_pwndFullScr(NULL)
			, m_bits(NULL)
			, m_bMWHdn(FALSE)
			, m_bFullScreen(FALSE)
			, m_nTextureWidth(0)
			, m_nTextureHeight(0)
		{}
		virtual ~CBKScreen_Shared() {}

		virtual BOOL BKSS_GetReverseFlag()
		{
			return TRUE;
		}

		virtual BOOL BKSS_IsFullScreenMode()
		{
			return m_bFullScreen;
		}
};

typedef CBKScreen_Shared *BKSCREENHANDLE;

