Могу ли я отправлять / получать оконные сообщения без окна? - PullRequest
4 голосов
/ 01 июня 2009

Я пишу оболочку .NET вокруг старой библиотеки на основе MFC, которая у нас есть. Он основан на классе, который отправляет уведомления с помощью оконных сообщений; у него есть функция, которая позволяет пользователю передавать дескриптор окна, и это окно будет получать сообщения.

Я мог бы просто потребовать от пользователей моей обёртки подкласса Control и передать дескриптор своего элемента управления для получения сообщений, но это ужасно. Я хочу, чтобы у моего класса-обертки были события, которые срабатывают всякий раз, когда старая библиотека отправляет сообщение, и затем я могу сделать расшифровку сообщения во что-то разумное. Но я не хочу, чтобы мой класс-обертка был элементом управления.

Есть ли способ для меня создать «фиктивный» дескриптор окна и получать сообщения, отправленные на этот дескриптор, без создания окна?

Ответы [ 3 ]

10 голосов
/ 01 июня 2009

Существует концепция MessageOnly Windows , которая может вам помочь. Вы можете создать окно только для внутренних сообщений в вашем классе-обёртке и передать этот дескриптор старой библиотеке.

0 голосов
/ 02 июня 2009

Невозможно создать дескриптор окна, не имея окна, поскольку дескриптор окна равен окну в отношении Windows, но вы можете создать окно без установленного флага WS_VISIBLE и использовать его только для ретрансляции сообщений. Иногда я использую эту технику для связи между потоками в приложениях только для MFC (никому не говорите;)). Вы можете получить класс (c ++) из CWnd, позволить ему обрабатывать сообщения и вызывать функции или испускать сигналы для каждого полученного сообщения. Я думаю, это помогло бы работать с вашим кодом C #, хотя у меня нет опыта в этом.

0 голосов
/ 01 июня 2009

Вы можете попробовать создать тему с пометкой сообщений и отправить на нее свои сообщения. Затем поток вызывает все необходимые события, которые вы хотите обработать в своем коде C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...