Для "обнаружения" курсора в нужной нам позиции опишем функцию:
Код HTML:
BOOL cRender::IsInBox(int x,int y,int w,int h)
{
POINT MousePosition;
GetCursorPos(&MousePosition);
ScreenToClient(GetForegroundWindow(),&MousePosition);
return(MousePosition.x >= x && MousePosition.x <= x + w && MousePosition.y >= y && MousePosition.y <= y + h);
}
в класс cRender пишем прототип:
Код HTML:
BOOL IsInBox(int x,int y,int w,int h);
Для работы с кнопками можно использовать метод GetAsyncKeyState(Байт_код), но с ней иногда бывают проблеммы(залипание, фантомное срабатывание иногда просто не действует), поэтому опишем свою функцию.
Прототип:
Код HTML:
BOOL State_Key(int Key,DWORD dwTimeOut);
Key - байт код клавиши
dwTimeOut - время до возможности повторного действия в Мсек(не совсем точное определение)
Вне класса cRender определим структуру:
Код HTML:
static struct _Keys
{
bool bPressed;
DWORD dwStartTime;
}kPressingKeys[256];
Сама функция выглядит так:
Код HTML:
BOOL cRender::State_Key(int Key,DWORD dwTimeOut)
{
if(HIWORD(GetKeyState(Key)))
{
if(!kPressingKeys[Key].bPressed || (kPressingKeys[Key].dwStartTime && (kPressingKeys[Key].dwStartTime + dwTimeOut) <= GetTickCount()))
{
kPressingKeys[Key].bPressed = TRUE;
if( dwTimeOut > NULL )
kPressingKeys[Key].dwStartTime = GetTickCount();
return TRUE;
}
}
else
kPressingKeys[Key].bPressed = FALSE;
return FALSE;
}