|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||||||||
Handle of Window in wndProc28.04.2016, 15:39. Показов 1441. Ответов 9
Метки нет (Все метки)
Есть несколько окон, создавались они одним классом, и привязанны к одному обработчику wndproc. Нужно выудить какое из окон присылает команду, например в WM_CREATE.
Изначально делал окна с стилем CHILD и указывал родителем - основное окно приложения, флаг HMENU заполнял статическим числом для каждого окна. Однако задача немного изменилась, и CHILD флаг пришлось убрать, в месте с ним и hwndparent теперь NULL, и вылезла ошибка 1401 (пришлось и HMENU убрать). Раньше работало так:
0
|
|||||||||||
| 28.04.2016, 15:39 | |
|
Ответы с готовыми решениями:
9
Ошибка в window.captureEvents(Event.CLICK); window.onClick= handle; function handle(e) { alert(''); return false; } Как бороться с ошибкой Creating window handle errors in a c sharp application Ошибка Exception EOSError in module .... System error. Code: 1400. Invalid window handle. |
|
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
|
|
| 28.04.2016, 17:53 | |
|
Т.е. в WinProc вам нужно определить что это за окно? Почему просто при создании окна не сохранять хендлы в массив?
Добавлено через 17 минут Т.е. получается делаем массив структур. В структуре два поля, одно поле это хэндл окна (полученный от CreateWindow), другое id по которому окно определяется из WndProc. Как то так.
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||
| 28.04.2016, 18:03 [ТС] | |||
|
Только что тестировал.. Перед вызовом WM_CREATE в функцию попадает ещё 7 сообщений, установка пера, и т.п.. И в момент когда приходит WM_CREATE - его хэндл оказывается равен NULL. (и лишь после обработки WM_CREATE глобальный хэндл принимает значение, т.е. завершается работа функции CreateWindow, кто бы знал что вот так вот это происходит) В общем то пока что единственный выход который я пока что нашёл - кривой, получать GetWindowText, и через него уже выводить сам HWND) В общем получилось то что лишь после обработки WM_CREATE, hDlg (переменная самой wndproc) уже примет правильное значение, ровно как и сам глобальный хэндл. Косяк майкрософтов лишь в том, что в winuser.h они определили номера WM_#### не в том порядке, в котором идёт обработка, т.е. если бы номера предустановки кисти, фона и т.д. были бы меньше чем WM_CREATE, то можно было бы просто обычным номером решить вопрос, но.. мде. Добавлено через 1 минуту
0
|
|||
|
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
|
|
| 28.04.2016, 18:17 | |
|
0
|
|
|
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
|
|
| 28.04.2016, 18:44 | |
|
Используйте сообщение
WM_NCCREATE
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 28.04.2016, 19:17 [ТС] | ||
|
Operok, а толку то? Оно вообще раньше чем WM_CREATE приходит, и точно так же хэндл там НУЛЛ.
В общем косяк.. Нарушение порядка... Надо было им сделать чтоб в NCCREATE - уже назначался hande. Вот он матерриальный мир... создатели не предусмотрели, что перед действием должна быть мысль, которая уже зарождает объект. Ну это так, филосовский отступ)
0
|
||
|
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
|
||
| 28.04.2016, 19:40 | ||
|
0
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||||||
| 28.04.2016, 20:03 [ТС] | |||||||||
Вот интересно, а они в новых версиях винды исправляли такие недостатки? Айди значит не назначиш, WM_AFTERCREATE нету.. Недавно вот нашёл баг, что в одном цикле обработки нельзя ShowWindow много раз к одному окну использовать... Видать там таких багов полно, хоть пиши новые функции для всего этого.. Добавлено через 6 минут Вот кстати возник вопрос, а есть ли что то ещё глубже чем WinApi? Т.е. то на чём оно построено, чтоб напрямую туда капнуть..
0
|
|||||||||
|
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
|
|
| 28.04.2016, 20:22 | |
|
Izual, до сообщения WM_CREATE еще нет handle окна!
Я бы посоветовал сделать по-другому: 1) В WM_CREATE ничего не делаем 2) Получить и сохранить handle окна в массиве после выхода из функции создания окна 3) После создания всех окон, но до показа и обработки очереди сделать всю работу для всех окон (handle всех окон у нас есть) в момент создания. 4) При обработке сообщений ищем окно в массиве handle
1
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 29.04.2016, 09:46 [ТС] | ||
|
... Так и сделал.. Не то чего я хотел, но зато работает. Жаль что нельзя глубже капнуть, в саму очередь сообщений. Может кто подскажет, в QT тоже так же криво всё? (ну QT под windows понятное дело, что тот же самый WinAPI, но именно под линукс может всё чуть логичнее сделано?)
0
|
||
| 29.04.2016, 09:46 | |
|
Помогаю со студенческими работами здесь
10
"Error creating window handle" и ADO.NET WndProc&WndProc Как выбрать окно, если его handle не совпадает с handle процесса? Что означает выражение HANDLE hWritePipe = (HANDLE)atoi(argv[1]); Application.Handle выдает identifier idents no member "Handle", на Дельфи всё работает Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|