Привет, если кто-то знает, как его создать, рисовать и печатать на нём текст и потом результат перетащить в окно... просьба проконсультировать... желательно на масме, если нетрудно. Можно ли с помощью этой штуковины редактировать и форматировать текст до вывода его в окно редактора...? Читал мсдн, читал ... не работает что-то...
Надо просто привязать к нему битмап. И будет всё прекрасно рисоваться Без него всё рисование на абстрактном DC будет возвращать ерроры.
Сопстно, пример. Не тестировал, однако должно работать Code (Text): ; <-- [Input] Dim = LoWord - width, HiWord - height ; <-- [Output] EAX = Valid memory DC capable of drawing onto BuildAbstractDC proc Dim:DWORD; invoke CreateCompatibleDC, 0; PUSH EAX; ADD ESP, -8; MOV DWORD PTR [ESP], EAX; MOVZX EDX, WORD PTR [Dim+2]; PUSH EDX; MOVZX EDX, WORD PTR [Dim]; PUSH EDX; PUSH EAX; CALL CreateCompatibleBitmap; MOV DWORD PTR [ESP+4], EAX; CALL SelectObject; POP EAX; RET; BuildAbstractDC endp; ; <-- [Input] DC = Memory context to be freed FreeAbstractDC proc DC:HDC; invoke GetCurrentObject, DC, OBJ_BITMAP; PUSH EAX; invoke DeleteDC, DC; CALL DeleteObject; RET; FreeAbstractDC endp;
DEEP CreateCompatibleBitmap - конечно хорошо, но для больших картинок (порядка 3000х2000 и больше) она у меня ошибку выдавала. Для них лучше использовать CreateDIBSection.
ну дык этож для простейшего случая. а пример с CreateDIBSection я уже на форум где-то выкладывал.. правда там с первого раза не всем понятно) зы. ну конечно можно. CreateAbstractDC + DrawTextEx + BitBLT в руки и рысью-марш
пробовал печатать и переносить в контекст с помощью TransparentBlt - не получается ( хотелось бы чтобы текст был на текстуре, как-бы ) - в контесте окна это работает...
А если BitBlt по маске? шаг 1. Пишем на одном DC текст (задник белый, текст чёрный), выводим его на "целевой" DC с параметром SRCAND. шаг 2. Копируем картинку текстуры на DC текста с параметром SRCERASE. шаг 3. Копируем получившееся на "целевой" через SRCPAINT. Ненамного медленнее, зато совместимо со всеми виндами и работает для всех типов DC.
DEEP пытался разобраться с этими операциями, пока туго.. попробую ещё slavanap SetBkMode работает для эдита, а вот для рисования текста будет работать? Загорелось написать свой текстовый редактор... утереть нос мелкософту.... займусь им плотно, немного только аклимаюсь от написания своей оси...
Собственно, вот: Code (Text): TransparentBlt proc DstDC:DWORD, DstX:DWORD, DstY:DWORD, DstW:DWORD, DstH:DWORD, SrcDC:DWORD, SrcX:DWORD, SrcY:DWORD, MaskDC:DWORD, MaskX:DWORD, MaskY:DWORD ROP_DSTCOPY = 00AA0029h LOCAL MemDC : DWORD LOCAL MemBmp : DWORD LOCAL Save : DWORD LOCAL crText : DWORD LOCAL crBack : DWORD INVOKE CreateCompatibleDC, 0 OR EAX, EAX JE @Error MOV MemDC, EAX INVOKE CreateCompatibleBitmap, SrcDC, DstW, DstH OR EAX, EAX JE @Error MOV MemBmp, EAX INVOKE SelectObject, MemDC, MemBmp MOV Save, EAX INVOKE BitBlt, MemDC, 0, 0, DstW, DstH, MaskDC, MaskX, MaskY, SRCCOPY INVOKE BitBlt, MemDC, 0, 0, DstW, DstH, SrcDC, SrcX, SrcY, SRCERASE INVOKE SetTextColor, DstDC, 0 MOV crText, EAX INVOKE SetBkColor, DstDC, 0FFFFFFh MOV crBack, EAX INVOKE BitBlt, DstDC, DstX, DstY, DstW, DstH, MaskDC, MaskX, MaskY, SRCAND INVOKE BitBlt, DstDC, DstX, DstY, DstW, DstH, MemDC, 0, 0, SRCINVERT INVOKE SetTextColor, DstDC, crText INVOKE SetBkColor, DstDC, crBack .IF Save != 0 INVOKE SelectObject, MemDC, Save .ENDIF INVOKE DeleteObject, MemBmp INVOKE DeleteDC, MemDC MOV EAX, 1 JMP @Exit @Error: XOR EAX, EAX @Exit: RET TransparentBlt Endp
driver Что значит "рисования"? Для всех выводов текста ф-циями DrawTextEx, TextOut и т. п. работает, проверял.
driver //offtop давно это было... тогда я еще движок для своей карты области писал. Только так и не дописал: не смог найти данные. Кстати, не знаешь где векторное изображение карты Смоленской области найти?
с картами проблемы, денег хотят заних , к тому же меньше 100.000 секретные... видел вроде выкладывали на nnm.ru , поиск там работает но файлы хранятся не очень долго - на рапиде и депозите...