Сообщений 3    Оценка 1        Оценить  
Система Orphus

Как программно изменить высоту выпадающего списка?

Автор: Игорь Вартанов

Версия текста: 1.0

Поскольку высота списка combobox-контрола определяется высотой самого контрола, то для ее изменения необходимо изменить высоту контрола любым доступным способом.

RECT r;
int  nLineCount = 6; // количество строк в выпадающем списке
HWND cb = GetDlgItem( hDlg, IDC_COMBO1 );
GetWindowRect( cb, &r );
MapWindowPoints( NULL, hDlg, (LPPOINT)&r, 2 );
MoveWindow(cb, r.left, r.top, r.right - r.left, 24 + nLineCount * 13, TRUE);

Константы 24 и 13 указаны для шрифта диалога MS Sans Serif 8. Для MS Sans Serif 10 и 12 подойдут пары (28, 16) и (32, 20) соответственно.

ПРИМЕЧАНИЕ

Для большинства шрифтов, пригодных для использования в диалогах, подойдет следующий алгоритм определения этих констант:

// hDlg - хэндл окна диалога
RECT r = { 0, 0, 0, 100 };
MapDialogRect( hDlg, &r );
int const_for_line    = r.bottom  12.5;
int const_for_editbox = r.bottom  ( ( const_for_line > 13 ) ? 7.2 : 6.7 );

где const_for_editbox - это большая из констант, и const_for_line - меньшая. Для шрифтов малых размеров алгоритм может давать эффект уменьшения количества видимых строк в выпадающем списке на одну, по сравнению с указываемым в nLineCount. Несложно опытным путем определить необходимый поправочный коэффициент-делитель (его необходимо уменьшать в случае уменьшения const_for_line).


Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
    Сообщений 3    Оценка 1        Оценить