Как добавить кнопку в c
Перейти к содержимому

Как добавить кнопку в c

  • автор:

Создать кнопку с «нуля»

Я изучаю C#. Основы выучил и язык очень понравился. Теперь я хочу потренироваться и создать свою библиотеку с «нуля», которая будет выводить на экран кнопку. При этом я не хочу использовать встроенные библиотеки и классы .net (например, WPF, Rectangle, Point итп). Можете подсказать, с чего я должен начать и какие шаги предстоит предпринять? Необязательно, чтобы это была кнопка. Это может быть, допустим, простой квадрат.

Отслеживать
задан 30 июн 2020 в 6:49
11 2 2 бронзовых знака

Вы уж определитесь, на WPF или «без встроенных библиотек». Одно с другим не сочетается, так как WPF — это встроенная библиотека.

30 июн 2020 в 7:43

MSDN.WhiteKnight Вы меня поняли правильно. Но возможно я неправильно выразился. Я всего лишь любитель, сорри. Моя цель создать на C# с нуля бибилотеку, которая не будет использовать другие существующие библиотеки. И эта библиотека должна вывести на экран, например, квадрат.

30 июн 2020 в 10:15

Первые шаги тут будут изучение API, используемых для вывода графики (GDI/GDI+/OpenGL/DirectX) и изучение механизмов для взаимодействия с ними в .NET. WPF, если интересно, использует Direct3D 9, но там работа с графикой вынесена в отдельный компонент на C++ из-за сложности. Более реалистичным было бы начать с GDI: docs.microsoft.com/en-us/windows/win32/gdi/windows-gdi

30 июн 2020 в 11:31

Если уж WPF, то вам надо наследоваться от класса UIElement или FrameworkElement , изучите их, найдите их исходный код, на гитхабе он есть. Создавать их аналоги на первых этапах обучения смысла практически никакого. В любом случае, если вы даже задумали свой рендер для контролов, то вам придется создавать либо их аналоги, либо от них наследоваться, иначе WPF просто не поймет, как работать с вашим контролом. Либо да, брать DirectX API, и начинать рисовать самому (что не отменяет выше сказанного).

30 июн 2020 в 12:31

Спасибо, теперь разобрался немного. Для меня будет сложно заново изобретать велосипед. UWP тоже на Direct3D?

1 июл 2020 в 10:12

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Вам нужно почитать по User Control если вы хотите реализовать свой Custom Control. Можно почитать тут

Обновлено. Ну в силу того что условие задачи изменилось и цель всё таки продолжить изучение языка и его возможностей. Я рекомендую вам не изобретать велосипед на начальных этапах (это моё личное мнение спорить можно) — это сложно, нудно и все мы понимаем что гонки этот велосипед не выйграет, а скорее изучить то что сегодня востребовано, язык с# занимает свою нишу в программировании почитайте про это.

Отслеживать
ответ дан 30 июн 2020 в 7:07
Aziz Umarov Aziz Umarov
22.5k 2 2 золотых знака 10 10 серебряных знаков 33 33 бронзовых знака

По ссылке просто показывают, как скомбинировать TextBox и Button в UserControl. Не совсем похоже на то, о чем просит автор.

30 июн 2020 в 7:45
wpf сам не совсем winforms
30 июн 2020 в 8:02
и собственно кто запрещает комбинировать картинки
30 июн 2020 в 8:06

Согласен, вы показываете правильную рекомендацию по работе с контролами в WPF, все так и делают, но автор вероятнее всего просто хочет создать свой кастомный рендер прямоугольничка, и сделать его контролом.

30 июн 2020 в 12:43

Первые шаги тут будут изучение API, используемых для вывода графики (GDI/GDI+/OpenGL/DirectX) и изучение механизмов для взаимодействия с ними в .NET. WPF, если интересно, использует Direct3D 9, но там работа с графикой вынесена в отдельный компонент на C++ из-за сложности. Более реалистичным было бы начать с GDI: docs.microsoft.com/en-us/windows/win32/gdi/windows-gdi

Если уж WPF, то надо наследоваться от класса UIElement или FrameworkElement, изучите их, найдите их исходный код, на гитхабе он есть. Создавать их аналоги на первых этапах обучения смысла практически никакого. В любом случае, если даже задумали свой рендер для контролов, то придется создавать либо их аналоги, либо от них наследоваться, иначе WPF просто не поймет, как работать с контролом. Либо да, брать DirectX API, и начинать рисовать самому (что не отменяет выше сказанного).

