Example #1
0
LRESULT NativeWindow::HandleMessages(UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
		case WM_ERASEBKGND:
			return OnEraseBkgnd();
		case WM_TIMER:
			{
				OnTimer((UINT)wParam);
			}
			break;
		case WM_SIZE:
			{
				int cx = LOWORD(lParam);
				int cy = HIWORD(lParam);
				OnSize((UINT)wParam,cx,cy);
			}
			break;
		case WM_GETMINMAXINFO:
			{
				OnGetMinMaxInfo((MINMAXINFO *)lParam);
			}
			break;
		default:
			break;;
	}
	return CallWindowProc(old_window_proc_,hwnd_, message, wParam, lParam);
}
Example #2
0
LRESULT CActiveXWnd::HandleMessage( UINT uMsg, WPARAM wParam, LPARAM lParam, bool &bHandled )
{
   LRESULT lRes = 0;
   bHandled = true;

   switch( uMsg )
   {
   case WM_PAINT:         
	   lRes = OnPaint(uMsg, wParam, lParam, bHandled); 
	   break;
   case WM_SETFOCUS:      
	   lRes = OnSetFocus(uMsg, wParam, lParam, bHandled); 
	   break;
   case WM_KILLFOCUS:     
	   lRes = OnKillFocus(uMsg, wParam, lParam, bHandled);
	   break;
   case WM_ERASEBKGND:    
	   lRes = OnEraseBkgnd(uMsg, wParam, lParam, bHandled); 
	   break;
   case WM_MOUSEACTIVATE: 
	   lRes = OnMouseActivate(uMsg, wParam, lParam, bHandled);
	   break;
   default:
	  bHandled = FALSE;
   }
  
   return lRes;
}
Example #3
0
LRESULT ViewCaption::OnPrintClient(WPARAM wdc, LPARAM flags)
{
	if (CDC* dc= CDC::FromHandle(HDC(wdc)))
		OnEraseBkgnd(dc);

	return 0;
}
Example #4
0
BOOL CLayoutManager::OnWndMsg(UINT message, 
                              WPARAM wParam, LPARAM lParam, 
                              LRESULT * pResult,
			      BOOL bPeek)
{
	int i;
	
	if (! m_bActive)
		return FALSE;

	switch (message)
	{
	case WM_GETMINMAXINFO:
		if (! bPeek)
		{
			MINMAXINFO * pMMI = (LPMINMAXINFO) lParam;
			pMMI->ptMinTrackSize.x = m_dwMinWidth;
			pMMI->ptMinTrackSize.y = m_dwMinHeight;
		}
		break;

	case WM_NCCALCSIZE:
		if (wParam)
			OnNcCalcSize(bPeek, (LPNCCALCSIZE_PARAMS)lParam, pResult);
		break;

	case WM_ERASEBKGND:
		OnEraseBkgnd(bPeek, (HDC)wParam);
		break;

	case WM_SIZE:
		if (! bPeek)
			OnSize(LOWORD(lParam), HIWORD(lParam));
		break;

	case WM_MOVING:
		if (bPeek)
		{
			OnMoving(wParam, (RECT*)lParam); 
			*pResult = TRUE;
			return TRUE;
		}
		break;

	case WM_ENTERSIZEMOVE:
	case WM_EXITSIZEMOVE:
		if (! bPeek)
			break;
		for (i=0; i<m_vControls.size(); i++)
			m_vControls[i].pWnd->SendMessage(message, wParam, lParam);
		break;
	}

	return FALSE;
}
Example #5
0
LRESULT CWidgetAddress::OnPrint(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
TRY_CATCH
	RECT rc;
	GetClientRect(&rc);
	CMemoryDC memDC(reinterpret_cast<HDC>(wParam), rc);
	// Drawing original ComboBox item
	DefWindowProc(WM_PRINT,reinterpret_cast<WPARAM>(memDC.m_hDC),lParam);
	memDC.ExcludeClipRect(rc.left,rc.top,rc.right,rc.bottom);
	return OnEraseBkgnd(hWnd, uMsg,reinterpret_cast<WPARAM>(memDC.m_hDC), lParam, bHandled);
CATCH_THROW()
}
Example #6
0
LRESULT CWidgetAddress::OnPaint(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
TRY_CATCH

	LRESULT res = OnEraseBkgnd(hWnd, uMsg, wParam, lParam, bHandled);

	// Drawing original ComboBox item
	RECT rc;
	GetClientRect(&rc);
	InvalidateRect(&rc, FALSE);
	DefWindowProc(WM_PAINT,wParam,lParam);
	return res;
CATCH_THROW()
}
Example #7
0
LRESULT CActiveXWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    LRESULT lRes=0;
    BOOL bHandled = TRUE;
    switch( uMsg ) {
    case WM_PAINT:         lRes = OnPaint(uMsg, wParam, lParam, bHandled); break;
    case WM_SETFOCUS:      lRes = OnSetFocus(uMsg, wParam, lParam, bHandled); break;
    case WM_KILLFOCUS:     lRes = OnKillFocus(uMsg, wParam, lParam, bHandled); break;
    case WM_ERASEBKGND:    lRes = OnEraseBkgnd(uMsg, wParam, lParam, bHandled); break;
    case WM_MOUSEACTIVATE: lRes = OnMouseActivate(uMsg, wParam, lParam, bHandled); break;
	case WM_MOUSEWHEEL: break;
    default:
        bHandled = FALSE;
    }
    if( !bHandled ) return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
    return lRes;
}
Example #8
0
LRESULT CMainWnd::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	//创建窗口后先发送WM_CREATE消息创建控件,再发送WM_ERASEBKGND消息擦除背景,然后发送WM_SIZE消息调整窗口大小,发送WM_PAINT消息进行重绘
	switch (uMsg)
	{
	case WM_CREATE:
		OnCreate(hWnd, wParam, lParam);
		break;
	case WM_PAINT:
		OnPaint(wParam, lParam);//绘制消息		
		break;
	case WM_ERASEBKGND:
		return OnEraseBkgnd(wParam, lParam);
	case WM_SIZE:
		OnSize(wParam, lParam);//大小改变消息
		break;
	case WM_MOVE:
		GetWindowRect(hWnd, &rtWindow);//获取整个主窗体的窗口矩形
		GetClientRectEx(&rtClient);//获取主窗体客户区的矩形
		break;
	case WM_NOTIFY:
		OnNotify(wParam, lParam);//子窗体通知消息
		break;
	case WM_COMMAND:
		OnCommand(wParam, lParam);//菜单或者按钮控件消息
		break;
	case WM_MENUSELECT:
		OnMenuSelect(wParam, lParam);	//菜单选择消息			
		break;
	case WM_LBUTTONDOWN:
		OnLButtonDown(wParam, lParam);//左键单击消息
		break;
	case WM_LBUTTONDBLCLK:
		OnLButtonDbClick(wParam, lParam);//左键双击消息
		break;
	case WM_RBUTTONDOWN:
		OnRButtonDown(wParam, lParam);//右键单击消息
		break;
	case WM_MOUSEMOVE:
		OnMouseMove(wParam, lParam);//鼠标移动消息
		break;
	case WM_KEYDOWN:
		OnKeyDown(wParam, lParam);//键盘按键消息
		break;
	case WM_TIMER:
		OnTimer(wParam, lParam);//定时器消息
		break;
	case WM_CLOSE:
		OnClose(wParam, lParam);	//关闭窗体消息
		break;//用户点击关闭按钮时,不需要系统来处理
	case WM_DESTROY:
		OnDestroy(wParam, lParam);		//破坏窗体消息
		break;

		//自定义消息
	case GM_NAME://设置引擎名
		SetName((char*)wParam, (int)lParam);
		break;
	case GM_SHOWSTEP://显示着法信息(由其中支持模块发送)
		AppendStepHis((char*)wParam);
		Function::SaveBoardShot();
		Function::SaveChessManual((char*)wParam);
		break;
	case GM_WINLOSE:
		Function::GameStop();
		ShowWiner((int)lParam);
		break;

	default:
		return DefWindowProc(hWnd, uMsg, wParam, lParam);//处理不完全的消息或者其它消息统一由系统处理		
	}
	return 0;
}
Example #9
0
// Basic window proc. It simply forward interesting messages to the appropriate handlers (OnXXX).
// If child class defines this function, it should pass unhandled messages to CFlexWnd.
LRESULT CFlexWnd::WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch (msg)
	{
		case WM_GETFLEXWND:
		{
			if ((LPVOID)lParam == NULL)
				break;

			GETFLEXWNDSTRUCT &gfws = *((FAR GETFLEXWNDSTRUCT *)(LPVOID)lParam);

			switch (gfws.cbSize)
			{
				case sizeof(GETFLEXWNDSTRUCT):
					gfws.bFlexWnd = TRUE;
					gfws.pFlexWnd = this;
					return 0;

				default:
					assert(0);
					break;
			}
			break;
		}

		case WM_CREATE:
		{
			LPCREATESTRUCT lpCreateStruct = (LPCREATESTRUCT)lParam;
			
			LRESULT lr = OnCreate(lpCreateStruct);
			
			if (lr != -1)
				OnInit();

			return lr;
		}

		case WM_INITDIALOG:
		{
			BOOL b = OnInitDialog();
			OnInit();
			return b;
		}

		case WM_TIMER:
			OnTimer((UINT)wParam);
			return 0;

		case WM_ERASEBKGND:
			return OnEraseBkgnd((HDC)wParam);

		case WM_PAINT:
		{
			// Check the update rectangle.  If we don't have it, exit immediately.
			if (typeid(*this) == typeid(CDeviceView) && !GetUpdateRect(m_hWnd, NULL, FALSE))
				return 0;
			PAINTSTRUCT ps;
			HDC	hDC = BeginPaint(hWnd, &ps);
			if (InRenderMode())
				OnRender(TRUE);
			else
				DoOnPaint(hDC);
			EndPaint(hWnd, &ps);
			return 0;
		}

		case WM_COMMAND:
		{
			WORD wNotifyCode = HIWORD(wParam);
			WORD wID = LOWORD(wParam);
			HWND hWnd = (HWND)lParam;
			return OnCommand(wNotifyCode, wID, hWnd);
		}

		case WM_NOTIFY:	
			return OnNotify(wParam, lParam);

		case WM_MOUSEMOVE:
		case WM_LBUTTONDOWN:
		case WM_RBUTTONDOWN:
		case WM_LBUTTONDBLCLK:
		case WM_MOUSEWHEEL:
		{
			POINT point = {int(LOWORD(lParam)), int(HIWORD(lParam))};
			switch (msg)
			{
				case WM_MOUSEMOVE: OnMouseOver(point, wParam); break;
				case WM_LBUTTONDOWN: OnClick(point, wParam, TRUE); break;
				case WM_RBUTTONDOWN: OnClick(point, wParam, FALSE); break;
				case WM_LBUTTONDBLCLK: OnDoubleClick(point, wParam, TRUE); break;
				case WM_MOUSEWHEEL:
				{
					// Send wheel msg to the window beneath the cursor
					HWND hWnd = WindowFromPoint(point);
					CFlexWnd *pWnd = NULL;
					if (hWnd)
					{
						pWnd = GetFlexWnd(hWnd);
						if (pWnd)
							pWnd->OnWheel(point, wParam);
						else
							return DefWindowProc(hWnd, msg, wParam, lParam);
					}
					break;
				}
			}
			return 0;
		}

		case WM_DESTROY:
			OnDestroy();
			m_privhWnd = NULL;
			return 0;
	}

	if (!m_bIsDialog)
		return DefWindowProc(hWnd, msg, wParam, lParam);
	else
		return 0;
}
void CGUIFaceInVideoView::OnDraw(CDC* pDC)
{ 
	CGUIFaceInVideoDoc* pDoc = GetDocument();    

//	CGUIFaceInVideoView* pView = (CGUIFaceInVideoView*)GetActiveView();
//	CGUIFaceInVideoDoc *pDoc = (CGUIFaceInVideoDoc*)pView->GetDocument();
	ASSERT_VALID(pDoc);
	if (pDoc == NULL)
		return;

	CFaceRecognizer *frIds = & pDoc->m_frIds;

// in 24x24 image
// char sWhatValuesToUse[5]; // "011" - don't use I, use dIx, dIy  
// char sHowToCrop[5]; // "22001" - cut from left and right 2 pixels , from top/bottom 0 pixels and scale by 1.
	char 
//		sWhatValuesToUse[]="111", 
		sWhatValuesToUse[]="111", 
		sHowToCrop[]="00001";
	// just remeber: The m_imgY will not be diplayed properly if m_nWidth is not muliple of 4 !

	sHowToCrop[3]='0';

	frIds->initialize(10, sWhatValuesToUse, sHowToCrop);


	CIplImage *pImgIn;
	CvPoint *pPointL, *pPointR;
	int nNameTag, nBestMatch; 
	
	char strMessage[256], str[200], strNameTag[40];
	
/*
	if (frIds->m_nStoredFaces > frIds->m_pinn.m_N / 2) // MAX_FACES - 1 )
	{
		OnDraw_LogWindow(pDC, "Memory is full!", set_window(0,0), 0);
		return;
	}
*/	

// Update all sliders data:

	frIds->m_pinn.m_nNoise = pDoc->m_gui.slider1*frIds->m_pinn.m_N/100; 
	frIds->m_pinn.m_D = pDoc->m_gui.slider2/100.0; 
//Doc->m_memory.m_pinn.m_dFade=1;// 1-pDoc->m_gui.slider3/1000.0;

// ************************************************************************************************
// Show MemoryContents
// ************************************************************************************************


	if (m_nVideoStream == VIDEO_STREAM_CURRENT_FRAME)  // Draw all stored faces
		for(int n=0; n< MIN (frIds->m_nStoredFaces, FR_MAX_FACES); n++) // frIds->m_nStoredFaces
			frIds->m_arrImgStoredFaces[n].draw(pDC->m_hDC, set_faceRect(n));

	if (m_bShowPINN )  // Draw the contents of PINN memory
	{
//		if (m_bShowPINNwell )    
		{

/*			RECT rect;
			rect.left = IMAGE_160*2+2;
			rect.top = 0; 
			rect.right = rect.left + frIds->m_pinn.m_N;
			rect.bottom = rect.top + frIds->m_pinn.m_N;	*/
			frIds->getPINNasImage()->
				draw(pDC->m_hDC, set_window(3,0, 1, 1), false);
		}
//		else
//			frIds->getPINNasImage()->draw(pDC->m_hDC, set_window(4,0, 264), true); //, false);
	}

		
// Clear memory and reset all checks to unchecked
	
	if (pDoc->m_gui.check3)  
	{
		CMainFrame *pMainFrm = (CMainFrame*)GetParentFrame();
		CButton* check = (CButton*)((pMainFrm->GetDlgItem(IDD_DIALOGBAR1))->GetDlgItem(IDC_CHECK2));
		check->SetCheck(BST_UNCHECKED); // back to video mode
		check = (CButton*)((pMainFrm->GetDlgItem(IDD_DIALOGBAR1))->GetDlgItem(IDC_CHECK1));
		check->SetCheck(BST_UNCHECKED);// back to memorization mode
		check = (CButton*)((pMainFrm->GetDlgItem(IDD_DIALOGBAR1))->GetDlgItem(IDC_CHECK3));
		check->SetCheck(BST_UNCHECKED);			
		
		pDoc->m_gui.check1 = false; 
		pDoc->m_gui.check2 = false; 
		pDoc->m_gui.check3 = false; 
		
//		fclose(pDoc->m_fScenario);
//		fclose(pDoc->m_fScenarioTest);

		pDoc->closeFaceList();
		pDoc->openFaceList();
			
		pMainFrm->UpdateData(FALSE);
		
		frIds->destroy();
		OnEraseBkgnd(pDC);
		
		//		pDoc->m_bWorkWithFiles = false;
		OnDraw_LogWindow(pDC, "Memory cleared          ", set_window(1,0), 0);
		
		return;
	}
	

/***************************************************************************************/
/*** Use data from video camera / AVI **************************************************/
/***************************************************************************************/


				
	CPerceptualVisionSystem *pPVS = pDoc->getPVS();
		
	OnDraw_LogWindow(pDC, pPVS->m_strFrameRate, set_window(0,2,1,0), 0);
	
	sprintf(strMessage, "%i: %i (%i) msec        ", pPVS->m_nFrame, pPVS->m_tBetweenFrames, pPVS->m_tBetweenFramesNow);		
	OnDraw_LogWindow(pDC, strMessage, set_window(0,2), 1);
		
	bool bRes = pPVS->initializeNextFrame();
	if (bRes == false)
		return;		// if want to show it but not process it, change it.
	
	pPVS->m_imgIn.draw(pDC->m_hDC, set_window(0,0), false, false);

// Detect up to 1 person and 
//	load the rescaled to 28x28 face of this person into m_face 

	int nFacesDetected = pPVS->m_fd.detectFacesIn(&pPVS->m_imgBW);

	if (nFacesDetected<=0)
		return;
	
	sprintf(strMessage, "%i faced detected", nFacesDetected);		
	OnDraw_LogWindow(pDC, strMessage, set_window(0,2), -2);

	if (nFacesDetected>1)
		OnDraw_LogWindow(pDC, strMessage, set_window(0,1,1,0), 5);
	else
		OnDraw_LogWindow(pDC, "                            ", set_window(0,1,1,0), 5);

	
	pPVS->m_chanColour.updateImages(&pPVS->m_imgIn);// NB: Colour is useless, unless you recompute skin model (like Bradski)

	pPVS->m_chanMotion.updateImages(&pPVS->m_imgIn);
	pPVS->m_chanMotion.compute_dI();
//	pPVS->m_chanMotion.compute_ddI();
	pPVS->m_chanMotion.compute_FG();

	int nFaceRotation;

	for(int nFace=0; nFace<nFacesDetected; nFace++)
//	for(int nFace=0; nFace<1; nFace++)
	{
		CvPoint ptL, ptR; 
		int nEye;

		CFace::fdRect2Eyes(pPVS->m_fd.getLocationOfFace(nFace), &ptL, &ptR, &nEye);

		CvPoint pt00={ptL.x-nEye/2, ptL.y-nEye/2},	pt11={ptR.x+nEye/2, ptR.y+nEye};
		CvRect rect={pt00.x, pt00.y, pt11.x-pt00.x, pt11.y-pt00.y}; 

		cvRectangle(pPVS->m_imgOut.getIplImage(), pt00, pt11, 0xffffaa, 2 );


// Detect rotation - do it later
		nFaceRotation = g_findDominantOrientation(&pPVS->m_imgBW, rect, 5); 	


		ptL.y -= 3.14/180.0*nEye*nFaceRotation;
		ptR.y += 3.14/180.0*nEye*nFaceRotation;
		CFace::draw_Glasses(&pPVS->m_imgOut, ptL, ptR, 0xff00aa);

		sprintf(strMessage, "%3i degrees rotated",  nFaceRotation);		
		OnDraw_LogWindow(pDC, strMessage, set_window(1,2), 5);
////////////////////////////////

		PVI_BLOB blobC1, blobC2, blobM;

		bool resC1 = isThereAnything(&pPVS->m_chanColour.m_imbSkinYCrCb, &rect, &blobC1);
//		bool resC1 = pPVS->m_chanMotion.isThereAnything(&pPVS->m_chanColour.m_imbSkinYCrCb, &rect, &blobC1);
		bool resC2 = isThereAnything(&pPVS->m_chanColour.m_imbSkinUCS, &rect, &blobC2);
		bool resM = isThereAnything(&pPVS->m_chanMotion.m_imbFG, &rect, &blobM);
//		bool resM = pPVS->m_chanMotion.isThereSomething(&pPVS->m_chanMotion.m_imbFG, &rect, &blobM);
						
/*		if ( ! resC1 )
			// ( (blobC1.N > rect0->width) && (blobC1.N > rect0->width) ))
		{
			sprintf(strMessage, "No skin detected" );		
			OnDraw_LogWindow(pDC, strMessage, set_window(1,3), 0);
			return;
		}
		else
		{
			sprintf(strMessage, "Skin detected    " );		
			OnDraw_LogWindow(pDC, strMessage, set_window(1,3), 0);
		}
*/		
		
		if ( !resM )
		{
			sprintf(strMessage, "No motion detected" );		
			OnDraw_LogWindow(pDC, strMessage, set_window(3,3), 0);
			return;
		}
		else
		{
//			sprintf(strMessage, "Motion detected    " );		
//			OnDraw_LogWindow(pDC, strMessage, set_window(3,3), 0);
			break;
		}
	}
	
	// A uzh kakoj iz nih m_face[f] use decide sam	
	int nFaceSelected = nFace-1;

	// Load into a 0th face Selected Face / MUST PASS pPVS->m_imgBW image not Colour image !!
	pPVS->m_face[0].loadFace(&pPVS->m_imgBW, pPVS->m_fd.getLocationOfFace(nFaceSelected), nFaceRotation); 
		
			

	frIds->loadVectorsFromFace(& pPVS->m_face[0]);
//	Maybe I should just : frIds->loadVectorsFromFace(&pPVS->m_imgBW, pPVS->m_fd.getLocationOfFace(nFaceSelected));
	


	cvRectangle(pPVS->m_face[0].m_imgFaceDetected.getIplImage(), 
		cvPoint( 2+a2i( frIds->m_sItoCrop[0] ),2+a2i( frIds->m_sItoCrop[1] ) ), 
		cvPoint( 26-a2i( frIds->m_sItoCrop[2] ), 26-a2i( frIds->m_sItoCrop[3] ) ), 
		0xffffaa, 2 );

	pPVS->m_face[0].m_imgFaceDetected.draw(pDC->m_hDC, 
		set_window(0,1, 2*pPVS->m_face[0].m_imgFaceDetected.getWidth(),0,0)); 

	if (!m_bTraceMode)
	{

/*	frIds->m_imgNewFace.draw(pDC->m_hDC, set_window(4,1, 24*3));
	frIds->m_imgQueryFace.draw(pDC->m_hDC, set_window(4,1, 24*3, 1,0));
*/
	frIds->getSasImage(frIds->m_S, 0)->draw(pDC->m_hDC, set_window(1,1, 60));
	frIds->getSasImage(frIds->m_S, 1)->draw(pDC->m_hDC, set_window(2,1, 60));
	frIds->getSasImage(frIds->m_S, 2)->draw(pDC->m_hDC, set_window(3,1, 60));

	frIds->getYasImage(frIds->m_Y, 0)->draw(pDC->m_hDC, set_window(1,1, 60, 1,0));
	frIds->getYasImage(frIds->m_Y, 1)->draw(pDC->m_hDC, set_window(2,1, 60, 1,0));
	frIds->getYasImage(frIds->m_Y, 2)->draw(pDC->m_hDC, set_window(3,1, 60, 1,0));
	}

		
	pPVS->m_imgOut.draw(pDC->m_hDC, set_window(1,0), false, false);
	pPVS->m_chanColour.m_imbSkinYCrCb.draw(pDC->m_hDC, set_window(0,3)); 	
	pPVS->m_chanColour.m_imbSkinUCS.draw(pDC->m_hDC, set_window(1,3)); 
	pPVS->m_chanMotion.m_imbFG.draw(pDC->m_hDC, set_window(2,3)); 
	pPVS->m_chanMotion.m_imb_dI.draw(pDC->m_hDC, set_window(3,3)); 
//	pPVS->m_chanMotion.m_imb_ddI.draw(pDC->m_hDC, set_window(4,3)); 


	nNameTag = pDoc->m_gui.slider4;//-1;

// ************************************************************************************************

	if (!pDoc->m_gui.check_start)  // It has to be checked to start the process
		return;
	
//NB:  frIds->m_pinn.m_dFade, frIds->m_pinn.m_D zadautsq by sliders; !!!
		frIds->m_pinn.m_D = 1.0;


#if 1 // later

// ************************************************************************************************
	if (pDoc->m_gui.check1 == false)  // memorize
// ************************************************************************************************
	{
		bool bStoreOnDisk = m_bTraceMode;

		// use  every Nth frame
		if (pDoc->m_PVSystem.m_nFrame % (pDoc->m_gui.slider2+1) != 0)
		{
			sprintf(strMessage, "... skipped (%i/%i)   ", 
				pDoc->m_PVSystem.m_nFrame % (pDoc->m_gui.slider2+1), pDoc->m_gui.slider2+1);
			OnDraw_LogWindow(pDC, strMessage, set_window(0,1), 5);
			return;
		}


//	frIds->LoadID(nNameTag);
		frIds->setIDto1(nNameTag);

		int res = frIds->m_pinn.putInMemory(frIds->m_Y);
//** 
//		nn->MemorizeV_as(nNameTag);

		frIds->m_arrImgStoredFaces[frIds->m_nStoredFaces++ % FR_MAX_FACES].copy(&pPVS->m_face[0].m_imgFaceDetected);


//		if (m_bShowPINNwell )    
		{
			frIds->m_pinn.analyzeMemory();

			sprintf(strMessage,  "Brain model: N=%i D=%4.2f,  C: %4.2f %4.2f %4.2f", 
			 frIds->m_pinn.m_N,	frIds->m_pinn.m_D, 
			 frIds->m_pinn.m_dAveCii, frIds->m_pinn.m_dAveCij2, frIds->m_pinn.m_dAveAbsCij2);
		}
/*		else
			sprintf(strMessage,  "Brain model: N=%i", 
			 frIds->m_pinn.m_N,	frIds->m_pinn.m_D, 
			 frIds->m_pinn.m_dAveCii, frIds->m_pinn.m_dAveCij2, frIds->m_pinn.m_dAveAbsCij2);
*/	
		OnDraw_LogWindow(pDC, strMessage, set_window(2,0,2,0), 0);

		sprintf(strMessage,"Memorize: ID=%i, E:%.1f    ", 
			nNameTag, frIds->m_pinn.m_E); // %s,  strNameTag,
		OnDraw_LogWindow(pDC, strMessage, set_window(2,0), 1);

		if (res==0)
			sprintf(strMessage, " similar face already memorized");
		else
			sprintf(strMessage, " face memorized (#%i) !        ", frIds->m_pinn.m_M); // frIds->m_nStoredFaces-1);

		OnDraw_LogWindow(pDC,strMessage, set_window(2,0), 2);
//		for(int i=2;i<=20;i++)
//			OnDraw_LogWindow(pDC, "                                   ", set_window(1,0,0,1), i+2);				


		if ( (! pDoc->m_gui.check2) && (! pDoc->m_gui.check_nonstop )) // i.e. from video
		{
			// Uncheck checkbox (switch to recognition mode)
			CMainFrame *pMainFrm = (CMainFrame*)GetParentFrame();
			CButton* check = (CButton*)((pMainFrm->GetDlgItem(IDD_DIALOGBAR1))->GetDlgItem(IDC_CHECK1));
			check->SetCheck(BST_CHECKED);
			pDoc->m_gui.check1 = true; 
			pMainFrm->UpdateData(FALSE);
		}

	}
// ************************************************************************************************
	else  // recognize
// ************************************************************************************************
	{
		//		frIds->m_imgQueryFace.draw(pDC->m_hDC, set_window(0,1));
		//		OnDraw_LogWindow(pDC, "Stimulus", set_window(0,1), 0);
		
// move this line to memorization! Nope... it does not work this way...
		frIds->m_pinn.setMemoryToDormantState();

// Influence of past history

//		for(int k=0; k<pDoc->nLastFrameIDs; k++)
//			frIds->setIDto1(pDoc->nLastFrameID[k]);  // this is too much influence/
		
		//** we should 
		//** frIds->setYofID(pDoc->nLastFrameID[k], 0.15);


		frIds->m_pinn.retrieveFromMemory(frIds->m_Y, &frIds->m_Y);
//		frIds->m_pinn.retrieveFromMemory();
		
			
		nNameTag = 0;
		
		char word[5][100], strY[100]="", strS[100]="    ";
		int nPosY=0;
		strcpy(word[4],"");

		pDoc->nLastFrameIDs=0;

		for(int i=0; i<frIds->m_nIDs; i++)
		{
			int nY = frIds->getYofID(i);
//			sprintf (word[1], "%+1i", (i+1)*nY);

			if (nY > 0)
			{
				sprintf (word[1], "1 ", (i+1)*nY);

				sprintf (word[2], "*%2.0f", (frIds->getSofID(i))*10); //
				nPosY++;
				pDoc->nLastFrameID[ pDoc->nLastFrameIDs++ ] = i; 
				sprintf (word[3], "%i ", i);

				strcat(word[4], word[3]);
			}
			else
			{
				sprintf (word[1], "_ ", (i+1)*nY);
//				sprintf (word[2], " ");
				sprintf (word[2], " %2.0f", ((-1)*frIds->getSofID(i))*10);
			}
			strcat(strY, word[1]);
			strcat(strS, word[2]);
		}
		OnDraw_LogWindow(pDC, word[4], set_window(0,0), 0);
		sprintf(strMessage, "Neural response: %s    ",word[4]);
		OnDraw_LogWindow(pDC, strMessage, set_window(1,0), 0);
			
		sprintf(strMessage, "  It=%i, E=%3.0f   ",
			frIds->m_pinn.m_nIter, frIds->m_pinn.m_E);
		OnDraw_LogWindow(pDC, strMessage, set_window(1,0), 1);
//		OnDraw_LogWindow(pDC, strY, set_window(1,0), 1);
//		OnDraw_LogWindow(pDC, strS, set_window(3,3,1,0), 1);

		
		int nStack= pDoc->m_gui.slider1+1;  

/*		for(i=0;i<nStack;i++)
		{
			strcpy(pDoc->sStackY[i],""); 
			strcpy(pDoc->sStackS[i],""); 
		}
*/		strcpy(pDoc->sStackY[nStack],strY); 
		strcpy(pDoc->sStackS[nStack],strS); 

// nNameTag !!!!!!!!!!! decode and display!

		int nResConsistent=0;
//		int nTagOverTime = nNameTag;
//			char sTags[30];
//			char sTagsNum[11];
//			int nIDs=0;

		for(i=1;i<=nStack;i++)
		{
//			if (pDoc->nStack[i-1]==pDoc->nStack[i]) // nBestMatch)  
//				nResConsistent ++;

			pDoc->nStack[i-1]=pDoc->nStack[i];
			strcpy(pDoc->sStackY[i-1],pDoc->sStackY[i]); 
			strcpy(pDoc->sStackS[i-1],pDoc->sStackS[i]); 

			sprintf(strMessage, "%s  ", pDoc->sStackY[i-1]); // pDoc->nStack[i-1]);
			OnDraw_LogWindow(pDC, strMessage, set_window(1,0), i+1);

			if (m_bShowPINNwell )    
			{
				sprintf(strMessage, "%s ", pDoc->sStackS[i]); // pDoc->nStack[i-1]);
				OnDraw_LogWindow(pDC, strMessage, set_window(2,0), i+1);
			}

		}
			

		for(i;i<=20;i++)
		{
			OnDraw_LogWindow(pDC, "                                      ",  set_window(1,0), i+1);				
			OnDraw_LogWindow(pDC, "                                      ",  set_window(2,0), i+1);
		}
		
		
//		if (m_bTraceMode)
		{
			frIds->getSasImage(frIds->m_pinn.m_S, 0)->draw(pDC->m_hDC, set_window(1,1, 24*3, 0,1));
			frIds->getSasImage(frIds->m_pinn.m_S, 1)->draw(pDC->m_hDC, set_window(2,1, 24*3, 0,1));
			frIds->getSasImage(frIds->m_pinn.m_S, 2)->draw(pDC->m_hDC, set_window(3,1, 24*3, 0,1));
			
			frIds->getYasImage(frIds->m_Y, 0)->draw(pDC->m_hDC, set_window(1,1, 24*3, 1,1));
			frIds->getYasImage(frIds->m_Y, 1)->draw(pDC->m_hDC, set_window(2,1, 24*3, 1,1));
			frIds->getYasImage(frIds->m_Y, 2)->draw(pDC->m_hDC, set_window(3,1, 24*3, 1,1));
		}	
		
	}  // end of recognition

	
#endif


// ************************************************************************************************
// end of memorization/recognition
// ************************************************************************************************

// ************************************************************************************************

	pDoc->m_bWorkWithFiles = false;
		
	if (m_bTraceMode == true && pDoc->m_gui.check2)  // if scenario, wait to continue			
//		AfxMessageBox("Next", MB_OK);
		if (MessageBox("Proceed to next face?",NULL,MB_OKCANCEL) != IDOK)
			exit(1);	
//	strcpy(pDoc->m_input.strFile1,"");  
}