|
Программирование >> Автоматически обновляемые приложения
Как правило, команда Закрыть является последней командой системного меню, которой предшествует разделитель. Таким образом, нам нужно просто подсчитать число всех команд меню и удалить две последние команды (листинг 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).
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |