Я делаю проект Tic Tac Toe на c ++ просто для удовольствия, и я выполнил часть создания игровой доски.
Я хочу ввести, где пользователь нажимает, чтобы я мог правильно отобразить «Пометить». Чтобы проверить мой код, я попытался показать номер ячейки (1,2,3 ...). Всякий раз, когда я нажимаю вне доски, она должна показывать -1
.
НО ВМЕСТО показывает -1
везде (внутри и снаружи).
Ниже приведена часть моего кода, который я написал. Полный код можно найти на https://pastebin.com/dEQvRdhz
const int Cell_Size = 100;
BOOL GetBoard(HWND hwnd, RECT *pRect) {
RECT rc;
if (GetClientRect(hwnd, &rc)) {
int *ptr;
int width = rc.right - rc.left;
int height = rc.bottom - rc.top;
rc.left = (width - Cell_Size * 3) / 2;
rc.top = (height - Cell_Size * 3) / 2;
rc.right = (rc.left + Cell_Size * 3);
rc.bottom = (rc.top + Cell_Size * 3);
return TRUE;
} SetRectEmpty(pRect);
return FALSE;
}
int GetMousePoint(HWND hwnd,int x, int y)
{
POINT pt = { x, y };
RECT rc;
if (GetBoard(hwnd,&rc ))
{
if (PtInRect(&rc, pt))
{
x = pt.x - rc.left;
y = pt.y - rc.top;
int column = x / Cell_Size;
int row = y / Cell_Size;
return column+row;
}
}return -1;
}
case WM_LBUTTONDOWN:
{
int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
int index = GetMousePoint(hWnd,xPos, yPos);
HDC hdc = GetDC(hWnd);
if (NULL != hdc) {
WCHAR temp[100];
wsprintf(temp,L"Index = %d",index );
TextOut(hdc, xPos, yPos, temp, lstrlen(temp));
ReleaseDC(hWnd, hdc);
}
}
break;
case WM_GETMINMAXINFO:
{
MINMAXINFO * pMinMax = (MINMAXINFO*)lParam ;
pMinMax->ptMinTrackSize.x = Cell_Size * 5;
pMinMax->ptMinTrackSize.y = Cell_Size * 5;
}
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
RECT rc;
if (GetClientRect(hWnd, &rc)) {
int *ptr;
int width = rc.right - rc.left;
int height = rc.bottom - rc.top;
rc.left = (width - Cell_Size * 3) / 2;
rc.top = (height - Cell_Size * 3) / 2;
rc.right = (rc.left + Cell_Size * 3);
rc.bottom = (rc.top + Cell_Size * 3);
Rectangle(hdc, rc.left, rc.top, rc.right, rc.bottom);
Rectangle(hdc, rc.left, rc.top+Cell_Size, rc.right, rc.top+Cell_Size*2);
Rectangle(hdc, rc.left+Cell_Size, rc.top , rc.left+Cell_Size*2, rc.bottom);
Rectangle(hdc, rc.left + Cell_Size, rc.top + Cell_Size, rc.left + Cell_Size * 2, rc.top + Cell_Size * 2);
}
EndPaint(hWnd, &ps);
}
break;