Программирование игр для Windows. Советы профессионала


Функциональное описание программы WarEdit - часть 5


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

§          Размер каждой кнопки;

§          Количество кнопок в столбце и строке;

§          Местоположение первой кнопки;

§          Расстояние между кнопками.

Эта функция будет определять, какая из кнопок нажата. (Вспомните, не существует легкого пути для получения подобных вещей. Мы все должны сделать собственноручно. У нас нет приличного менеджера окон и механизма посылающего нам сообщения при нажатии кнопок. Хотя вы можете попробовать написать его сами, поскольку в мои планы это не входит.) В Листинге 15.2 показана функция, которая обнаруживает нажатие кнопок.

Листинг 15.2. Обнаружение нажатия кнопки.

int Icon_Hit(int хо, int yo, int dx, int dy,

int width, int height,

int num_columns, int num_rows,

int mx, int my)

{

// получая геометрические установки кнопок, эта функция вычисляет,

// по которой из них щелкнули мышью

int row, column, xs,ys,xe,ye;

for (row=0; row<num_rows; row++)

{

// вычислить начало и конец Y-координаты колонки

ys = row*dy + yo;

ye = ys+height;

for(column=0; column<num_columns; column++)

{   

xs = column*dx + xo;

xe = xs+width;

//Проверить, находится ли курсор мыши в области кнопки

if (mx>xs && mx<xe && my>ys && my<ye)

{

return(column + row*num_columns);

} // конец if

} // конец внутреннего цикла

} // конец внешнего цикла                                   

return(-1); // не нажата

} // конец функции

Это все относительно редактора WarEdit. Я предлагаю вам поиграть с программой, чтобы получить представление о ней, прежде чем мы начнем разговор об улучшениях, которые могут быть внесены в редактор.

Наконец, для создания работающей версии WarEdit желательно использовать два объектных файла, называемых GRAPH0.OBJ и MOUSELIB.OBJ. Я предлагаю объединить их в библиотеку и затем связать с WEDIT.C. (Хотя, конечно, вы можете поступать, как вам больше нравится). Как вы понимаете, файл GRAPH0.OBJ получается после трансляции исходников GRAPH0.C и GRAPH0.H, a MOUSELIB.OBJ - из MOUSELIB.C, о котором уже упоминалось ранее.




Начало  Назад  Вперед



Книжный магазин