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

📄 setboundary.cpp

📁 FIRA 3对3 机器人足球PC端控制程序。
💻 CPP
字号:
//////////////// ROBOT SOCCER PROGRAM //////////////////
//////////////// By Kim Heung Soo     //////////////////
//////////////// IC Lab. 98. 8. 2.    //////////////////

// SetBoundary.cpp : implementation file
//

#include "stdafx.h"
#include "Vision.h"
#include "SetBoundary.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSetBoundary dialog


CSetBoundary::CSetBoundary(CWnd* pParent /*=NULL*/)
	: CDialog(CSetBoundary::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSetBoundary)
	m_sTop = _T("");
	m_sLeft = _T("");
	m_sRight = _T("");
	m_sBottom = _T("");
	//}}AFX_DATA_INIT
}


void CSetBoundary::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSetBoundary)
	DDX_Control(pDX, IDC_TOP_SCROLLBAR, m_Top_Scrollbar);
	DDX_Control(pDX, IDC_RIGHT_SCROLLBAR, m_Right_Scrollbar);
	DDX_Control(pDX, IDC_LEFT_SCROLLBAR, m_Left_Scrollbar);
	DDX_Control(pDX, IDC_BOTTOM_SCROLLBAR, m_Bottom_Scrollbar);
	DDX_Text(pDX, IDC_TOP_STATIC, m_sTop);
	DDX_Text(pDX, IDC_LEFT_STATIC, m_sLeft);
	DDX_Text(pDX, IDC_RIGHT_STATIC, m_sRight);
	DDX_Text(pDX, IDC_BOTTOM_STATIC, m_sBottom);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSetBoundary, CDialog)
	//{{AFX_MSG_MAP(CSetBoundary)
	ON_WM_HSCROLL()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSetBoundary message handlers

BOOL CSetBoundary::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	
	char sPos[25];
	
	m_Top_Scrollbar.SetScrollRange(0,DispSizeY-1);
	m_Left_Scrollbar.SetScrollRange(0,DispSizeX-1);
	m_Bottom_Scrollbar.SetScrollRange(0,DispSizeY-1);
	m_Right_Scrollbar.SetScrollRange(0,DispSizeX-1);
	
	m_Top_Scrollbar.SetScrollPos(rect.top);
	m_Left_Scrollbar.SetScrollPos(rect.left);
	m_Bottom_Scrollbar.SetScrollPos(rect.bottom);
	m_Right_Scrollbar.SetScrollPos(rect.right);
		
	itoa(m_Top_Scrollbar.GetScrollPos(),sPos,10);
	m_sTop = sPos;
	itoa(m_Left_Scrollbar.GetScrollPos(),sPos,10);
	m_sLeft = sPos;
	itoa(m_Bottom_Scrollbar.GetScrollPos(),sPos,10);
	m_sBottom = sPos;
	itoa(m_Right_Scrollbar.GetScrollPos(),sPos,10);
	m_sRight = sPos;
	UpdateData(FALSE);

	CreateOverlayImage();

	SetTimer(1, 1000, NULL);			

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CSetBoundary::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	long nID, index;		
	int value;

	nID	= GetWindowLong(pScrollBar->m_hWnd, GWL_ID);		
	index = nID-IDC_TOP_SCROLLBAR;
	switch(index){
	case 0:                                
   		value = atoi((const char *)m_sTop);  	
		break;     
	case 1:                                
   		value = atoi((const char *)m_sLeft);	
		break;     
	case 2:                                
   		value = atoi((const char *)m_sBottom);  	  	
		break;     
	case 3:                                
   		value = atoi((const char *)m_sRight);  	  	
		break;     
	}	

	switch(nSBCode){                         
	case SB_LINEDOWN:
		value += 1; 
		break;
	case SB_LINEUP:   
		value += -1;
		break;
	case SB_PAGEDOWN:                               
		value += 5;
		break;						
	case SB_PAGEUP:                                                                                         
		value += -5;
		break;						                                  
	case SB_BOTTOM:
		value = 0;
		break;
	case SB_TOP:     
		value = 255;
		break;
	case SB_THUMBTRACK:
	case SB_THUMBPOSITION:
		value = nPos;
		break;																				
	default:						          
		CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
		return;
	}
	if(index == 0 || index == 2){
		if(value > DispSizeY-1)     
			value = DispSizeY-1;
		else if(value < 0)
			value = 0;
	}
	else{
		if(value > DispSizeX-1)     
			value = DispSizeX-1;
		else if(value < 0)
			value = 0;
	}
		
	pScrollBar->SetScrollPos(value); 
	SetDlgItemInt(nID, value, FALSE);		 	                   				

	char tmp[25];
	sprintf(tmp, "%d", value); 
	switch(index){
	case 0:                                
    	m_sTop = tmp; 
		rect.top = value;
    	break;
	case 1:                
		m_sLeft = tmp; 
		rect.left = value;
    	break;
	case 2:                
		m_sBottom = tmp; 
		rect.bottom = value;
    	break;
	case 3:                
		m_sRight = tmp; 
		rect.right = value;
    	break;
	}                 
	UpdateData(FALSE);
		
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}


