private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("coredll.dll")]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex,
int dwNewLong);
public const int GWLSTYLE = -16;
// стиль многострочного текста
public const int BS_MULTILINE = 0x2000;
private void Form1_Load(object sender, EventArgs e) {
IntPtr hWnd;
int style;
this.butMultiline.Capture = true;
hWnd = GetCapture();
this.butMultiline.Capture = false;
style = GetWindowLong(hWnd, GWL_STYLE);
SetWindowLong(hWnd, GWL_STYLE, style | BS_MULTILINE);
}
В этом примере для сравнения использовались две кнопки. На каждой из них размещен достаточно длинный текст (рис. 4.2).
Рис. 4.2
. Вид кнопок в процессе программированияПри загрузке формы выполняется изменение стиля для первой кнопки butMultiline
Рис. 4.3
. Создание многострочного текста на кнопкеДанный пример был написан еще для .NET Compact Framework 1.0. В .NET Compact Framework 2.0 нет надобности вызывать функцию GetCapture() для получения дескриптора hWnd, так как теперь поддерживается свойство Control.Handle.
Увеличение ширины выпадающего списка ComboBox
Выпадающий список у комбинированного окна равен ширине самого комбинированного окна ComboBox
///
/// Сообщение, получающее размеры выпадающего списка
/// комбинированного окна
///
const int CB_GETDROPPEDWIDTH = 0x015f;
///
/// Сообщение, устанавливающее размеры выпадающего списка
/// комбинированного окна
///
const int CB_SETDROPPEDWIDTH = 0x0160;
[DllImport("coredll.dll")]
static extern int SendMessage(IntPtr hwnd, int msg, int wParam, int lParam);
private void Form1_Load(object sender, EventArgs e) {
comboBox1.Items.Add("Раз");
comboBox1.Items.Add("Два");
comboBox1.Items.Add("Три");
comboBox2.Items.Add("Длинный текст");
comboBox2.Items.Add("Очень длинный текст");
comboBox2.Items.Add("Hy очень длинный текст");
// Устанавливаем желаемую ширину
SendMessage(comboBox2.Handle, CB_SETDROPPEDWIDTH, 200, 0);
// Получим ширину выпадающего окна
int retval = SendMessage(comboBox2.Handle, CB_GETDROPPEDWIDTH, 0, 0);
this.Text = retval.ToString();
}
На форме надо разместить два элемента ComboBox
CB_SETDROPPEDWIDTH
со значением второго параметра 200. В результате выпадающий список будет в ширину занимать 200 пикселов.После запуска программы сначала надо обратить внимание на работу первого комбинированного окна (рис. 4.4). Оно ведет себя стандартным образом.
Рис. 4.4
. Стандартный размер выпадающего спискаТеперь нужно перейти ко второму комбинированному окну. У него размер выпадающего списка увеличился, что позволяет увидеть весь текст (рис. 4.5).
Рис. 4.5
. Увеличенный размер выпадающего списка у ComboBoxListBox