Многострочный текст в кнопке

Многострочный текст в кнопке

По умолчанию текст для кнопок может содержать только одну строку. Но при желании можно изменить этот стиль с помощью функций GetWindowLong и SetWindowLong, как показано в листинге 4.3.

Листинг 4.3

[DllImport("coredll.dll")]

private static extern IntPtr GetCapture();

[DllImport("coredll.dll")]

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).

Рис. 4.3. Создание многострочного текста на кнопке

ВНИМАНИЕ

Данный пример был написан еще для .NET Compact Framework 1.0. В .NET Compact Framework 2.0 нет надобности вызывать функцию GetCapture() для получения дескриптора hWnd, так как теперь поддерживается свойство Control.Handle.