Newer
Older
PrismSoftware / ECTrainer2 / ECTrainerGUI.h
#pragma once

#include <Windows.h>
#include <tchar.h>
#include "myOpenCV.h"
#include <vector>
#include "BaseProcess.h"
#include <d3d9.h>
#include <dshow.h>
#include <Vmr9.h>


LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
#define SAFE_RELEASE(x) { if (x) x->Release(); x = NULL; }
#define CHECK(x) { if(((HRESULT)(x)) < 0) return false;  }

class ECTrainerGUI : public BaseProcess
{
private:
	const cv::String WIN_DISP = "ECTrainer Display";
	const cv::String WIN_MAIN = "Eye Contact Trainer";
	const cv::Size MAIN_FRAME_SIZE = cv::Size(1480, 620);
	const int IMAGE_WIDTH = 640;
	const cv::Point SCENE_BUFFER_POS = cv::Point(170, 120);
	const cv::Point DISP_IMAGE_POS = cv::Point(820, 120);
	const int KEY_ESC = 27;

	//std::vector<std::wstring> _MovieFiles;
	std::vector<RECT> _Displays;
	cv::Mat _MainFrame;		// メインウインドウフレーム
	cv::Mat _DispImage;		// 刺激画像
	cv::Mat _DispBuffer;	// 刺激画面
	cv::Mat _SceneBuffer;	// 視野画像
	cv::Mat _Logo;			// ロゴ
	int _SceneBufferHeight;
	float _SceneBufferScale;
	int _DispImageHeight;
	int _PlayIndex;

	RECT _DispRect;
	HWND _hWnd;
	LPDIRECT3D9 _pD3D;
	LPDIRECT3DDEVICE9 _pD3DDev;
	IGraphBuilder* _pGB;
	IBaseFilter* _pVMR9;
	IBaseFilter* _pSource;
	ICaptureGraphBuilder2* _pCGB2;
	IMediaControl* _pMediaCont;
	IMediaEvent* _pMediaEvent;

	bool InitDx(HINSTANCE hInstance);
	bool PlayMovie(std::wstring movie);
	bool StopMovie();
	void GetDisplayInfo();
	static BOOL CALLBACK MonitorEnumProc(HMONITOR hMon, HDC hdcMon, LPRECT lpMon, LPARAM dwDate);

public:
	ECTrainerGUI(ECTrainer* pEct);
	~ECTrainerGUI();
	bool Init(HINSTANCE hInstance);
	bool MainLoop();
	void SetSceneBuffer(cv::Mat &img);
	void SetDispBuffer(cv::Mat& img);
};