📄 setboundary.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 + -