Создание пользовательских типов сообщений в win32?

Большую часть времени это было бы полезно для ясности и разумно, чтобы сделать, но она не всегда имеет место. Ниже несколько примеров обстоятельств, где импорт модуля мог бы жить в другом месте.

Во-первых, у Вас мог быть модуль с модульным тестом формы:

if __name__ == '__main__':
    import foo
    aa = foo.xyz()         # initiate something for the test

, Во-вторых, у Вас могло бы быть требование для условного импорта некоторого различного модуля во времени выполнения.

if [condition]:
    import foo as plugin_api
else:
    import bar as plugin_api
xx = plugin_api.Plugin()
[...]

существуют, вероятно, другие ситуации, куда Вы могли бы поместить импорт в другие части в коде.

10
задан Community 23 May 2017 в 11:53
поделиться

3 ответа

Да. Просто объявите константу в диапазоне WM_USER, например

#define WM_RETICULATE_SPLINES (WM_USER + 0x0001)

Вы также можете зарегистрировать сообщение по имени с помощью API RegisterWindowMessage.

Затем вы можете отправлять эти сообщения с помощью SendMessage, PostMessage или любого из их вариантов.

15
ответ дан 3 December 2019 в 14:34
поделиться

Ого, давай остановимся и подумаем ...

Прежде всего, сама Windows отправляет сообщения в диапазоне WM_USER + n , поэтому WM_APP был изобретен (я выяснил это на собственном горьком опыте). Но становится еще хуже ... ничто не мешает плохо работающим приложениям транслировать WM_USER + n или WM_APP + n сообщения, и потому что люди украли кристалл бесконечной глупости у Боги, это действительно происходит в реальном мире.

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

Ставка на глупость ваших собратьев - это всегда выигрышная ставка.

Если вам нужна авторитетная информация по этой теме, см. здесь . Нет, это не мой сайт, это сайт Джо Новичка.

16
ответ дан 3 December 2019 в 14:34
поделиться
  • Если вы создали окно класс , вы можете использовать диапазон WM_USER (или WM_APP )
  • Если это не ваш класс, вы можете используйте WM_APP
  • Если вы хотите транслировать сообщение в каждое окно верхнего уровня, зарегистрируйте собственное глобальное сообщение с помощью RegisterWindowMessage
2
ответ дан 3 December 2019 в 14:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: