MASM32 Подскажите,плиз, начинающему - ставим SetBkMode в Transparent - и преотлично печатаем на Bitmap'e. Что происходит дальше ? - Буквы как будто проваливаются из Edita вниз на битмап и редактирование - йок. Похоже, что мы просто запретили эдиту уничтожать фон - и он не может отличить фон от символа после того,как символ напечатан (хотя, если вывести форму за пределы экрана - символы ,которые мы хотели удалить - удаляются вполне нормально). Но ведь как-тоже можно - Word и еще парочка редакторов вроде умеют. BOOKSHELFS - нет , он для редактирования переключается в какойто другой режим. Если нельзя простыми методами - можно-ли установить в программе переключение на режим OPAQUE ? и обратно,разумеется.
Спасибо... Но я ведь начинающий - т.е. пока еще осваиваю метод copy-paster. Правая рука постоянно болит,блин. Поставил invoke InvalidateRect, hdc,NULL,TRUE после invoke GetStockObject......Null_BRUSH ret На другое ума не хватает ( надеюсь,что это не навсегда) Кое-что заработало,например символы удаляются ,но если попытаться вставить что-то печатает по старой строке,не сдвигая её. Удаление одного символа загружает проц на 70%. Появилась идея - создать контрол,который будет печатать символы битмапами - размер их вроде-бы измеряется миллиметрами,а не пикселами - и должен оставаться постоянным при любом разрешении экрана.Или мне это показалось?
Похоже, что Вы вызываете InvalidateRect прямо в обработчике WM_PAINT. Это приводит к повторной отправке сообщения WM_PAINT и т.д. пока очередь не переполнится. Если Вы уже находитесь в обработчике WM_PAINT, то можете сами перерисовывать фон, а на нём текст. По началу, возможно, будет заметно мерцание, но это поправимо.
Не получается... Ситуация - эдит печатает на битмапе символ - пытаемся его удалить - не реагирует,не видит его. Но,если после попытки удаления тронуть рамку окна- т.е. оно обновится, символ тут-же удаляется . Как-то надо обновлять некую область после нажатия клавиши. Пытался обрабатывать сообщение WM_CHAR. Н е понимаю,что происходит при этом и что нужно делать. Нужно ли как-то получить координаты области ,которую необходимо обновить? Кажется да,но как? И как обновить - ничто не срабатывает.Даже в example Stylе iz MASM32 та же проблема - обратите внимание.И нигде нет конкретного рецепта - только расплывчатые теоретические рекомендации,для начинающего мало полезные. Вопрос к экпертам - SetBkMode контролирует свойсво эдита - уничтожать или нет бэкграунд при рисовании символа.У него 2 постоянные - ТRANSPARENT и OPAQUE. Можно ли их как-то переключать по ходу дела? В смысле - читаем,- если надо что-то подредактировать- нажимаем кнопку и редактируем......?? Возможно ли это в принципе ? или надо закрывать файл ,отключать эдит ,включать другой эдит с другим свойством,снова открывать файл(на том же месте ) и так далее ???
Значит, имеем статическую картинку (битмап), а над ней находится стандартный эдит? Где и как Вы вызываете SetBkMode? Может проще сделать эдит полупрозрачным: при создании эдита нужно указать стиль WS_EX_LAYERED, потом задаём прозрачность SetLayeredWindowAttributes(hEdit, 0, 128, LWA_ALPHA); 128 - это примерно 50% прозрачность.
Спасибо,попробую. У меня так : произносим соответствующие заклинания по поводу создания окна, застилаем битмапом, создаем эдит и после mov... invoke.... hwndedite ... обрабатываем : .ELSEIF uMsg==WM_CTLCOLOREDIT invoke SetBkMode,wParam,TRANSPARENT ;;;;;OPAQUE invoke SetTextColor,wParam,0202020h ;;;;;;;;invoke SetBkColor,wParam,0CCCCCCh invoke GetStockObject,NULL_BRUSH ret __________ Вот и все ... В данном случае цвет бэкраунда эдита не нужен,но если сделать цвет Objeckt'a не ноль , можно менять его цвет ... Можно все сделать прозрачным и главное окно тоже . Но , с редактированием кранты ...Не хочет по нормальному,в интерактивном режиме.
Veter >Правая рука постоянно болит,блин Возможно, это поможет: http://rsdn.ru/File/42164/ws_ex_composited.zip http://rsdn.ru/File/42164/ws_ex_transparent.zip Quantum >Может проще сделать эдит полупрозрачным: при создании эдита нужно указать стиль WS_EX_LAYERED, потом задаём прозрачность SetLayeredWindowAttributes(hEdit, 0, 128, LWA_ALPHA); 128 - это примерно 50% прозрачность. Даже MSDN знает, что эдит - это child, а WS_EX_LAYERED - только для top-level
kero "A window that has no parent, or whose parent is the desktop window, is called a top-level window." (c) msdn Для использования стиля WS_EX_LAYERED достаточно не указывать WS_CHILD. Таким образом, данный стиль вполне применим для "owned windows". Так что достаточно задать стиль WS_POPUP и эдит можно сделать слоёным. Зато прозрачность плохо совместима со стилями вроде CS_PARENTDC, а эдит имеет именно этот стиль, так что родительское окно тоже нужно делать слоёным.
Спасибо ,уважаемые, за помощь. Но дело пока стоит - зря я наверное в качестве первой учебной программы решил создать текстовый редактор,который должен заменить штатный Ms WORD. Посто обидно ,что нет нормальной читалки - все не такие какие-то. http://eddyv.narod.ru/ProE.rar - вот заготовка. Если-бы удалось решить проблему с редактированием , останется совсем немного - научиться вставлять символы, картинки всякие и как-то надо еще разбивать файл на страницы. Получается 4 эдита - левая страница,правая, и два - для номеров страниц и похоже, их все надо суббклассировать ... А как передать фокус с одного эдита на другой ,когда кончается страница? А как ... короче всё в тумане...
Quantum Чтобы не разводить здесь оффтоп - продолжаю в новой ветке: http://www.wasm.ru/forum/viewtopic.php?id=18039