![]() |
![]() |
|
|
|
|
|
Usted ha votado: Pobre
Antes de continuar debemos definir algunas variables que nos ayudarán a manipular los eventos, estas variables deben definirse dentro de la clase CAjedrezView para tenerlas disponibles en todo momento.
class CAjedrezView : public CView
{
...
POINT m_celdaSel;
POINT m_celdaCursor;
bool m_bFichaSeleccionada;
bool m_bTurnoBlancas;
...
}
Algunas aclaraciones sobre las variables:
Para activar el uso del Mouse solo tenemos que hacer clic en las propiedades de la clase CAjedrezView y buscar los eventos WM_MOUSEMOVE y WM_LMOUSEDOWN, opcionalmente también utilizaremos el evento WM_KEYDOWN para interceptar la tecla de escape.

Agregar Función OnMouseMove
La función OnMouseMove, esta función nos ayudará a identificar la celda sobre la cual esta el puntero del Mouse. La secuencia del código fuentes es como sigue:
Sin tantas complicaciones podemos escribir este codigo para el algoritmo anterior:
void CAjedrezView::OnMouseMove(UINT nFlags, CPoint point)
{
static int x = -1;
static int y = -1;
x = (point.x - MARGEN)/60;
y = (point.y - MARGEN)/60;
if(x >= 0 && y >= 0 && x<8 && y<8)
{
if(x != m_celdaCursor.x || y != m_celdaCursor.y )
{
m_celdaCursor.x = x;
m_celdaCursor.y = y;
Invalidate();
}
}
else
{
x=-1;
y=-1;
if(x != m_celdaCursor.x || y != m_celdaCursor.y )
{
m_celdaCursor.x = -1;
m_celdaCursor.y = -1;
Invalidate();
}
}
CView::OnMouseMove(nFlags, point);
}
La función OnLButtonDown (Al presional el boton izquierdo del mouse) , se hace la misma verificación de las coordenadas pero esta vez se invoca a la función MoverFicha, La función MoverFicha la veremos mas adelante.
void CAjedrezView::OnLButtonDown(UINT nFlags, CPoint point)
{
static int x = -1;
static int y = -1;
x = (point.x - MARGEN)/60;
y = (point.y - MARGEN)/60;
if(x >= 0 && y >= 0 && x<8 && y<8)
{
MoverFicha(x,y);
}
CView::OnLButtonDown(nFlags, point);
}
Debemos agregar líneas de código a la función DibujarTablero para ver los efectos:
void CAjedrezView::DibujarTablero(CDC* pDC)
{
...
for(int i = 0 ; i < CELDAS ; i++)
{
for(int j = 0 ; j < CELDAS ; j++)
{
...
if(m_celdaSel.x == j && m_celdaSel.y == i)
{
CBrush *pFondoAnterior = pDC->SelectObject(&brSeleccion);
pDC->Rectangle(&rcCelda);
pDC->SelectObject(pFondoAnterior);
}
...
}
}
if(m_celdaCursor.x >= 0 && m_celdaCursor.y >= 0)
{
rcCelda.left = m_celdaCursor.x*TAMCELDA + MARGEN;
rcCelda.top = m_celdaCursor.y*TAMCELDA + MARGEN;
rcCelda.right = rcCelda.left + TAMCELDA;
rcCelda.bottom = rcCelda.top + TAMCELDA;
CPen *pAnterior = pDC->SelectObject(&penAmarillo);
pDC->MoveTo(rcCelda.left,rcCelda.top);
pDC->LineTo(rcCelda.right,rcCelda.top);
pDC->LineTo(rcCelda.right,rcCelda.bottom);
pDC->LineTo(rcCelda.left,rcCelda.bottom);
pDC->LineTo(rcCelda.left,rcCelda.top);
pDC->SelectObject(pAnterior);
}
pDC->SelectObject(penAnterior);
}
![]() | Dibujar las piezas de ajedrez | Funciones generales para mover las piezas de ajedrez |
|
![]() |
![]() |
|||
Comentarios y Consultas
|
||||
![]() |
![]() |