В любом случает желательно не изобретать велосипед на начальных этапах — это сложно, нудно и все мы понимаем что гонки этот велосипед не выйграет, а скорее изучить то что сегодня востребовано, язык с# занимает свою нишу в программировании почитайте про это.

Visual C++. Button. Создание кнопки в процессе работы приложения. Урок 31

Как стать программистом? Python, Java, FrontEnd или .NET – что выбрать?

Как составить резюме, чтобы вас пригласили на собеседование

Как правильно составить резюме для поиска работы в международной IT-компании

10 преимуществ языка С++

Как новичкам найти работу во время войны? Реальный опыт и отзывы

Почему мне отказывают рекрутеры? Как получить первый оффер в IT

Чек-лист успешной адаптации или как пройти испытательный срок в компании?

10 ключевых ошибок во время собеседования

Подготовка к собеседованию в IT

Активный поиск первой работы в IT – советы и частые ошибки

Visual C++. Button. Создание кнопки в процессе работы приложения. Урок 31

Покупай подписку с доступом ко всем курсам и сервисам

Библиотека современных IT знаний в удобном формате

Выбирай свой вариант подписки в зависимости от задач, стоящих перед тобой. Но если нужно пройти полное обучение с нуля до уровня специалиста, то лучше выбирать Базовый или Премиум. А для того чтобы изучить 2-3 новые технологии, или повторить знания, готовясь к собеседованию, подойдет Пакет Стартовый.

  • Все видеокурсы на 3 месяца
  • Тестирование по 10 курсам
  • Проверка 5 домашних заданий
  • Консультация с тренером 30 мин

Halloween

  • Все видеокурсы на 1 год
  • Тестирование по 24 курсам
  • Проверка 20 домашних заданий
  • Консультация с тренером 120 мин
  • Скачивание видео уроков
  • Возможность приостановки обучения
  • Все видеокурсы на 6 месяцев
  • Тестирование по 16 курсам
  • Проверка 10 домашних заданий
  • Консультация с тренером 60 мин

Добавить кнопку

Доброго дня. Создал проект классическое приложение windows. Но не могу добавить кнопки и так далее. Где они находятся?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как добавить кнопку в столбец ListView
К примеру, как в торренте (кнопка воспроизведения).

Добавить свою кнопку на экран входа в систему windows 7
Подскажите, как можно это осуществить? В какую сторону смотреть?

Как при нажатии на кнопку создать еще одну кнопку?
Собственно во прос в выше, я нажимаю на кнопку, рядом должна появится еще одна, как такие вещи.

Нарушитель
1169 / 856 / 251
Регистрация: 30.06.2015
Сообщений: 4,461
Записей в блоге: 50

ЦитатаСообщение от terabyte32 Посмотреть сообщение

Где они находятся?

Они создаются посредством той же функции создания окна — CreateWindow. Только в параметрах должно быть WS_CHILD.

94 / 41 / 23
Регистрация: 18.09.2016
Сообщений: 379

terabyte32, + к указаниям стиля, помимо того, что все органы управления — дочерние окна, надо указать доп. стиль через поразрядное или к стилям с префиксом WS_. Для кнопок, переключателей и флажков это BS_

Регистрация: 10.02.2018
Сообщений: 252
Доброго дня. То есть перетащить в окно не получится, придётся в коде писать?
Нарушитель
1169 / 856 / 251
Регистрация: 30.06.2015
Сообщений: 4,461
Записей в блоге: 50

ЦитатаСообщение от terabyte32 Посмотреть сообщение

То есть перетащить в окно не получится, придётся в коде писать?

Можно и не писать, если изначально кидать на форму. Но лучше не пользоваться формами, а напрямую использовать API чтобы не разучиться программировать. А как пользоваться формами вам может подскажут более опытные в этом деле товарищи.

Регистрация: 10.02.2018
Сообщений: 252
Доброго дня. Использовать API это код что ли?
Нарушитель
1169 / 856 / 251
Регистрация: 30.06.2015
Сообщений: 4,461
Записей в блоге: 50

ЦитатаСообщение от terabyte32 Посмотреть сообщение

Использовать API это код что ли?

