C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь


Не приходит смс уведомление.

 Урок 9. Обработчик щелчка мыши / Lines / Примеры разработки

Игра Lines (Visual C++. MFC)
Урок 9. Обработчик щелчка мыши

Сейчас мы с вами добавим обработчик для щелчка левой кнопкой мыши. Это - самый важный метод в классе CLinesView. Именно благодаря ему программа и будет обращать внимание на действия пользователя (перемещать и уничтожать шарики и т. п.).

Вызовите ClassWizard (Ctrl+W), перейдите на вкладку Message Maps, выберите класс CLinesView в списке Object IDs выберите CLinesView и в списке Messages выберите WM_LBUTTONUP:

ClassWizard

Нажмите на Add Function и затем - на Edit Code:

ClassWizard

В появившейся заготовке для нашего метода напечатайте следующий код:

void CLinesView::OnLButtonUp(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    int x=(int)point.x/24;//координата по горизонтали
    int y=(int)point.y/24;//координата по вертикали
    CString str;//строка с координатами
    static bool bMove;   //щёлкаем ли во второй раз
    static int x0;      //координаты выбранного шарика
    static int y0;
    CLinesDoc* pDoc=GetDocument();
    if(pDoc->m_field[x][y]!=0){//т.е. если щёлкаем на шарике
        bMove=true;
        x0=x;//запоминем выбраный шарик
        y0=y;
    }
    else{//т. е. щелкаем не на шарике
        if(bMove){//если шарик выбран
            if(/*pDoc->IsPath(x0, y0, x, y)*/true){ //ставим временную заглушку,
                                                    //т. е. считаем, что путь всегда существует
                //pDoc->MoveBall(x0, y0, x, y);
                bMove=false;
                //если нет пяти в ряд
                if(/*!pDoc->Is5InLine(x,y,true)*/!false){   //ставим временную заглушку,
                                                            //т. е. считаем, пяти (или более) шариков  в ряд не существует
                    //true-очки прибавляем
                    //смотрим, сколько свободных полей осталось
                    //и кидаем шарики
                    if(pDoc->m_iNumOfRows*pDoc->m_iNumOfRows
                        -pDoc->m_iNumOfBalls>=3){
                        pDoc->Throw3Balls(3);
                    }
                    else{
                        pDoc->Throw3Balls(
                            pDoc->m_iNumOfRows*pDoc->m_iNumOfRows
                            -pDoc->m_iNumOfBalls);
                    }
                    //Проверяем, есть не все ли клетки заняты
                    //Если да, то заканчиваем игру
                    if(pDoc->m_iNumOfRows*pDoc->m_iNumOfRows
                        ==pDoc->m_iNumOfBalls){
                    }
                }
            }
            else{
                MessageBeep(0xFFFFFFFF);
            }
        }
        else{
            MessageBeep(0xFFFFFFFF);
        }
    }
    //показываем в заголовке окна кол-во шариков
    str.Format("%d balls, %d points",
        pDoc->m_iNumOfBalls, pDoc->m_iNumOfPoints);
    SetWindowText(str);
    
    CWnd* wnd = AfxGetApp()->GetMainWnd();
    wnd->SetWindowText(str);
    Invalidate(FALSE);
    
    CView::OnLButtonUp(nFlags, point);
}

В алгоритм вдаваться особенно не будем (комментарии как-то послужат вам для его понимания). Пока только отметим, что некоторые методы у нас закомментированы (например, IsPath, MoveBall или Is5InLine). Это означает, что их у нас пока нет. На последующих уроках мы их введем, тогда и раскомментируем соответствующие места.

Пока же можете просто запустить нашу программу. Выглядеть она будет как и в конце предыдущего шага, только при щелчке на клеточках будет раздаваться звуковой сигнал.