Как я могу ввести кнопки мыши в C ++ - PullRequest
0 голосов
/ 09 апреля 2019

Я делаю проект 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;

1 Ответ

0 голосов
/ 10 апреля 2019

Я попробовал ваш код.

Проблема здесь:

problem

Самый простой способ - определить глобальную переменную.

const int Cell_Size = 100;
RECT rc;
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;
}

Наконец вы получите желаемые результаты: debug

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...