void CSetBoundary::CreateOverlayImage()
{
	/* Prepare overlay buffer. */
	/* Disable overlay display while preparing the data. */
	MdispControl(MilDisplayId, M_WINDOW_OVR_SHOW, M_DISABLE);
	/* Enable writing Overlay graphics on top of display buffer. */
	MdispControl(MilDisplayId, M_WINDOW_OVR_WRITE, M_ENABLE);
	/* Inquire the Overlay buffer associated with the displayed buffer. */
	MdispInquire(MilDisplayId, M_WINDOW_OVR_BUF_ID, &MilOverlayImage);
	/* Inquire the current keying color. */
	MdispInquire(MilDisplayId, M_KEY_COLOR, &TransparentColor);
	/* Clear the overlay buffer with the keying color. */
	MbufClear(MilOverlayImage, TransparentColor); 
	/* Enable the overlay display. */
	MdispControl(MilDisplayId, M_WINDOW_OVR_SHOW, M_ENABLE);
	/* Inquire MilOverlayImage size x and y. */
	ImageWidth  = MbufInquire(MilOverlayImage,M_SIZE_X,M_NULL);
	ImageHeight = MbufInquire(MilOverlayImage,M_SIZE_Y,M_NULL);

	/* Set graphic text to transparent background. */
//	MgraControl(M_DEFAULT, M_BACKGROUND_MODE, M_TRANSPARENT);


	/* Create a child buffer on the green component for drawing. */
	MbufChildColor(MilOverlayImage, M_GREEN , &MilOverlayImageGreen);
    /* Set drawing color to maximum intensity for green. */
	MgraColor(M_DEFAULT, 255);
	/* Print a string in the green component overlay image buffer. */
	MgraFont(M_DEFAULT, M_FONT_DEFAULT_LARGE);
    MgraText(M_DEFAULT, MilOverlayImageGreen, ImageWidth/2-180, ImageHeight/2-5, "Adjust the Border of Field");
	MgraFont(M_DEFAULT, M_FONT_DEFAULT);
}

void CSetBoundary::DestroyOverlayImage()
{
	// Free the child buffer.
	MbufFree(MilOverlayImageGreen);
	// Disable the overlay display. 
	MdispControl(MilDisplayId, M_WINDOW_OVR_SHOW, M_DISABLE);
	// Disable writing Overlay graphics on top of display buffer.
	MdispControl(MilDisplayId, M_WINDOW_OVR_WRITE, M_DISABLE);

}

BOOL CSetBoundary::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	KillTimer(2);

	DestroyOverlayImage();
	
	return CDialog::DestroyWindow();
}

void CSetBoundary::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	switch(nIDEvent) {
	case 1 :
			KillTimer(1);
			SetTimer(2, 1000, NULL);
	case 2 :
						
		MbufClear(MilOverlayImage, TransparentColor);
		
		MbufControl(MilOverlayImage, M_WINDOW_DC_ALLOC, M_DEFAULT);
		CDC NewDC;
		NewDC.Attach((HDC)MbufInquire(MilOverlayImage, M_WINDOW_DC, M_NULL));
		int nSaveDC = NewDC.SaveDC();
		CPen objPen;
		objPen.CreatePen(PS_SOLID, 2, RGB(0,0,255));
		NewDC.SelectObject(&objPen);
		CBrush objBrh;
		objBrh.CreateHatchBrush(HS_DIAGCROSS, RGB(0,0,255));
		NewDC.SelectObject(&objBrh);
		NewDC.SetBkMode(TRANSPARENT);
		NewDC.SetROP2(R2_COPYPEN);
		
		NewDC.Rectangle(rect.left, rect.top, rect.right, rect.bottom);
		
		NewDC.RestoreDC(nSaveDC);
		objPen.DeleteObject();   
		objBrh.DeleteObject();
		NewDC.Detach();

		char tmp[30];
		sprintf(tmp, "%d x %d", (rect.right-rect.left), (rect.bottom-rect.top));
		MgraText(M_DEFAULT, MilOverlayImageGreen, 10, 5, tmp);

		MbufControl(MilOverlayImage, M_WINDOW_DC_FREE, M_DEFAULT);
		
		break;
	}
	
	CDialog::OnTimer(nIDEvent);
}

⌨️ 快捷键说明

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