Вы можете отправить WM_NCHITTEST
в это окно. Возвращаемое значение будет соответствовать типу объекта по запрошенным координатам.
Примерно так:
bool IsMouseOverMaxBtn(HWND hWnd)
{
POINT pt;
VERIFY(GetCursorPos(&pt)); // get mouse position
int retVal = SendMessage(hWnd, WM_NCHITTEST, 0, MAKELONG(pt.x, pt.y));
return HTMAXBUTTON == retVal;
}
Edit:
Вы можете отправить это сообщение в любое окно (не обязательно принадлежащее вашей теме / процессу). Поскольку указатели не задействованы (например, строковые указатели) - проблем нет.
Однако следует помнить, что отправка (а не публикация) сообщения в окне, принадлежащем другому потоку, является довольно сложной операцией, во время которой ваш поток приостанавливается. Может даже случиться ситуация, когда ваш поток зависает, потому что поток приложения, обслуживающего это окно, зависает.
Вы можете использовать SendMessageTimeout
, чтобы гарантировать, что ваша нить не зависнет.