Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для LonelyWolf872
0 / 0 / 0
Регистрация: 06.03.2015
Сообщений: 9

Как нарисовать кнопку с помощью GDI+?

06.03.2015, 17:58. Показов 2028. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Несколько дней назад ко мне в голову пришла мысль можно ли нарисовать работающую кнопку через GDI+ & C#. У меня есть черновой наброс, но я не уверен что это правильный вариант. Можете подсказать что можно в нём доработать?
Вот код:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
namespace GDI_FrameWork
{
    public class Draw2D
    {
        Graphics graph;
        int click;
        float SX, SY;
        public Draw2D(Graphics graphics)
        {
            graph = graphics;
            SX = 1;
            SY = 1;
        }
        public void SetGraphics(Graphics graphics)
        {
            graph = graphics;
        }
        public void SetScale(float sx, float sy)
        {
            SX = sx;
            SY = sy;
        }
        public void Box(Rectangle rect, Color color)
        {
            graph.DrawRectangle(new Pen(color), rect);
            graph.FillRectangle(new SolidBrush(color), rect);
        }
        public void Box(Rectangle rect, float angle, Color color)
        {
            Bitmap bitmap = new Bitmap(rect.Width+2, rect.Height+2, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            Image i = (Image)bitmap;
            Graphics g = Graphics.FromImage(i);
            g.DrawRectangle(new Pen(color), 1f, 1f, rect.Width, rect.Height);
            g.FillRectangle(new SolidBrush(color), 1f, 1f, rect.Width, rect.Height);
            var tmp = graph.Save();
            graph.TranslateTransform(rect.X,rect.Y);
            graph.RotateTransform(angle);
            graph.DrawImage(i, 0, 0, rect.Width, rect.Height);
            graph.Restore(tmp);
        }
        public bool Button(Rectangle rect, MouseEventArgs MEA)
        {
            Color back = new Color();
            bool yes = false;
            back = Color.Blue;
            RectangleF rectf = new RectangleF(rect.X * SX,rect.Y * SY, rect.Width * SX, rect.Height * SY);
            if(MEA.Location.X > rectf.X && MEA.Location.X < rectf.X + rectf.Width && MEA.Location.Y > rectf.Y && MEA.Location.Y < rectf.Y + rectf.Height) //MEA - MouseEventArgs
            {
                back = Color.DarkBlue;
                click--;
                if (MEA.Button == MouseButtons.Left)
                {
                    back = Color.DarkCyan;
                    click = 2;
                }
                if (MEA.Button == MouseButtons.None && click == 1)
                {
                    yes = true;
                }
            }
            Box(rect, back);
            if (yes)
            {
                return true;
            }
            return false;
        }
        public void Text(PointF location, string text, Color color)
        {
            graph.DrawString(text, new Font(FontFamily.GenericSerif, 14f), new SolidBrush(color), location);
        }
        public void Clear(Color color)
        {
            graph.Clear(color);
        }
    }
}
*Повторяю код почти не оптимизирован!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.03.2015, 17:58
Ответы с готовыми решениями:

Я хочу нарисовать прямоугольник по нажатию на кнопку, GDI+
как это сделать? чтоб получить обьект Graphics я обрабатываю события Paint Graphics g; // обьект рисования хранится как экземпляр...

GDI+ нарисовать моргающую линию
Как в GDI+ нарисовать моргающую линию?

Как нарисовать кнопку?
Подскажите, как сделать такую графическую кнопку с анимацией как на этом сайте : Кнопка без текста! P.S: Без использования...

4
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
06.03.2015, 18:16
Цитата Сообщение от LonelyWolf872 Посмотреть сообщение
в голову пришла мысль можно ли нарисовать работающую кнопку через GDI+ & C#
Можно, а для какой цели? изменить ее внешний вид?
0
 Аватар для LonelyWolf872
0 / 0 / 0
Регистрация: 06.03.2015
Сообщений: 9
06.03.2015, 18:22  [ТС]
Ну да, хотелось сделать что-то типа GUI элементов, а с кнопкой были некоторые проблемы в реализации.
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
06.03.2015, 18:24
Лучший ответ Сообщение было отмечено LonelyWolf872 как решение

Решение

Наследоваться класс от Button и переопределить метод OnPaint
http://blogs.msdn.com/b/cjacks... 38164.aspx
1
 Аватар для LonelyWolf872
0 / 0 / 0
Регистрация: 06.03.2015
Сообщений: 9
06.03.2015, 18:31  [ТС]
Большое спасибо вам!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.03.2015, 18:31
Помогаю со студенческими работами здесь

Посредством GDI+ нарисовать шахматную доску
В C# посредствам GDI+ нарисовать шахматную доску...

Нарисовать определенную фигуру средствами GDI+
Необходимо нарисовать такую фигуру(с заливкой). Для построения даны угловые точки и радиус кривизны. Построение кривизны сводиться к...

GDI+ и заливка с помощью методов библиотеки GDI32.dll
Делаю аналог Paint, возникла проблема: необходимо залить область цветом или штрихованной кистью. Заливаю при помощи методов из gdi32.dll, ...

Как нарисовать треугольники с помощью sin
Как сделать: -начальное расположение - верхний левый угол поверхности рисования; -движение - по...

как нарисовать стрелку в GDI+?
Кто-нибудь подскажите как нарисовать стрелку.я нарисовал линию, теперь чтобы получилась стрелка мне надо построить треугольник на конце...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru