Software Development/Application Develop

MFC 오목만들기 3_ 마우스 이벤트 받기

huiyu 2014. 2. 1. 21:51

바둑판을 터치하면 색깔 별로 바둑알이 그려지는 이벤트를 만들어보자.


1. 우선 턴을 관리할 bool형 변수를 추가하여 턴을 구분하게 한다.

나중에 true이면 흰색돌, false이면 흑색돌이 그려지게 한다.

 

다이얼로그 대화상자에서 우측버튼을 클릭한 뒤, 변수 추가버튼을 누릅니다.


다음 대화상자가 뜨게 되면, 아래의 내용과 같이 입력해 줍니다.

 

 

메인 다이얼로그에서 우측버튼을 클릭 후 '클래스마법사'에서 '메시지'탭을 선택한다.

여러가지 메시지가 지정되있는 것을 확인할 수 있다. 이중 마우스 왼쪽 이벤트에 대해 작성할 것이니

 'WM_LBUTTONDOWN'을 선택 후 처리기 추가 버튼을 클릭

작성된 OnLButtonDown()함수부분에 다음의 코드를 추가한다.

 

void CMFC_OMOKDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
	//바둑판 위에 마우스 포인터 설정,
	int mouseX = 0, mouseY =0;

	//선과 선의 간격을 20으로 주었기 때문에 좌표값을 구하기 위해 20을 나눠준다.
	mouseX = point.x / 20;
	mouseY = point.y / 20;


	//바둑판을 벗어 낫는지 확인
	if((mouseX<0 || mouseX>=10 || mouseY<0 || mouseY>=10))
		return ;

	//바둑판 위에 돌이 있는지 확인
	if(m_nBoard[mouseY][mouseX]!=0)
		return;

	//배열 상에 자신의 턴에 맞게 바둑알을 넣는다.
	if(m_bTurn == true)
	{
		m_nBoard[mouseY][mouseX] = 1;
	}else
	{
		m_nBoard[mouseY][mouseX] = 2;
	}


	//한번 놓은 뒤에는 턴 교체
	m_bTurn = !m_bTurn;
	CDialogEx::OnLButtonDown(nFlags, point);
}

아직 배열에서 바둑알을 안그렸기 때문에 실행시켜도 바둑알은 보여지지 않는다. 다음 함수 역시 추가하자.

다음 함수는 배열위치에서 어떤바둑알이 있는지 보고 바둑알을 그려주는 함수이다. 다음 함수를 마우스이벤트 할때 마다 실행시켜주면

 

void CMFC_OMOKDlg::DrawStone(void)
{
	CClientDC dc(this);
	int x, y;

	for(y=0; y<10; y++)
	{
		for(x=0; x<10; x++)
		{
			if(m_nBoard[y][x] == 1)
			{
				dc.SelectObject(GetStockObject(WHITE_BRUSH));
				dc.Ellipse(2+20*x, 2+20*y, 18+20*x, 18+20*y);
			}
			else if(m_nBoard[y][x] == 2)
			{
				dc.SelectObject(GetStockObject(BLACK_BRUSH));
				dc.Ellipse(2+20*x, 2+20*y, 18+20*x, 18+20*y);

			}
		}
	}
}

다음과 같이 마우스이벤트를 받는 것을 확인할 수 있다.

 


728x90