|
Программирование >> Автоматически обновляемые приложения
Еще два способа буксировки формы, не имеющей заголовка Существует еще один способ перемещения формы, не имеющей заголовка. На этот раз (листинг 5.23) мы воспользуемся вызовами функций Windows API. Листинг 5.23. Перетаскивание формы при помощи функций Windows API [DllImportAttribute( user32.dll )] public static extern int SendNessage(IntPtr hWnd, int Msg, int wParam, int iParam); [DllImportAttribute( user32.dll ) ] public static extern bool ReleaseCapture(); Перемещаем форму this.Location = pointMoveTo; private void labell MouseUp(object sender, MouseEventArgs e) { Отключаем режим перетаскивания bDragStatus = false; private void buttonl Click(object sender, EventArgs e) { this.Close(); Кстати, не забывайте в подобных формах предусмотреть возможность выхода из программы. Так как в созданном окне нет ни кнопки закрытия программы, ни команд системного меню, то пользователь просто не сможет закрыть вашу программу, и вспомнит вас недобрым словом. Примечание Пример находится в папке DragForm на прилагаемом диске. Примечание Пример находится в папке DragFormAPI на прилагаемом диске. Этот пример был простой калькой со старого примера, который я использовал в Visual Basic 6.0. Но оказалось, можно было обойтись без вызовов неуправляемого кода, если воспользоваться методом wndProc. Этот пример описан на сайте Microsoft по адресу http: support.microsoft.com/kb/320687/ в статье How to move а form by dragging the client area of the form (на англ. языке). ; Листинг 5,24* Еще один способ перетаскивания формы без неуправляемого j кода ...... private const int WM NCHITTEST = 0x84; private const int HTCLIENT = 0x1; private const int HTCAPTION = 0x2; protected override void WndProc(ref Message m) { switch (m.Msg) { case WM NCHITTEST: base.WndProc(ref m); if ((int)m.Result == HTCLIENT) m.Result = (IntPtr)HTCAPTION; return; break; base.WndProc(ref m); public const int WM NCLBUTTONDOWN = OxAl; public const int HT CAPTION = 0x2; private void ForTnl MouseDown (object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { ReleaseCapture(); SendNessage(this.Handle, WM NCLBUTTONDOWN, HT CAPTION, 0); Как добиться эффекта полупрозрачности у формы Одно из самых замечательных новшеств, которые появились в платформе .NET Framework, это поддержка прозрачности. Чтобы достичь подобного эффекта в старых версиях С++ или Visual Basic 6.0, требовалось писать уйму кода с использованием функций Windows API. Теперь же установка уровня прозрачности является встроенным свойством формы. Достаточно установить нужную степень прозрачности через свойство Opacity (всего лишь одна строчка кода!). Для большей наглядности приведем несколько полезных советов по использованию прозрачности в приложениях. Для начала посмотрим, как пользователь может управлять степенью прозрачности. Создадим новую форму и разместим на ней элемент управления NumericUpDown. Также добавим кнопку и таймер для реализации очень красивого эффекта. Код программы будет выглядеть следующим образом. j Листинг 5,25, Устанавливаем уровень прозрачности для формы управляем степенью прозрачности с помощью набора счетчиков NumericUpDown private void numeгicUpDownl ValueChanged(object sender, EventArgs e) { this.Opacity = (double)numericUpDownl.Value / 100; Щелкая no набору счетчиков NumericUpDown, пользователь может регулировать степень прозрачности формы. Но можно изменять прозрачность через таймер. Предположим, мы хотим, -чтобы форма при закрытии исчезала не сразу, а постепенно, создавая иллюзию растворения в воздухе. Для данного эффекта нам и понадобится таймер, который мы поместили в проект ранее. При нажатии на кнопку таймер активируется и меняется степень прозрачности формы. Как только величина прозрачности достигнет значения О, мы закрываем форму. Код приведен в листинге 5.26. Примечание Пример с перетаскиванием формы находится в папке DragWndProc на прилагаемом диске.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |