Конференция "WinAPI" » Как принять сообщения в класс без окна?
 
  • dmk © (03.04.17 11:05) [60]
    >было бы чтоб работало и на 32 тоже
    Писать под win32 сей проект неудобно. Там ограничение 4 гб. Делать смешанную адресацию неудобно и получаются медленные процедуры. 32 уже потихоньку уходит в прошлое, хотя и не так быстро как 16 бит.
  • D7 (03.04.17 11:09) [61]
    И вы реально можете занять все 4ГБ? У меня вот ни одна программа, даже мощные CAD-системы и крутые игры - не достигают 4ГБ. %))
  • dmk © (03.04.17 11:12) [62]
    >Непонятно тока что за "трансляция".
    Windows не дает без окна доступ к очереди сообщений, поэтому приходится делать привязку к оконной процедуре. Типа врезки трубы в магистраль. Хотя можно изобрести что-то вроде своего контроллера. Если мышь в области, то запускать таймер и делать выборку позиции через winapi.GetCursorPos и клавиши через GetAsyncKeyState. Тогда вообще трансляция не нужна.

    А под 32 не переделаю. Смысла нет, да и наоборот я ее переделывал с 32 на 64.
  • dmk © (03.04.17 11:17) [63]
    >И вы реально можете занять все 4ГБ?
    У меня Photoshop64, 3ds max64, Illustrator64 и т.д все используют намного больше 4 гб.
    У меня 32 стоит. Фотошо например 20 Гб легко съедает.
  • D7 (03.04.17 12:02) [64]
    Не пользую фотошопы - рисовать не умею. Для элементарных обработок вполне хватает XnView/Gimp.
    Что ж вы с ними делаете такое?)) У меня модель летательного аппарата со всеми мельчайшими деталями и сложной кинематикой стока не жрёт))
    Хотя не тестил скока будет жрать если поставить x64 ОС и такую же версию CAD-системы... Может с этой же моделью сразу же в три раза больше памяти хапнет просто так?

    ох... Короче так.
    * Делаем класс DMKApplication, который: хранит список "окон" верхнего уровня программы, умеет запускать очередь сообщений, при закрытии всех окон выходит из программы (закрывает).
    * Делаем класс DMKWindow, который: является обёрткой над окнами верхнего уровня Windows, умеет создавать и уничтожать окна, получает управление от мыши и клавиатуры, отслеживает изменение своего состояния (позиция, размеры, итп), хранит и обрабатывает список "слоёв", выводит на себя итоговую буфер-картинку.
    * Делаем класс DMKLayer, который: является логической единицей выводящей что-либо на битмап, имеет классические методы и события. Возможно абстрактный, с какими-то потомками типа "кнопка", "текст", "чекбокс", etc.
    В простейшем случае имеем: один объект DMKApplication, один объект DMKWindow, некоторое количество объектов DMKLayer. Итого в программой будет создано один HWND и при перерисовке будет браться один HDC за раз и тут же освобождаться.
    Минимальная привязка к ОС, минимальное потребление системных как их там, максимальная скорость работы, переносимость программы на любую платформу через просто замену реализации нескольких методов DMKApplication и DMKWindow, и всё своё.
  • Игорь Шевченко © (03.04.17 12:13) [65]
    D7   (03.04.17 11:09) [61]


    > И вы реально можете занять все 4ГБ? У меня вот ни одна программа,
    >  даже мощные CAD-системы и крутые игры - не достигают 4ГБ.
    >  %))


    Это говорит о том, что с программами, занимающими больше 4-х Гб ты не знаком. Ну и что ? Займись фотографией, сразу познакомишься :)

    dmk ©   (03.04.17 11:05) [60]


    > 32 уже потихоньку уходит в прошлое


    Бред какой. Программ, которым реально нужен большой объем памяти, максимум 1 процент от всего.
  • dmk © (03.04.17 12:14) [66]
    >будет браться один HDC за раз и тут же освобождаться.
    DC - контекст - это просто битмап. Его не надо постоянно освобождать. Взял DC и пользуй его. Надоело - ReleaseDC. Это просто ссылка. Это нужно было в windows 3.11-95, а после win2000 уже не нужно.
    На самом деле все уже работает. Если запустите примеры, то увидите. Только win64 надо.
  • D7 (03.04.17 12:37) [67]
    Хех, "занимающими" или "жрущими"?)) Вся папка CAD-программы занимает на диске около 23ГБ.
    Фотографией? У вас есть фотка весящая 4ГБ в распакованном виде?)

    MSDN указывает делать BeginPaint/EndPaint. Я слушаюсь MSDN, во избежание, как говорится, это их система.
    HDC это не битмап, в него может быть выбран битмап, а может и не быть выбран. Как и остальные HGDI объекты.

    ну... Я предлагал помочь. Как хотите. Но покачто у вас что-то делается не совсем так. В плане WinAPI.
  • Игорь Шевченко © (03.04.17 14:06) [68]
    D7   (03.04.17 12:37) [67]


    > У вас есть фотка весящая 4ГБ в распакованном виде


    Конечно. И не одна. Кроме фоток еще есть базы данных. И не одна. Но это уже оффтопик. Я просто прошу поверить, что нужных 64-х разрядных программ достаточно.
  • dmk © (03.04.17 14:08) [69]
    >не совсем так. В плане WinAPI.
    У меня все в памяти делается, а не в винапи.
    Мне от WInApi только несколько сообщений надо.

    А за помощь спасибо! Все будет учтено.
  • dmk © (03.04.17 14:12) [70]
    >У вас есть фотка весящая 4ГБ в распакованном виде?)
    Вы просто не сталкивались видимо с такими задачами: БД, Видео, Фото, Полиграфия, Архивы и т.п. У меня архивы несколько сот гигабайт в упакованном виде. Работаю дизайнером. Есть файлы более 4-х Гб. Немного, но есть.
  • Eraser © (03.04.17 19:24) [71]

    > dmk ©  

    прочитал ветку, так и не понял - зачем?
    без окна в современной винде все равно отображать ничего не выйдет, для отображения в Windows нужно окно (Window), для него и нужно написать платформенно-зависимую прослойку, которая будет отображать и принимать ввод. к чему велосипеды - не понятно.
  • dmk © (03.04.17 23:41) [72]
    >без окна в современной винде все равно отображать ничего не выйдет
    Там в [57] уже все вышло :) Конечно же все отображается в окне.
  • Eraser © (04.04.17 10:41) [73]

    > dmk ©   (03.04.17 23:41) [72]

    все равно не понятно, зачем требовалось, что требовалось и что в итоге получилось.
    по-моему усложнение себе жизни.
 
Конференция "WinAPI" » Как принять сообщения в класс без окна?
Есть новые Нет новых   [118622   +8][b:0][p:0.001]