· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Горизонтальный скролл ListBox'е

Посл.отвђт Сообщенiе


Дата: Июл 16, 2004 03:40:08

Хотел сделать горизонтальный скролл в ListBox'е следующим образом:
LOCAL	hDC:DWORD
LOCAL	sz:_SIZE
;------------------------------
invoke	GetDlgItem,hWnd,IDC_LST
push	eax
invoke	GetDC,eax
mov	hDC,eax
invoke	lstrlen,offset szText
lea	ecx,sz
invoke	GetTextExtentPoint32,hDC,offset szText,eax,ecx
pop	eax
invoke	ReleaseDC,eax,hDC
invoke	SendDlgItemMessage,hWnd,IDC_LST,LB_SETHORIZONTALEXTENT,sz.x,NULL
но почему-то в sz.x получается величина, в 1.5 раза большая, чем нужно. Может размер фонта в контексте восстанавливается после прорисовки итема? Если да, то как получить этот фонт?


Дата: Июл 16, 2004 05:03:30

Sk. Inc.
Возможно так:
  1. запретить перерисовку listbox'а - WM_SETREDRAW wParam = FASE;
  2. получить фонт из listbox'а - WM_GETFONT;
  3. получить DC listbox'а - GetDC;
  4. установить в полученный DC полученный фонт - SelectObject, сохранив для восстановления текущий;
  5. выполнить GetTextExtentPoint32;
  6. восстановить сохраненный фонт - SelectObject;
  7. освободить DC listbox'а - ReleaseDC;
  8. разрешить перерисовку listbox'а - WM_SETREDRAW wParam = TRUE.
ps. 1-ый и 8-ой пункты возможно лишние.


Дата: Июл 17, 2004 18:12:30 · Поправил: Sk. Inc.

q_q
Спасибо за помощь, все заработало.

p.s. Пункты 1 и 8 лишние.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.043