Добрый день) Бьюсь над одной проблемой уже полдня, не могу понять в чем дело( Создаю контрол "Статик", затем создаю шрифт с помощью CreateFont и устанавливаю его сообщением WM_SETFONT. Код (Text): . if eax==WM_CREATE invoke CreateWindowEx,0 , addr StaticClassName, NULL,\ WS_CHILD or WS_VISIBLE ,0,0, 392, 210, hWin,111000, hInstance,0 mov hSTCToolTip, eax invoke CreateFont,15,0,0,0,500,0,0,0,OEM_CHARSET,\ OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,\ DRAFT_QUALITY,DEFAULT_PITCH,addr szFontName invoke SendMessage,hSTCToolTip,WM_SETFONT,eax,0 Потом когда меняю текст в контроле, узнаю размер строки Код (Text): invoke GetDC,hSTCToolTip mov lhDC,eax invoke GetTextExtentPoint32,lhDC,addr lToolTipBuffer,lSizeBuffer3,addr FSSize push FSSize.w pop lSizeRow1 Затем ресайзю контрол. Получается размер контрола больше строки,т.е. GetTextExtentPoint32 возвращает размер шрифта, который использовался по умолчанию, до того как я его изменил. если закомментировать, Код (Text): invoke SendMessage,hSTCToolTip,WM_SETFONT,eax,0 то все нормально (размеры контрола и строки). совпадают. Спасибо.
xchg Попробуй Код (Text): ... invoke CreateFont,15,0,0,0,500,0,0,0,OEM_CHARSET,\ OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,\ DRAFT_QUALITY,DEFAULT_PITCH,addr szFontName mov hFont,eax ;; !!! invoke SendMessage,hSTCToolTip,WM_SETFONT,eax,0 ... invoke GetDC,hSTCToolTip mov lhDC,eax invoke SelectObject, lhDC, hFont ;; !!! mov hOldFont,eax ;; !!! invoke GetTextExtentPoint32,lhDC,addr lToolTipBuffer,lSizeBuffer3,addr FSSize ... invoke SelectObject, lhDC, hOldFont ;; !!! ...
Работает, спасибо q_q. Но еще одна проблемка, когда длина строк совпадают они накладываются друг на друга. Где-то здесь я видел решение подобной задчи, но не могу сейчас найти.
xchg Что значит накладываются? Перед выводом новой строки фон не очищается? WM_CTLCOLORSTATIC обрабатываешь как-нибудь?
WM_CTLCOLORSTATIC обрабатываю так: Код (Text): .elseif eax==WM_CTLCOLORSTATIC invoke GetDlgCtrlID,lParam .if eax==111000 invoke SetBkMode,wParam,TRANSPARENT invoke GetStockObject,NULL_BRUSH .else invoke DefWindowProc, hWin, uMsg, wParam,lParam .endif ret
xchg накладываются друг на друга ... WM_CTLCOLORSTATIC обрабатываю так Не удивительно, ты предпринял все меры, чтобы предыдущий текст остался. TRANSPARENT влияет на вывод текста, не сплошных (not solid) кистей и линей, заставляя не трогать фон под ними. NULL_BRUSH "запрещает" очищать фон всего static'а.
Переделал. Код (Text): .elseif eax==WM_CTLCOLORSTATIC invoke GetDlgCtrlID,lParam .if eax==111000 RGB 255,255,225 invoke SetBkColor,wParam,еax invoke GetStockObject,NULL_BRUSH .else invoke DefWindowProc, hWin, uMsg, wParam,lParam .endif ret Вроде работает)