Рисование произвольной графики - C#
Формулировка задачи:
Надо нарисовать простейшую кнопочку на форме через класс Graphics, но получается хрень...
в чем собственно проблема... если рисовать кнопку через метод OnPaint то рисуется все очень хорошо, полу прозрачный черный, как и должно быть, НО проблема в том что надо отслеживать если мышка попала в зону кнопки то она сменит цвет... поэтому приходиться в MouseMove создавать эл-т графики... в чем проблема? заливка происходит чисто черным цветом(не прозрачным) и на все окно формы, а не только там где надо... как это предотвратить?
private void TestForm_MouseMove(object sender, MouseEventArgs e)
{
BufferedGraphics bg = CurrentContext.Allocate(this.CreateGraphics(), this.ClientRectangle);
bg.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(100, 0, 0, 0)); // Черный полпурозрачный
BufferedGraphicsContext CurrentContext = BufferedGraphicsManager.Current;
GraphicButton grbut = new GraphicButton(100, 10, 150, 40, "ЫЫЫЫ");
Font fnt = new Font("Times New Roman", 15);
this.DrawButton(grbut, fnt, true, bg.Graphics);
bg.Render();
}
public void DrawButton(GraphicButton button, Font fnt, bool SelectOnMoveOrClick, Graphics g)
{
if (SelectOnMoveOrClick)
button.Selected(MouseX, MouseY); // Вызываем фунцкию проверки наведения на кнопку
g.FillRectangle(semiTransBrush, button.X, button.Y, button.Width, button.Height);
g.DrawRectangle(new Pen(button.BrushNow), button.X, button.Y, button.Width, button.Height);
g.DrawString(button.Text, fnt, button.BrushNow, new Point(button.Width / 2 - ((int)(fnt.Size / 2) * button.Text.Length) + button.X - 10, button.Y + button.Height / 2 - fnt.Height / 2));
}Решение задачи: «Рисование произвольной графики»
textual
Листинг программы
...// это обработчик прорисовки кнопки, он передает 2 параметра sender и e
{
Graphics gr = e.Graphics;
// далее рисуешь на gr все что тебе нужно.
}
...