Всем привет!
Стоит задача по подключению внешней OLE компоненты, которая передает данные, генерируя событие WM_COPYDATA
Стал думать, как перехватить. Поднял старые темы, в большинстве которых сам же объяснял, что это невозможно. Однако, в классе FormRun нашел интересный метод:installMessageProc
X++:
public int installMessageProc(int message, int handle, str method)
Без описания, но, в общем, понятно все и так: Событие, Дескриптор окна, Метод. Метод тоже должен быть задан в особом формате:
X++:
void CallbackMethod(int hwnd, int message, int wParam, int lParam, int px, int py)
Проверил - действительно, работает!
Создал тестовую форму, в ининте - указал несколько событий, на которые надо реагировать, и два дескриптора: один - на саму форму, второй - на контрол типа Window. А вот потом начинается самое интересное - события она перехватывает, но не все. KEY_DOWN - точно перехватывает.
Стал проверять. А как? Создал клавишу, которая посылает события, используя WinAPI::SendMessage, и, как ни странно, ни на одно из событий даже сама форма - не реагирует. Даже когда посылаешь WM_CLOSE.
Какие будут идеи:
1. Как сгенерировать событие
2. Как сделать так, что бы installMessageProc его перехватил.
Попробуем решить задачу 2003 года?
Форму для проведения экспериментов прилагаю.
Георгий