Цитата:
Сообщение от KINGWORLD
Да есть пару идей как это реализовать, но не могу понять где это прописано.
|
В исполняемом файле клиента все это прописано %)
Когда ты нажимаешь ЛКМ, наведя курсор на какой-либо элемент в интерфейсе игры, цикл обработки сообщений главного потока , которому принадлежит окно RF Online, при помощи функций PeekMessage или GetMessage извлекает сообщение WM_LBUTTONDOWN
и в итоге мы получаем такую структуру:
Код:
typedef struct {
HWND hwnd; //хэндл окна RF Online
UINT message; // сообщение WM_LBUTTONDOWN
WPARAM wParam;
LPARAM lParam; // координаты курсора XY
DWORD time;
POINT pt;
} MSG, *PMSG;
далее все эти данные пересылаются оконной процедуре при помощи функции DispatchMessage
оконная процедура имеет вид:
Код:
LRESULT CALLBACK WindowProc(
_In_ HWND hwnd,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
)
{
// тело оконной функции может быть любым, но зачастую это что-то типо:
switch(uMsg)
{
case WM_LBUTTONDOWN: // обработка левого клика
xPos = LOWORD(lParam);
yPos = HIWORD(lParam);
if (xPos == 1 && yPos == 1){
//аткрыть мини карту()
}
else if(xPos == 50 && yPos == 80){
//аткрыть модификатор()
}
//И тд..
break;
case WM_CLOSE:
//закрыть клиент()
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
Конечно, в реале все устроено куда более замысловато, а это лишь грубый пример, чтобы показать как обрабатываются сообщения мышки..