Программирование >>  Автоматически обновляемые приложения 

1 ... 38 39 40 [ 41 ] 42 43 44 ... 170


Как правило, команда Закрыть является последней командой системного меню, которой предшествует разделитель. Таким образом, нам нужно просто подсчитать число всех команд меню и удалить две последние команды (листинг 5.31). Только не забудьте предусмотреть выход из программы, ведь если кнопка X и команда Закрыть будут заблокированы, то пользователь не сможет выйти из программы.

; Листинг 5.31. Убираем кнопку х из заголовка формы

public Forml() {

InitializeComponent();

Получаем описатель системного меню

IntPtr hSysMenu = GetSystemMenu(this.Handle, 0);

int menucount = GetMenuItemCount(hSysMenu);

Убираем последний пункт меню - команду Закрыть RemoveMenu(hSysMenu, menucount - 1, MenuFlags.MF BYPOSITION) .

Убираем предпоследний пункт меню - разделитель RemoveMenu(hSysMenu, menucount - 2, MenuFlags.MF BYPOSITION) .

Перерисовываем меню DrawMenuBar(hSysMenu);

private void butExit Click(object sender, EventArgs e) {

Application.Exit();

Примечание

Пример находится в папке RemoveX на прилагаемом диске.

[Dlllmport( user32.dll )]

private static extern bool DrawMenuBar(IntPtr hWnd);



: Листинг 5.32. Убираем кнопку х при помощи упраапяемого кода

private const int CS NOCLOSE = 0x200;

protected override CreateParams CreateParams {

get {

CreateParams cp = base.CreateParams;

cp.Classstyle = cp.ClassStyle CS NOCLOSE;

return cp;

private void butExit Click(object sender, EventArgs e) {

this.Close 0 ;

Как видите, нам нужно просто переопределить свойство CreateParams, добавив к свойству Classstyle новое значение csnoclose.

Примечание

Пример находится в папке NoClose на прилагаемом диске.

Создать окно произвольной формы

Существует несколько способов для реализации этой идеи. Рассмотрим очень

быстрый и простой способ. У формы имеется свойство TransparencyKey, КОТО-

Убрать кнопку X

при помощи управляемого кода

Долгое время я думал, что убрать кнопку X из заголовка формы можно только при помощи неуправляемого кода с привлечением системных функций Windows API. Но однажды, при посещении сайта http: www.codeproject.com, я обнаружил пример, в котором показывалась возможность убрать эту кнопку, используя только управляемый код. Все оказалось очень просто (листинг 5.32), нужно было просто внимательно почитать документацию MSDN.



: Листинг 5.33. Создание формы р виде ромба

public Forml() {

InitializeComponent();

Задаем цвет прозрачности

this.TransparencyKey = Color.Gold;

private void Forml Paint(object sender, PaintEventArgs e) {

e.Graphics.Clear(Color.Gold);

e.Graphics.FillPolygon(Brushes.Aquamarine, new PointF[] { new Point(this.ClientRectangle.Width /2, 0), new Point(this.ClientRectangle.Width,

this.ClientRectangle.Height /2), new Point(this.ClientRectangle.Width / 2,

this.ClientRectangle.Height), new Point(0, this.ClientRectangle.Height / 2)});

Font f = new Font(this.Font.Name, 20); e.Graphics.DrawString( C#.Народные советы , f. Brushes.Black, 20,

(this.ClientRectangle.Height / 2) - (f.Height / 2));

Для большей наглядности мы оставили заголовок и границы формы. Поэтому наша форма выглядит в виде ромба, вписанного в прямоугольник. Но ничего не мешает сделать вам действительно форму в виде ромба. Попробуйте сами изменить пример.

Примечание

Пример находится в папке DiamondForm на прилагаемом диске.

рое определяет цвет прозрачности. Зальем всю поверхность формы каким-нибудь цветом, определим его как прозрачный цвет и далее рисуем любую фигуру другими цветами (листинг 5.33). Вот как будет выглядеть форма в виде ромба (рис. 5.1).



1 ... 38 39 40 [ 41 ] 42 43 44 ... 170

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика