Добрый день. Такая ситуация - пишу на BuilderC++, поэтому основы Си знаю. Сейчас, от нефиг делать, решил попробовать писать по Windows на ассемблере (только не спрашивайте, зачем мне это нужно =) это... ассемблер тоже знаю - под дос писал.... Посему пару вопросов, именно по WinApi. 1. Чем отличаются окна от диалоговых окон? Серьезно, не понимаю. Вот когда в Builderе создаешь обычную форму - это чего - окно или диалог? Если окно - то как "оно" умудряется туда элементы (кнопочки, например) запихивать? Если диалог - см. вопрос два. 2. Конкретный пример: надо было нарисовать НУ ОЧЕНЬ простую программу. Нафига мне билдер? Взял ассемблер, нарисовал диалог, в нем стандартный Edit. Уперся в то, что винда НЕ ПОСЫЛАЕТ сообщение WM_CHAR моему окну, хотя содержимое Edit-а меняется. Как отловить момент изменения текста? Ну бог с ним, решил задачу через одно место: создал окно (не диалог), на нем втупую, вручную, через контекст нарисовал линии в виде edit-а, все изменения оного рисую вручную. Теперь проблема в том, что винда не знает, что я что-то рисовал, поэтому не всегда мне посылает сообщение WM_PAINT, когда надо перерисовать элементы (нет, я и с этим справился, но хочу узнать как НАДО действовать в таких случаях). 3. Есть какой-нить простой способ создать "красивое окно"? Т.е. использовать JPEG для оформления? А то BMP такой размер имеют, что вся прелесть написания на ассемблере пропадает =( Сцылочки на документацию, примеры приветствуются =) Примеры с этого сайта, конечно, скачал, сегодня буду мучить их =)
http://www.wasm.ru/publist.php?list=1 Читай туториалы Ицзелиона. В принципе, можно, если использовать GDI+. Но я пока не видел толковых док по нему в применении к Ассемблеру/Си (В SDK подробно рассматривается C++-обвёртка для этой библиотеки).
1. Диалог - это специальное окно, которое создаёт система на основе скрипта - ресурса диалога. Борланд придумали свой формат описания окна. 2. Диалоговая функция обработки сообщений много чего не видит, но можно выбрать, что нужно - смотри справку по WM_GETDLGCODE. Также глянь EN_CHANGE конкретно по эдиту. 3. Через регионы. А по JPEG - есть библиотеки, сорцы.
Aquila, благодарю, сейчас займусь. При первом просмотре документации почему-то пропустил =( IceStudent 3. Понятное дело, но, в чем дело... Если все через регионы рисовать - то по сумме не сильно меньше BMP получится... Думал, может, есть какая готовая функция WinApi-шная, для преобразования jpeg в bmp (чего, даже помечтать нельзя? =) В любом случае, благодарю всех =)
1. Некоторыми сообщениями (они разные для обычных окон и диалоговых) Степенями подальности (чти МСДН) 3. Ну действительно существуют библиотеки (статические тоже) чтобы с такими вещами работать... По-моему, в МАСМ32 пакете есть пример такого окна...с жпегом в ресурсах...
А еще есть UpdateLayeredWindow: http://chime.student.utwente.nl/qweerdy/ppa.zip (Per-pixel Alpha values) http://chime.student.utwente.nl/qweerdy/scrollblend.zip http://chime.student.utwente.nl/qweerdy/pngskin.zip http://chime.student.utwente.nl/qweerdy/pngskin3.zip http://chime.student.utwente.nl/qweerdy/pngskin4.zip http://chime.student.utwente.nl/qweerdy/pngskin5.zip Правда, автор этих красивых примеров просмотрел утечку GDI, но исходники приложены.
SupperBegginner Есть, конечно, в OLE COM, компонент для загрузки JPG, GIF, WMF и т.д. Стандартные контролы в винде используют этот компонент, так что и его можно считать относительно стандартным. Пример использования есть в masm32\m32lib\BitmapFrom*.asm.