Конференция "WinAPI" » Как принять сообщения в класс без окна?
 
  • dmk © (22.03.17 18:28) [20]
    >NoUser ©   (22.03.17 18:25) [19]

    Ну зачем извращать. Речь шла об оконной процедуре.
  • Игорь Шевченко © (22.03.17 19:16) [21]
    dmk ©   (22.03.17 13:15) [6]


    > Мне надо им петлю сообщений вставить. Чтобы они WM_MOUSE.
    > .... получали. Вроде как компоненты, но окна они не имеют.
    >


    OpenGL уже изобретен и даже с исходниками. И всякие там GLScene тоже с исходниками. Не понимаю, зачем при таком изобилии готовых решений изобретать велосипеды которые будут ехать медленно и неровно.
  • dmk © (22.03.17 19:50) [22]
    Игорь, патриотизм штука заразная. Хочу свое ;)
  • dmk © (22.03.17 19:53) [23]
    А на самом деле класс кроссплатформенный в будущем и привязка к системе и т.д. очень нежелательна. Посему куча ассамблера и соответствующие отступления.
  • Игорь Шевченко © (23.03.17 10:23) [24]
    dmk ©   (22.03.17 19:50) [22]

    Дело не в патриотизме, а в том, что в современном мире исходников столько, что решение почти любой проблемы несколькими способами можно найти в интернетах.
  • dmk © (23.03.17 12:14) [25]
    Можно и найти и купить - не спорю.
    Часто сталкивался с проблемой прекращения поддержки исходников или компонентов.
  • Игорь Шевченко © (23.03.17 12:21) [26]
    dmk ©   (23.03.17 12:14) [25]

    Я не про готовый вариант, а про реализацию идей, методы решения проблем и т.п. Это не надо покупать и опасаться прекращения поддержки.
  • D7 (28.03.17 21:59) [27]
    Я не понял. Сообщения может принимать только окно. Изображения выводить можно тоже только на окно. На невидимое окно выводить невозможно. У вас есть окно или нету? Или оно типа чужое?
    Делайте ваш кросплатформенный класс, добавляйте в поля TForm1 его экземпляр, вызывайте его методы в нужных событиях. И всё, нет?
  • D7 (28.03.17 22:39) [28]
    Поздно увидел другую вашу тему, вам там уже показали что-то подобное тому что я имел ввиду...

    Могу лишь посоветовать глянуть как работает AGG. Там кроссплатформенное ядро имеет лёгкие обёртки к разным ОС, в том числе делает окно на WinAPI и рисует на нём и получает управление клавиатуры/мыши.
  • dmk © (29.03.17 01:45) [29]
    >D7   (28.03.17 21:59) [27]

    Окна нет, но есть HWND созданный с помощью AllocateHWND.
    Класс от TObject. Рисуется в памяти. Не TCanvas.
  • D7 (29.03.17 02:46) [30]
    > Класс от TObject. Рисуется в памяти. Не TCanvas.

    Это я как раз сразу понял. Хорошая идея, одобряю, сам когда-то думал про подобное.

    > Окна нет, но есть HWND созданный с помощью AllocateHWND.

    А вот зачем такие свистопляски с окном - не понимаю.
    Я не сталкивался с подобной функцией прежде, прогуглил её - это походу какой-то метод из VCL. Который в итоге создаёт окно при помощи CreateWindowEx().
    Уверен что будет удачнее взять "минимальный WindowsAPI-проект" - и вперёд, допиливаем лёгонькую обёртку. Небольшую часть кода можно из TApplication взять.
  • dmk © (29.03.17 02:55) [31]
    >А вот зачем такие свистопляски с окном - не понимаю.
    Для того, чтобы классу без окна сообщения принимать.
  • D7 (29.03.17 16:56) [32]
    Что в вашем понимании есть "класс без окна"? Окнами в любом случае владеет только ОС.
    А вы говорите что вызываете метод "Forms.AllocateHWnd()" (он же "Classes.AllocateHWnd())"? Ну так вы этим как раз создали окно.
    Какого-то системного VCL-класса с какой-то системной VCL-WndProc по-умолчанию. Но я так понял вы вроде хотите как раз избавляться от VCL?

    Сделаю к выходным пример как бы предложил делать я, а там посмотрите и решите сами.
  • dmk © (29.03.17 18:35) [33]
    >Ну так вы этим как раз создали окно.
    Это все условности. По правилам Windows окном считается класс с оконной процедурой.
    У меня ее нет. Ибо не нужна. Это дочерний объект-неокно.
  • dmk © (29.03.17 20:02) [34]
    Вот пример дочерних объектов не окон с поведением окон ;)
    https://hostingkartinok.com/show-image.php?id=97725fa53a628a8e4b5f2c99ae984ed2

    Работают также как и системные. Почти никаких различий.
    Рисуются на любом контексте. Пока готово 3 компонета. Тут еще CheckBox не виден.
    Скролл бары за 3 дня сделал. Почти как FMX, но не FMX. ПРивязки к WIndows почти нет ;)
    Своя базовая бибилотека и никаких системных вызовов кроме BitBlt и сообщений о мышке.
    Переносится хоть под линукс, хоть под DOS с небольшой доработкой ввода-вывода.
  • dmk © (29.03.17 20:04) [35]
    У меня даже шрифты свои. Пока растровые, но все же ;)
  • dmk © (29.03.17 20:07) [36]
    И никаких оконных функций и прочей мутатени ;)
  • Игорь Шевченко © (29.03.17 21:34) [37]

    > По правилам Windows окном считается класс с оконной процедурой


    Без комментариев.


    > И никаких оконных функций и прочей мутатени ;)


    Таких фреймворков уже миллионы. Зачем нужен еще один с граблями - я не понимаю.
  • dmk © (29.03.17 22:02) [38]
    >Без комментариев.
    Ну тогда черный квадрат малевича тоже окно :)

    >Зачем нужен еще один с граблями - я не понимаю.
    Дык свое. У меня софтина на нем пишется. Большая :)
    Если намертво к windows привязаться потом тошно переделывать будет,
    а слово портирование забыть придется.
  • D7 (29.03.17 22:11) [39]
    > По правилам Windows окном считается класс с оконной процедурой.

    Это чего это, где же такое написано?
    В исходниках ОС может и класс, а со стороны прикладного программиста это - чёрный ящик, имеющий некий ID.

    На вашем скриншоте я вижу обычное окно с рамкой.
    Да, на его клиентской области выводится своё крутое кросплатфоменное, но через BitBlt() оно выводится на обычное окно. Можете взять Spy++ и проверить.
    Кстати можно заменить BitBlt() на StretchDIBits(), слышал мнение что оно чуток эффективнее, хотя сам не проверял не тестировал.

    В общем до понедельника сделаю тестовый мини-проект.
 
Конференция "WinAPI" » Как принять сообщения в класс без окна?
Есть новые Нет новых   [118625   +12][b:0][p:0.001]