Показать сообщение отдельно
Старый 10.09.2016, 19:57  
Dino
Проф. продавец
Аватар для Dino
OFFLINE
Регистрация: 23.07.2012
Сообщений: 2,402
Благодарностей:
894 всего
Мнения: + 4271
Репутация: 2680

Цитата:
Сообщение от 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;
}
Конечно, в реале все устроено куда более замысловато, а это лишь грубый пример, чтобы показать как обрабатываются сообщения мышки..

Последний раз редактировалось Dino; 10.09.2016 в 21:44.
 
Ответить с цитированием
Сказали спасибо:
KINGWORLD (10.09.2016)