Да. Но не просто код, а низкоуровневый код, интерфейс, который предоставляет ОС, а не обёртки на вроде MFC

Регистрация: 05.01.2018
Сообщений: 125

Проще говоря, с++ — это язык, а WinApi — просто использует его синтаксис и базу. Там свои функции, классы и т.д. С++ используют не только для WinApi.
Чтобы людям было поудобней, создали форму, куда можно добавлять кнопки. Тогда редактор генерирует код автоматически.
Ну а если нет опыта работы с редактором или у него нет поддержки формы, пишут вот это Написать обычный текст на окне (там есть кнопки) , или проще:

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
#include #define button1 1 LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)  switch(Message) { case WM_CREATE:{ CreateWindow(TEXT("button"),TEXT("Button"), WS_VISIBLE  break; case WM_DESTROY: { PostQuitMessage(0); break; } default: return DefWindowProc(hwnd, Message, wParam, lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)  WNDCLASSEX wc; HWND hwnd; MSG msg; memset(&wc,0,sizeof(wc)); wc.cbSize = sizeof(WNDCLASSEX); wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszClassName = "WindowClass"; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); RegisterClassEx(&wc); hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass", "Program", WS_VISIBLE  return msg.wParam; }

и, еще проще,

1 2 3 4 5 6 7
#define button1 1 CreateWindow(TEXT("button"),TEXT("Button"), WS_VISIBLE | WS_CHILD, 10,10, //позиция кнопки по x y 90,35, //размеры кнопки по x y hwnd,(HMENU)button1,NULL,NULL );

Как добавить кнопку в c

Одним из наиболее используемых компонентов в графических программах является кнопка. В tkinter кнопки представлены классом Button . Основные параметры виджета Button:

  • command : функция, которая вызывается при нажатии на кнопку
  • compund : устанавливает расположение картинки и текста относительно друг друга
  • cursor : курсор указателя мыши при наведении на метку
  • image : ссылка на изображение, которое отображается на метке
  • pading : отступы от границ вилжета до его текста
  • state : состояние кнопки
  • text : устанавливает текст метки
  • textvariable : устанавливает привязку к элементу StringVar
  • underline : указывает на номер символа в тексте кнопки, который подчеркивается. По умолчанию значение -1, то есть никакой символ не подчеркивается
  • width : ширина виджета

Добавим в окно обычную кнопку из пакета ttk:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") # стандартная кнопка btn = ttk.Button(text="Button") btn.pack() root.mainloop()

Для создания кнопки используется конструктор Button() . В этом конструкторе с помощью параметра text можно установить текст кнопки.

Чтобы разместить виджет в контейнере (главном окне), у него вызывается метод pack() . На ОС Windows мы получим следующую кнопку:

Кнопка в tkinter в Python

Конструктор Button определяет различные параметры, которые позволяют настроить поведение и внешний вид кнопки. Однако конкретный набор параметров зависит от того, используем ли мы кнопки из пакета tkinter или из пакета tkinter.ttk.

Обработка нажатия на кнопку

Для обработки нажатия на кнопку необходимо установить в конструкторе параметр command , присвоив ему ссылку на функцию, которая будет срабатывать при нажатии:

from tkinter import * from tkinter import ttk clicks = 0 def click_button(): global clicks clicks += 1 # изменяем текст на кнопке btn["text"] = f"Clicks " root = Tk() root.title("METANIT.COM") root.geometry("250x150") btn = ttk.Button(text="Click Me", command=click_button) btn.pack() root.mainloop()

Здесь в качестве обработчика нажатия устанавливается функция click_button. В этой функции изменяется глобальная переменная clicks, которая хранит число кликов. Кроме того, изменяем текст кнопки, чтобы визуально было видно сколько нажатий произведено. Таким образом, при каждом нажатии кнопки будет срабатывать функция click_button, и количество кликов будет увеличиваться:

Обработка нажатия кнопки в tkinter и Python

Отключение кнопки

Для ttk-кнопки мы можем установить отключенное состояние с помощью метода state() , передав ему значение «disabled». С такой кнопкой пользователь не сможет взаимодействовать:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") btn = ttk.Button(text="Click Me", state=["disabled"]) btn.pack() root.mainloop()

При этом в метод state мы можем передать набор состояний, поэтому значение «disabled» передается внутри списка.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *