Все оконные приложения .NET используют класс Form, который размещается в пространстве имен System.Windows.Forms одноименной библиотеки System.Windows.Forms.dll. Приложения, также, часто используют ряд графических возможностей, размещенных в классах библиотечной сборки System.Drawing.dll. Нужна также сборка System.dll.
Создание пустой заготовки оконного приложения
Конечно, оболочка имеет удобные мастера для создания приложений различных типов, но для дальнейшего изучения возможностей языка C# при создании оконных приложений начнем построение кода с нуля.
- Выполните команду меню File/New/Project и выберите из диалогового окна мастера шаблон Empty Project (пустой проект), а также определите имя проекта MyApp и его размещение в файловой системе компьютера. Проследите, чтобы флаг Create directory for solution был сброшен, иначе будет создан каталог для решения и подкаталог для проекта
Уроки Python / Как в Python создать графическое окно
Обратите внимание, что панель Solution Explorer не отображает ни одного файла
Обратите, также, внимание, что панель Object Browser уже содержит ссылку на базовую сборку mscorlib.dll ( Microsoft Common Object Runtime Library или Multilanguage Standard Common Object Runtime Library ). Она автоматически подключается к проекту, поскольку содержит базовые типы, необходимые для всех приложений. Наш проект тоже присутствует в этой панели, как будующая сборка, но пока сырая.
- Командой Project/Add Reference вызовите диалоговое окно оболочки и добавьте к проекту ссылки на библиотечные сборки System.dll, System.Windows.Forms.dll и System.Drawing.dll
Создание экземпляра класса Form
- Добавьте к проекту пустой файл с именем Program.cs командой Proiect/Add New Item
- Заполните файл следующим кодом
class EntryPoint < public static void Main() < // Создание графического окна System.Windows.Forms.Form frm = new System.Windows.Forms.Form(); // Задержка консольного окна System.Console.ReadLine(); >>
Листинг 6.1 . Код файла Program.cs
Создание окна
Из этой статьи вы узнаете, как создать и отобразить окно.
Классы Окон
Класс window определяет набор поведений, которые могут быть общими для нескольких окон. Например, в группе кнопок каждая кнопка имеет аналогичное поведение, когда пользователь нажимает кнопку. Конечно, кнопки не полностью идентичны. Каждая кнопка отображает собственную текстовую строку и собственные экранные координаты. Данные, уникальные для каждого окна, называются данными экземпляра.
Каждое окно должно быть связано с классом window, даже если программа когда-либо создает только один экземпляр этого класса. Оконный класс не является классом в смысле C++. Скорее, это структура данных, используемая внутренне операционной системой. Классы окон регистрируются в системе во время выполнения. Чтобы зарегистрировать новый класс окна, заполните структуру WNDCLASS :
СОЗДАЁМ ОКНО — C++ WINAPI ЧАСТЬ #1
// Register the window class. const wchar_t CLASS_NAME[] = L»Sample Window Class»; WNDCLASS wc = < >; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.lpszClassName = CLASS_NAME;
Необходимо задать следующие элементы структуры:
- lpfnWndProc — это указатель на определяемую приложением функцию, называемую процедурой окна или оконным процессом. Процедура окна определяет большую часть поведения окна. На данный момент это значение представляет собой прямое объявление функции. Дополнительные сведения см. в статье Написание процедуры Window.
- hInstance — это дескриптор экземпляра приложения. Получите это значение из параметра hInstance объекта wWinMain .
- lpszClassName — это строка, идентифицирующая класс окна.
Имена классов являются локальными для текущего процесса, поэтому имя должно быть уникальным только в рамках процесса. Однако стандартные элементы управления Windows также имеют классы. Если вы используете любой из этих элементов управления, необходимо выбрать имена классов, которые не конфликтуют с именами классов элементов управления. Например, класс window для элемента управления button называется Button.
Структура WNDCLASS содержит другие члены, которые здесь не показаны. Вы можете задать для них нулевое значение, как показано в этом примере, или заполнить их. Дополнительные сведения см. в разделе WNDCLASS.
Затем передайте адрес структуры WNDCLASS в функцию RegisterClass . Эта функция регистрирует класс window в операционной системе.
RegisterClass(
Создание окна
Чтобы создать новый экземпляр окна, вызовите функцию CreateWindowEx :
HWND hwnd = CreateWindowEx( 0, // Optional window styles. CLASS_NAME, // Window class L»Learn to Program Windows», // Window text WS_OVERLAPPEDWINDOW, // Window style // Size and position CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, // Parent window NULL, // Menu hInstance, // Instance handle NULL // Additional application data ); if (hwnd == NULL)
Подробные описания параметров см. в разделе CreateWindowEx. Вот краткая сводка:
- Первый параметр позволяет указать некоторые необязательные варианты поведения для окна, например прозрачные окна. Задайте для этого параметра нулевое значение для поведения по умолчанию.
- CLASS_NAME — это имя класса окна. Это имя определяет тип создаваемого окна.
- Текст окна используется различными способами различными типами окон. Если в окне есть строка заголовка, текст отображается в строке заголовка.
- Стиль окна — это набор флагов, определяющих внешний вид окна. Константная WS_OVERLAPPEDWINDOW на самом деле представляет собой несколько флагов в сочетании с побитовой OR . Вместе эти флаги предоставляют окна заголовок окна, границу, системное меню и кнопки Свернуть и Развернуть . Этот набор флагов является наиболее распространенным стилем для окна приложения верхнего уровня.
- Для положения и размера константная CW_USEDEFAULT означает использование значений по умолчанию.
- Следующий параметр задает родительское окно или окно владельца для нового окна. Задайте родительский параметр if для создания дочернего окна. Для окна верхнего уровня задайте для этого значения значение NULL .
- Для окна приложения следующий параметр определяет меню для окна. В этом примере меню не используется, поэтому значение равно NULL .
- hInstance — это дескриптор экземпляра, описанный выше. См . раздел WinMain: точка входа приложения.
- Последний параметр является указателем на произвольные данные типа void* . Это значение можно использовать для передачи структуры данных в процедуру окна. Один из возможных способов использования этого параметра см. в разделе Управление состоянием приложения.
CreateWindowEx возвращает дескриптор новому окну или ноль в случае сбоя функции. Чтобы отобразить окно, то есть сделать окно видимым, передайте дескриптор окна в функцию ShowWindow :
ShowWindow(hwnd, nCmdShow);
Параметр hwnd — это дескриптор окна, возвращаемый командой CreateWindowEx. Параметр nCmdShow можно использовать для свернуть или развернуть окно. Операционная система передает это значение программе через функцию wWinMain .
Ниже приведен полный код для создания окна. Помните, что WindowProc по-прежнему представляет собой только прямое объявление функции.
// Register the window class. const wchar_t CLASS_NAME[] = L»Sample Window Class»; WNDCLASS wc = < >; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.lpszClassName = CLASS_NAME; RegisterClass( // Create the window. HWND hwnd = CreateWindowEx( 0, // Optional window styles. CLASS_NAME, // Window class L»Learn to Program Windows», // Window text WS_OVERLAPPEDWINDOW, // Window style // Size and position CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, // Parent window NULL, // Menu hInstance, // Instance handle NULL // Additional application data ); if (hwnd == NULL) < return 0; >ShowWindow(hwnd, nCmdShow);
Поздравляем, вы создали окно!
Сейчас окно не содержит никакого содержимого и не взаимодействует с пользователем. В реальном графическом приложении окно будет реагировать на события пользователя и операционной системы. В следующем разделе описывается, как сообщения окна обеспечивают такого рода интерактивность.
См. также раздел
Перейдите к оконным сообщениям , чтобы продолжить этот модуль.
Источник: learn.microsoft.com
Основы Electron JS
В этой статье мы разберём основы создание приложения для ПК на
Electron js, расскажу лишь базовые принципы, как можно это всё сделать.
В качестве примере мы будем портировать пинг понг который мы сделали в одной из прошлых статей, если не знаете как его сделать, то прочитайте: «Javascript пинг понг создаём игру с использованием canvas», так как тут не будем объяснять как это сделать, а только портируем.
Ещё можете скачать этот пинг понг для браузера из моего GitHub репозитория, там он ещё не много доработан.
Electron js приложение:
Сейчас вы убедитесь что создавать приложения на javascript просто.
Базовая настройка electron:
Теперь перейдём к созданию этого приложения, для начала скажу, у вас обязательно должен быть установлен Node.js, если его нет, то посмотрите эти две статьи:
- Как установить Node.js на любую версию Windows;
- Как установить Node.JS на Linux или на Ubuntu 19.04;
После этого инициализируем проект, для этого создаём папку с проектом, я её назову «electron-js», открою её в терминале и введу эту команду:
PowerShell
npm init -y
Таким образом у вас должна появиться файл «package.json», и теперь скачиваем electron-js, вот что пишем в терминале:
PowerShell
npm i — save -dev electron
Теперь для более удобного запуска немного настроем «package.json»:
JavaScript
«name» : «my-electron-app» ,
«version» : «0.1.0» ,
«author» : «your name» ,
«description» : «My Electron app» ,
«main» : «main.js»
«start» : «electron .»
После в папке создадим ещё четыре файла:
- main.js — Основной файл, откуда будет компилироваться electron;
- script.js — Файл со всей логикой программы;
- index.html — HTML файл для в котором всё и будет работать;
- style.css — Файл стилей;
Создание проекта:
Теперь начнём разрабатывать сам проект, первым делом нужно всё сделать во файле «main.js», заходим в него и вот что пишем:
JavaScript
// Портируем нужные компоненты
const < app , BrowserWindow >= require ( ‘electron’ )
// Функция для создания окна приложения
function createWindow ( ) <
// Создаём окно
const win = new BrowserWindow ( <
width : 1000 ,
height : 800 ,
autoHideMenuBar : true ,
webPreferences : <
nodeIntegration : true
// Вывод файла index.html
win . loadFile ( ‘index.html’ )
// Проверяем инициализацию electron
app . whenReady ( ) . then ( createWindow )
// Проверка события закрытия окна
app . on ( ‘window-all-closed’ , ( ) = > <
if ( process . platform !== ‘darwin’ ) <
// Отслеживание активации приложения
app . on ( ‘activate’ , ( ) = > <
if ( BrowserWindow . getAllWindows ( ) . length === 0 ) <
createWindow ( )
Давайте разберём этот код, в начале мы портируем все зависимости, потом создаём функцию, которая будет создавать окно приложения.
Там мы создаём объект окна с параметрами, width и height это ширина и высота окна, которая будет при запуске, autoHideMenuBar если true то убирает верхнее меню приложения, так как мы для игры делаем, то оно нам не нужно.
Последнее что есть во функции, это win.loadFile() , оно отвечает за то, какой файл вывести в окне.
После того как закончили с функцией, начинаем отслеживать события приложения через метод on() объекта app , который мы импортировали.
Первым проверяем инициализацию electron, если она есть, то запускаем функцию createWindow() , тем самым создаём окно.
Второе проверяем закрытие окна, если окно есть, и оно открыто, то выключаем всё приложение, последние проверяем активацию приложения, если это происходит, то проверяем если нет окон, то создаём ещё одно.
На этом с главным файлом покончено, теперь перейдём к «index.html»:
Источник: prognote.ru