На самом деле я сделал пользовательский элемент управления, что его интерфейс похож на «стеклянные окна» в Windows Vista и Seven.Моим шаблоном был этот URL: extremestudio.ro/blog/?p=99
с использованием «Photoshop» и рисование каждого слоя с помощью классов рисования C # и .Net, я наконец-то нарисовал его.На первом шаге я создаю класс растрового изображения, а затем каждый слой будет нарисован на нем с использованием графического контура и кистей и т. Д.
вот элемент управления: стеклянная панель (сначала необходимодобавьте файл «refle.png» к ресурсам вашего проекта, а затем добавьте класс в проект, затем создайте, ...) этот элемент управления наследуется от Panel в пространстве имен форм
protected override void OnCreateControl()
{
draw();
BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
Parent.Move += new EventHandler(Parent_Move);
base.OnCreateControl();
}
void Parent_Move(object sender, EventArgs e)
{
draw();
}
public void draw()
{
if (Width < 20 || Height < 20)
{
return;
}
Bitmap b = new Bitmap(Width, Height);
Graphics gr = Graphics.FromImage(b);
GraphicsPath gp=new GraphicsPath();
LinearGradientBrush br;
gr.SmoothingMode = SmoothingMode.HighSpeed;
//draw shadow(black glow)
for (int i = 0; i < 10; i++)
{
gp = DrawRoundRect(i, i, Width - i * 2 - 1, Height - i * 2 - 1, 7);
br = new LinearGradientBrush(Bounds, Color.FromArgb(i * 3, Color.Black), Color.FromArgb(i * 3, Color.Black), LinearGradientMode.Vertical);
gr.DrawPath(new Pen(br, 4), gp);
br.Dispose();
}
//fill white 50
gp = DrawRoundRect(9, 9, Width - 19, Height - 19, 7);
br = new LinearGradientBrush(Bounds, Color.FromArgb(30, Color.White), Color.FromArgb(30, Color.White), LinearGradientMode.Vertical);
gr.FillPath(br, gp);
это было частью кода рисования.Я окончательно установил созданное растровое изображение на фон панели.
Я думаю (не помню), также я использую метод переопределения "onPaint ()", ... но программа потерпела крах.потому что событие рисования происходит последовательно.
ОК,
Моя проблема заключается в низкой эффективности этого элемента управления при перемещении и изменении размера родительской формы.потому что это работает, потому что вызов метода «draw» для элемента управления и когда вызов метода получил много, это будет замедлять работу приложения и, что более важно, сильно загружать процессор.
Я хочу, чтобы вы узналимне способ нарисовать пользовательский интерфейс этого элемента управления
1 с использованием точечной сети 2.0
2-эффективный
есть есть способ рисоватьПользовательский интерфейс, использующий DirectX, ...? (Я имею в виду не WPF)
, если нет никакого способа, я удалю отражающую часть кода, которая вызывает высокую загрузку ЦП.
спасибо.
спасибо всем за внимание.
Я удаляю все коды, которые замедляют работу программы.Я упрощаю это до простой границы и тени на нем.и это все еще прекрасно.
но мой вопрос об использовании DirectX для рисования элементов управления все еще жив.