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

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


;Листинг 5.26. Эффект затухания при выходе из программы

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

timerl.Enabled = true;

private void timerl Tick(object sender, EventArgs e) {

this.Opacity -= 0.1; if (this.Opacity <= 0) this.Close 0;

Перемещение формы за заголовок

Рассмотрим еще один пример с прозрачностью формы (листинг 5.27). Например, когда мы будем перетаскивать форму за ее заголовок с помощью мыши, то форма временно станет полупрозрачной.

i Листинг 5.27. Использование прозрачности при перемещении формы

protected override voi,d WndProc (ref Message m) {

const mt WM NCLBUTTONDOWN = OxOOAl; const int WM NCMOUSEMOVE = OxOOAO;

if (m.Msg == WM NCLBUTTONDOWN) {

this.Opacity = 0.5;

if (m.Msg == WM NCMOUSEMOVE) {

this.Opacity = 1.0;

base.WndProc(ref m);



Неактивная форма

Вот вам еще один пример с прозрачностью формы. Когда на экране находятся несколько открытых форм, то это может вызвать ощущение некоторого дискомфорта. Я предлагаю вам следующий вариант (листинг 5.28). Можно отловить сообщение о том, что окно программы стало неактивным, и сделать его полупрозрачным. И наоборот, когда окно вновь станет активным, вернуть ему первоначальное состояние.

Листинг 5.28. Прозрачность у неактивной формы

protected override void WndProc(ref Message m) {

const int WM ACTIVATEAPP = OxOOlC;

if (m.Msg == WM ACTIVATEAPP) {

if (m.WParam.ToInt320 != 0) {

this.Opacity = 1.0;

else {

this.Opacity = 0.5;

base.WndProc(ref m);

Примечание

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

Запустите проект и потаскайте форму по экрану. Вы увидите, что при перемещении форма становится полупрозрачной.



I Листинг 5.29. Создание формы без границ и заголовка

forml.Text = string.Empty; forml.ControlBox = false;

Как убрать кнопку X из заголовка формы?

Еще один популярный вопрос, задаваемый на форумах- как убрать кнопку X в правом верхнем углу заголовка формы? Как ни странно, эта кнопка тесно связана с системным меню, точнее с последним ее пунктом Закрыть. Если мы уберем этот пункт из меню, то кнопка X на форме примет заблокированный вид. Для реализации этой задачи (листинг 5.30) нам понадобится функция Windows API GetSystemMenu, а также функции GetMenuItemCount, RemoveMenu И DrawMenuBar....

: Листинг 5.30. Объявление функций Windows API для системного меню

Флаги для системного меню

public enum MenuFlags

MF BYCOMMAND = 0x00000000, MF BYPOSITION = 0x00000400,

[Dlllmport( user32.dll )]

private static extern IntPtr GetSystemMenu(IntPtr hwnd, int bRevert);

[Dlllmport( user32.dll )]

private static extern int GetMenuItemCount (IntPtr hJMenu) ; [Dlllmport( user32.dll )]

private static extern int RemoveMenu (IntPtr hJMenu, int Position, MenuFlags uFlags);

Как создать формы без границ и заголовка?

Установите соответствующие значения в свойствах Text и ControlBox, как показано в листинге 5.29.



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

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