⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 board.h

📁 基于点轨迹的手势识别.鼠标右键点击开始记录鼠标轨迹,基于记录的轨迹,利用神经网络算法进行识别.
💻 H
字号:
/*
 Copyright (c) 2001 
 Author: Konstantin Boukreev 
 E-mail: konstantin@mail.primorye.ru 

 Created: 01.11.2001 17:23:34
 Version: 1.0.0

*/

#ifndef _Board_6726ac43_b433_404f_928f_dcb951e922ed
#define _Board_6726ac43_b433_404f_928f_dcb951e922ed

#if _MSC_VER > 1000 
#pragma once
#endif // _MSC_VER > 1000

class Board : 
	public CWindowImpl<Board, CStatic>
{
	friend class _Main;

public:
	typedef std::list<POINT>	path_t;
	typedef std::vector<float>	vector_real_t;
		
	struct winner
	{
		unsigned m_id;				// index of pattern in pattern_data array
		float    m_probability;
	};

private:
	enum mode
	{
		untrained_mode,
		training_mode,
		trained_mode,
		recognizing_mode,
		recognized_success,
		recognized_fail,
	};

	enum {WM_ASYNC_REFRESH = WM_USER + 101};
		
	const unsigned NUMBER_OF_ANGLES;
	const unsigned NUMBER_OF_ANCHOR_POINTS;

	bool		m_refresh;			// refresh flag
//	DWORD		m_timestamp;		// last redraw
	HDC			m_hMemDC;			
	HBITMAP		m_hBitmap;
	HBITMAP		m_hOldBitmap;
	HDC			m_hMemDC2;			
	HBITMAP		m_hBitmap2;
	HBITMAP		m_hOldBitmap2;
	HDC			m_hMemDC3;			
	HBITMAP		m_hBitmap3;
	HBITMAP		m_hOldBitmap3;
	HDC			m_hMemDC4;			
	HBITMAP		m_hBitmap4;
	HBITMAP		m_hOldBitmap4;
	RECT		m_rcMemDC;
	HBRUSH		m_hbrh1;
	HBRUSH		m_hbrh2;
	HPEN		m_hpen1;
	HPEN		m_hpen2;
	HPEN		m_hpen3;
	HPEN		m_hpen4;
	path_t		m_path;
	path_t		m_path2;		
	vector_real_t m_angles;
	vector_real_t m_cosines;
	vector_real_t m_sinuses;
	vector_real_t m_errors;	
	winner		m_winners[3];
	float		m_max_error;	
	unsigned	m_train_cycles;
	mode		m_mode;
	bool		m_update_top_desk;
	bool		m_update_bottom_desk;
	std::basic_string<TCHAR> m_info;
	std::vector<HPEN> m_hpdesk;

public:
	Board(unsigned range);
	~Board();

 DECLARE_WND_SUPERCLASS("Board", CStatic::GetWndClassName());

 BEGIN_MSG_MAP(_Main)	
	MESSAGE_HANDLER(WM_PAINT,		OnPaint)
	MESSAGE_HANDLER(WM_ERASEBKGND,	OnEraseBknd)
	MESSAGE_HANDLER(WM_SIZE,		OnSize)
	MESSAGE_HANDLER(WM_MOUSEMOVE,	OnMouseMove)	
	MESSAGE_HANDLER(WM_RBUTTONDOWN,	OnRButtonDown)
	MESSAGE_HANDLER(WM_RBUTTONUP,	OnRButtonUp)
	MESSAGE_HANDLER(WM_ASYNC_REFRESH, OnAsyncRefresh)
 END_MSG_MAP()

 private:
	LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnEraseBknd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnRButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnRButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnAsyncRefresh(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

	void CreateMemDC(HDC, RECT&);
	void CleanupMemDC();
	void Draw(HDC, RECT&);
	void DrawMemDC();
	void DrawPath(HDC hDC, RECT& rc);
	void DrawGraph(HDC hDC, RECT& rc);
	void DrawWinners(HDC hDC, RECT& rc);
	void DrawStatusInfo(HDC hDC, RECT& rc);
	void DrawTopDesc(HDC hDC, RECT& rc);
	void DrawBottomDesc(HDC hDC, RECT& rc);	
	void DrawVector(HDC, RECT& rc, vector_real_t&);
	bool TransfromPath();
	void Recognize();

 public:
	unsigned StartTraining();
	void UpdateTrainingError (float current_error);
	void UpdateTrainingVector(vector_real_t&);
	void UpdateTrainingWeight(vector_real_t::iterator, vector_real_t::iterator);
	void StopTraining(unsigned);

	void Refresh(bool immediately = false)
	{
		if (GetCurrentThreadId() != GetWindowThreadProcessId(m_hWnd, 0))		
		{
			PostMessage(WM_ASYNC_REFRESH);
			return;
		}
		
		m_refresh = true;
		if (immediately)
		{
			RECT rc;
			GetClientRect(&rc);
			
			HDC hDC = GetDC();
			Draw(hDC, rc);
			ReleaseDC(hDC);
		}
		else
		{
			Invalidate();
			UpdateWindow();
		}		
	}

		
 private:
	 void StartMouseRecord();
	 void AddMouseRecord(POINT);
	 void StopMouseRecord();

	void SetInfoStr(const TCHAR* p) {p ? m_info = p : m_info.erase();}

 public:
	 static vector_to_path(RECT& rc, vector_real_t& vec, path_t& path);	 
};

#endif //_Board_6726ac43_b433_404f_928f_dcb951e922ed

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -