Создание окна
Из этой статьи вы узнаете, как создать и отобразить окно.
Классы Окон
Класс window определяет набор поведений, которые могут быть общими для нескольких окон. Например, в группе кнопок каждая кнопка имеет аналогичное поведение, когда пользователь нажимает кнопку. Конечно, кнопки не полностью идентичны. Каждая кнопка отображает собственную текстовую строку и собственные экранные координаты. Данные, уникальные для каждого окна, называются данными экземпляра.
Каждое окно должно быть связано с классом window, даже если программа когда-либо создает только один экземпляр этого класса. Оконный класс не является классом в смысле C++. Скорее, это структура данных, используемая внутренне операционной системой. Классы окон регистрируются в системе во время выполнения. Чтобы зарегистрировать новый класс окна, заполните структуру WNDCLASS :
// 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(&wc);
Создание окна
Чтобы создать новый экземпляр окна, вызовите функцию 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(&wc); // 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);
Поздравляем, вы создали окно!
Сейчас окно не содержит никакого содержимого и не взаимодействует с пользователем. В реальном графическом приложении окно будет реагировать на события пользователя и операционной системы. В следующем разделе описывается, как сообщения окна обеспечивают такого рода интерактивность.
См. также раздел
Перейдите к оконным сообщениям , чтобы продолжить этот модуль.
Учебник. Создание простого консольного приложения C# в Visual Studio (часть 1 из 2)
Изучая этот учебник, вы создадите и запустите консольное приложение C# с помощью Visual Studio, а также ознакомитесь с некоторыми возможностями интегрированной среды разработки (IDE) Visual Studio. Этот учебник представляет собой первую часть серии, состоящей из двух частей.
В этом руководстве выполняются следующие задачи:
- Создание проекта Visual Studio
- Создание консольного приложения C#
- Запустите отладку приложения.
- Закрытие приложения
- Проверка готового кода
В рамках части 2 вы расширите это приложение, добавив дополнительные проекты, изучите методы отладки и будете использовать сторонние пакеты.
Необходимые компоненты
Необходимо установить Visual Studio.
Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого.
Создание проекта
Сначала создайте проект приложения C#. Для этого типа проекта уже имеются все нужные файлы шаблонов.
- Откройте Visual Studio и выберите «Создать проект » в окне «Пуск».
- В окне Создание проекта выберите C# в списке языков. Затем выберите Windows в списке платформ и Консоль в списке типов проектов. Применив фильтры по языку, платформе и типу проекта, выберите шаблон Консольное приложение и щелкните Далее.
Примечание. Если шаблон Консольное приложение не отображается, выберите Установка других средств и компонентов. В установщике Visual Studio выберите кроссплатформенную рабочую нагрузку разработки .NET Core.
В Visual Studio Installer выберите Изменить. Вам может быть предложено сохранить результаты работы. Нажмите кнопку «Продолжить», чтобы установить рабочую нагрузку. Вернитесь к шагу 2 в процедуре Создание проекта.


Visual Studio открывает новый проект, включающий код по умолчанию «Hello World». Чтобы просмотреть его в редакторе, выберите файл кода Program.cs в окне Обозревателя решений, которое обычно находится в правой части Visual Studio.
Код «Hello World» по умолчанию вызывает метод WriteLine для отображения литеральной строки «Hello, World!» в окне консоли. Если нажать клавишу F5, программа по умолчанию запустится в режиме отладки. После запуска приложения в отладчике окно консоли остается открытым. Для закрытия окна консоли нажмите любую клавишу.
- Откройте Visual Studio и выберите «Создать проект » в окне «Пуск».
- В окне Создать проект выберите Все языки, а затем в раскрывающемся списке выберите C#. Выберите Windows в списке Все платформы. Затем в списке Все типы проектов выберите Консоль. Применив фильтры по языку, платформе и типу проекта, выберите шаблон Консольное приложение и нажмите Далее.
Примечание. Если шаблон Консольное приложение не отображается, щелкните Установка других средств и компонентов. В установщике Visual Studio выберите рабочую нагрузку разработки классических приложений .NET.
В Visual Studio Installer выберите Изменить. Вам может быть предложено сохранить результаты работы. Нажмите кнопку «Продолжить», чтобы установить рабочую нагрузку. Вернитесь к шагу 2 в процедуре Создание проекта.


Visual Studio открывает новый проект, включающий код по умолчанию «Hello World». Чтобы просмотреть его в редакторе, выберите файл кода Program.cs в окне Обозревателя решений, которое обычно находится в правой части Visual Studio.
Один оператор кода вызывает метод WriteLine для отображения литеральной строки «Hello, World!» в окне консоли. Если нажать клавишу F5, программа по умолчанию запустится в режиме отладки. После запуска приложения в отладчике окно консоли остается открытым. Для закрытия окна консоли нажмите любую клавишу.
Начиная с .NET 6, новые проекты, использующие шаблон консоли, создают не такой код, как в предыдущих версиях. Дополнительные сведения см. на странице Новые шаблоны C# для создания инструкций верхнего уровня.
Создание приложения
В этом разделе описаны следующие задачи:
- Ознакомление с некоторыми базовыми расчетами для целых чисел в C#.
- Добавление кода для создания простого приложения калькулятора.
- Отладка приложения для поиска и исправления ошибок.
- Оптимизация кода для повышения эффективности.
Вычисления с целыми числами
Давайте начнем с базовых расчетов для целых чисел в C#.
- В редакторе кода удалите созданный по умолчанию код Hello, World!. В частности, удалите строку с текстом: Console.WriteLine(«Hello World!»); .
- На его месте введите следующий код:
int a = 42; int b = 119; int c = a + b; Console.WriteLine(c); Console.ReadKey();
Обратите внимание, что при вводе кода функция IntelliSense в Visual Studio предлагает возможность автозавершения записи.


- В разделе Обозреватель решений в области справа выберите Program.cs, чтобы отобразить файл в редакторе кода.
- В редакторе кода замените код по умолчанию Hello World ( Console.WriteLine(«Hello World!»); ). Замените строку следующим кодом:
int a = 42; int b = 119; int c = a + b; Console.WriteLine(c); Console.ReadKey();
Если ввести код, функция IntelliSense Visual Studio предлагает возможность автозавершения записи.


Добавление кода для создания калькулятора
Давайте продолжим, добавив более сложный набор кода калькулятора в проект.
- В редакторе кода замените весь код в Program.cs следующим новым кодом:
using System; namespace Calculator < class Program < static void Main(string[] args) < // Declare variables and then initialize to zero. int num1 = 0; int num2 = 0; // Display title as the C# console calculator app. Console.WriteLine("Console Calculator in C#\r"); Console.WriteLine("------------------------\n"); // Ask the user to type the first number. Console.WriteLine("Type a number, and then press Enter"); num1 = Convert.ToInt32(Console.ReadLine()); // Ask the user to type the second number. Console.WriteLine("Type another number, and then press Enter"); num2 = Convert.ToInt32(Console.ReadLine()); // Ask the user to choose an option. Console.WriteLine("Choose an option from the following list:"); Console.WriteLine("\ta - Add"); Console.WriteLine("\ts - Subtract"); Console.WriteLine("\tm - Multiply"); Console.WriteLine("\td - Divide"); Console.Write("Your option? "); // Use a switch statement to do the math. switch (Console.ReadLine()) < case "a": Console.WriteLine($"Your result: + = " + (num1 + num2)); break; case "s": Console.WriteLine($"Your result: - = " + (num1 - num2)); break; case "m": Console.WriteLine($"Your result: * = " + (num1 * num2)); break; case "d": Console.WriteLine($"Your result: / = " + (num1 / num2)); break; > // Wait for the user to respond before closing. Console.Write("Press any key to close the Calculator console app. "); Console.ReadKey(); > > >
- В редакторе кода замените весь код в Program.cs следующим новым кодом:
// Declare variables and then initialize to zero. int num1 = 0; int num2 = 0; // Display title as the C# console calculator app. Console.WriteLine("Console Calculator in C#\r"); Console.WriteLine("------------------------\n"); // Ask the user to type the first number. Console.WriteLine("Type a number, and then press Enter"); num1 = Convert.ToInt32(Console.ReadLine()); // Ask the user to type the second number. Console.WriteLine("Type another number, and then press Enter"); num2 = Convert.ToInt32(Console.ReadLine()); // Ask the user to choose an option. Console.WriteLine("Choose an option from the following list:"); Console.WriteLine("\ta - Add"); Console.WriteLine("\ts - Subtract"); Console.WriteLine("\tm - Multiply"); Console.WriteLine("\td - Divide"); Console.Write("Your option? "); // Use a switch statement to do the math. switch (Console.ReadLine()) < case "a": Console.WriteLine($"Your result: + = " + (num1 + num2)); break; case "s": Console.WriteLine($"Your result: - = " + (num1 - num2)); break; case "m": Console.WriteLine($"Your result: * = " + (num1 * num2)); break; case "d": Console.WriteLine($"Your result: / = " + (num1 / num2)); break; > // Wait for the user to respond before closing. Console.Write("Press any key to close the Calculator console app. "); Console.ReadKey();
Добавление возможностей десятичного числа
Далее мы будем изменять этот код, добавляя функциональные возможности.
Пока наше приложение принимает и возвращает только целые числа. Например, при запуске программы и делении числа 42 на число 119 вы получите результат 0, что для нас недостаточно точно.
Чтобы исправить код для повышения точности при обработке десятичных чисел, выполните указанные ниже действия.
- Из Program.cs в редакторе Visual Studio нажмите клавиши CTRL+H, чтобы открыть элемент управления Find and Replace.
- Введите int в элементе управления, а затем введите float в поле Заменить.
- Выберите значки Учитывать регистр и Слово целиком в элементе управления или нажмите сочетание клавиш ALT+C и ALT+W.
- Щелкните значок Заменить все или нажмите сочетание клавиш ALT+A, чтобы выполнить поиск и замену.
- Еще раз запустите приложение калькулятора и разделите число 42 на число 119. Теперь приложение возвращает не просто ноль, а десятичное число.
Теперь приложение может возвращать результаты в виде десятичного числа. Давайте изменим код так, чтобы приложение могло выполнять операции над десятичными числами.
- Используйте элемент управления Найти и заменить, чтобы изменить каждый экземпляр переменной float на double и каждый экземпляр метода Convert.ToInt32 на Convert.ToDouble .
- Запустите приложение калькулятора и разделите число 42,5 на число 119,75. Теперь приложение принимает десятичные значения и возвращает более длинное десятичное число в качестве результата.
В разделе Revise the code (Пересмотр кода) можно уменьшить количество десятичных разрядов в результатах.
Отладка приложения
Вы улучшили базовое приложение калькулятора, но приложение еще не обрабатывает исключения, такие как ошибки ввода пользователей. Например, если пользователи пытаются разделить на ноль или ввести неожиданный символ, приложение может перестать работать, возвращать ошибку или возвращать непредвиденный нечисловой результат.
Давайте рассмотрим несколько типичных ошибок во входных данных, найдем их с помощью отладчика, если они там есть, и исправим код, чтобы устранить их.
Дополнительные сведения об отладчике и принципах его работы см. на странице Знакомство с отладчиком Visual Studio.
Исправление ошибки деления на ноль
При попытке деления числа на ноль консольное приложение может перестать отвечать, а затем покажет ошибку в редакторе кода.
Иногда приложение не зависает, а отладчик не отображает ошибку деления на ноль. Вместо этого приложение может вернуть непредвиденный нечисловой результат, например символ бесконечности. Приведенное ниже исправление кода по-прежнему применимо.
Давайте изменим код, чтобы он обрабатывал такую ошибку. В Program.cs замените код case «d»: следующим кодом:
// Ask the user to enter a non-zero divisor until they do so. while (num2 == 0) < Console.WriteLine("Enter a non-zero divisor: "); num2 = Convert.ToInt32(Console.ReadLine()); >Console.WriteLine($"Your result: / = " + (num1 / num2)); break; >
Когда вы добавите новый код, раздел с оператором switch будет выглядеть так, как показано на следующем снимке экрана:
Теперь, когда вы будете делить любое число на ноль, приложение запросит другое число и будет отображать запрос, пока вы не предоставите ненулевое значение.
Исправление ошибки формата
Если ввести буквенный символ, когда для приложения необходим цифровой символ, приложение остановит работу. Visual Studio отображает причину проблемы в редакторе кода.
Чтобы решить эту проблему, можно выполнить рефакторинг ранее введенного кода.
Пересмотр кода
Чтобы не делегировать всю обработку кода классу program , можно разделить приложение на два класса: Calculator и Program .
Класс Calculator выполняет основную часть работы для вычислений, а класс Program отвечает за пользовательский интерфейс и обработку ошибок.
-
В Program.cs удалите все и добавьте следующий новый Calculator класс:
class Calculator < public static double DoOperation(double num1, double num2, string op) < double result = double.NaN; // Default value is "not-a-number" if an operation, such as division, could result in an error. // Use a switch statement to do the math. switch (op) < case "a": result = num1 + num2; break; case "s": result = num1 - num2; break; case "m": result = num1 * num2; break; case "d": // Ask the user to enter a non-zero divisor. if (num2 != 0) < result = num1 / num2; >break; // Return text for an incorrect option entry. default: break; > return result; > >
class Program < static void Main(string[] args) < bool endApp = false; // Display title as the C# console calculator app. Console.WriteLine("Console Calculator in C#\r"); Console.WriteLine("------------------------\n"); while (!endApp) < // Declare variables and set to empty. string numInput1 = ""; string numInput2 = ""; double result = 0; // Ask the user to type the first number. Console.Write("Type a number, and then press Enter: "); numInput1 = Console.ReadLine(); double cleanNum1 = 0; while (!double.TryParse(numInput1, out cleanNum1)) < Console.Write("This is not valid input. Please enter an integer value: "); numInput1 = Console.ReadLine(); >// Ask the user to type the second number. Console.Write("Type another number, and then press Enter: "); numInput2 = Console.ReadLine(); double cleanNum2 = 0; while (!double.TryParse(numInput2, out cleanNum2)) < Console.Write("This is not valid input. Please enter an integer value: "); numInput2 = Console.ReadLine(); >// Ask the user to choose an operator. Console.WriteLine("Choose an operator from the following list:"); Console.WriteLine("\ta - Add"); Console.WriteLine("\ts - Subtract"); Console.WriteLine("\tm - Multiply"); Console.WriteLine("\td - Divide"); Console.Write("Your option? "); string op = Console.ReadLine(); try < result = Calculator.DoOperation(cleanNum1, cleanNum2, op); if (double.IsNaN(result)) < Console.WriteLine("This operation will result in a mathematical error.\n"); >else Console.WriteLine("Your result: \n", result); > catch (Exception e) < Console.WriteLine("Oh no! An exception occurred trying to do the math.\n - Details: " + e.Message); >Console.WriteLine("------------------------\n"); // Wait for the user to respond before closing. Console.Write("Press 'n' and Enter to close the app, or press any other key and Enter to continue: "); if (Console.ReadLine() == "n") endApp = true; Console.WriteLine("\n"); // Friendly linespacing. > return; > >
Закрытие приложения
- Закройте приложение «Калькулятор», если оно еще открыто.
- Закройте область вывода в Visual Studio.
- В Visual Studio нажмите клавиши CTRL+S, чтобы сохранить приложение.
Добавление системы управления исходным кодом Git
Теперь, когда вы создали приложение, вы можете добавить его в репозиторий Git. Visual Studio упрощает этот процесс с помощью инструментов Git, которые вы можете использовать непосредственно из IDE.
Git — это наиболее широко используемая современная система контроля версий, поэтому, независимо от того, являетесь ли вы профессиональным разработчиком или учитесь программировать, Git может быть для вас весьма полезным. Если вы новичок в Git, вы можете начать с сайта https://git-scm.com/. Там вы найдете памятки, популярную электронную книгу и видеоматериалы по основам GIT.
Чтобы связать свой код с Git, начните с создания нового репозитория Git, в котором находится ваш код:
- В строке состояния в правом нижнем углу Visual Studio нажмите Добавить в систему управления версиями и выберите Git.
- В диалоговом окне Создать репозиторий Git войдите в GitHub.
Имя репозитория заполняется автоматически в зависимости от расположения вашей папки. Ваш новый репозиторий является частным по умолчанию. Это означает, что только вы можете получить к нему доступ.
Совет Независимо от того, является ли ваш репозиторий общедоступным или частным, лучше всего иметь удаленную резервную копию кода, надежно хранящуюся на GitHub. Даже если вы не работаете с командой, удаленный репозиторий позволит получать доступ к коду с любого компьютера.
Чтобы узнать больше о том, как использовать Git с вашим приложением, см. документацию по управлению версиями Visual Studio.
Проверка: завершение кодирования
В этом руководстве вы внесли много изменений в приложение Калькулятора. Теперь оно более эффективно использует вычислительные ресурсы и обрабатывает большинство ошибок во входных данных.
Ниже мы собрали в один блок весь код:
class Calculator < public static double DoOperation(double num1, double num2, string op) < double result = double.NaN; // Default value is "not-a-number" which we use if an operation, such as division, could result in an error. // Use a switch statement to do the math. switch (op) < case "a": result = num1 + num2; break; case "s": result = num1 - num2; break; case "m": result = num1 * num2; break; case "d": // Ask the user to enter a non-zero divisor. if (num2 != 0) < result = num1 / num2; >break; // Return text for an incorrect option entry. default: break; > return result; > > class Program < static void Main(string[] args) < bool endApp = false; // Display title as the C# console calculator app. Console.WriteLine("Console Calculator in C#\r"); Console.WriteLine("------------------------\n"); while (!endApp) < // Declare variables and set to empty. string numInput1 = ""; string numInput2 = ""; double result = 0; // Ask the user to type the first number. Console.Write("Type a number, and then press Enter: "); numInput1 = Console.ReadLine(); double cleanNum1 = 0; while (!double.TryParse(numInput1, out cleanNum1)) < Console.Write("This is not valid input. Please enter an integer value: "); numInput1 = Console.ReadLine(); >// Ask the user to type the second number. Console.Write("Type another number, and then press Enter: "); numInput2 = Console.ReadLine(); double cleanNum2 = 0; while (!double.TryParse(numInput2, out cleanNum2)) < Console.Write("This is not valid input. Please enter an integer value: "); numInput2 = Console.ReadLine(); >// Ask the user to choose an operator. Console.WriteLine("Choose an operator from the following list:"); Console.WriteLine("\ta - Add"); Console.WriteLine("\ts - Subtract"); Console.WriteLine("\tm - Multiply"); Console.WriteLine("\td - Divide"); Console.Write("Your option? "); string op = Console.ReadLine(); try < result = Calculator.DoOperation(cleanNum1, cleanNum2, op); if (double.IsNaN(result)) < Console.WriteLine("This operation will result in a mathematical error.\n"); >else Console.WriteLine("Your result: \n", result); > catch (Exception e) < Console.WriteLine("Oh no! An exception occurred trying to do the math.\n - Details: " + e.Message); >Console.WriteLine("------------------------\n"); // Wait for the user to respond before closing. Console.Write("Press 'n' and Enter to close the app, or press any other key and Enter to continue: "); if (Console.ReadLine() == "n") endApp = true; Console.WriteLine("\n"); // Friendly linespacing. > return; > >
Следующие шаги
Перейдите ко второй части этого руководства:
Создание окна
Создание окна программными средствами
Как создать окно в приложении c# программными средствами, конкретно:какой класс для этого(и его.
Создание окна для программы
Всем привет, помогите не могу понять какой сделать проект что бы компилировал только этот код, что.
Создание процесса без окна
Здравствуйте, как создать процесс без окна? Создание процесса происходит следующим образом.
Создание окна c использованием WinApi из кода C#
Для начала спрошу делал ли кто нибудь что то подобное, если да, то вставьте полученный вами код.
мастер топоров
916 / 741 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
public partial class Form1 : Form { public Form1() { form2ISShown = false; InitializeComponent(); } public static bool form2ISShown; private void button1_Click(object sender, EventArgs e) { if (!form2ISShown) { (new Form2()).Show(); form2ISShown = true; } } }
1 2 3 4 5 6 7 8
public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void Form2_FormClosed(object sender, FormClosedEventArgs e) { Form1.form2ISShown = false; }
Как в C/C++ нарисовать свое окно без winapi?
Как в C/C++ нарисовать свое окно , что бы задать самому перетаскивание , сворачивание , закрытие ? Какой самый хардкорный способ? Одним словом полностью создать окно с нуля.
Спасибо откликнувшимся.
- Вопрос задан более трёх лет назад
- 2613 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 6
Армянское Радио @gbg Куратор тега C++
Любые ответы на любые вопросы
Никак. Вы до графики без WinApi не доберетесь, даже если будете писать свой драйвер.
Ответ написан более трёх лет назад
Нравится 4 3 комментария
Без WinAPI в винде вы даже чихнуть не сможете. А в линуксе — без ее API и так везде. Если вы пишите программу для какой-то ОС то должны придерживаться правил и рамок, которые налагает эта ОС, т.е. использовать ее API.
Перехватывайте соответствующие события и реализуйте их обработчики так как считаете нужным. Но это все в пределах WinAPI.
kin63camapa @kin63camapa
собственная os.
Alexanqp @Alexanqp Автор вопроса
Спасибо за ответы )
Гуглю за еду
Можете свою оболочку explorer написать на OpenGL или DirectX, например. А лучше, идите работать, вас там займут делом.
Ответ написан более трёх лет назад
Нравится 3 2 комментария
Alexanqp @Alexanqp Автор вопроса
Спасибо за ответ. Буду пробовать наверное с opengl.
Я работаю, но пишу не на плюсах. Это задание дали в институте, но его, как-то абстрактно описали и не дали наводку, как это реализовать.
Alexanqp: Если вы серьёзно собрались это делать, то к концу универа, думаю, закончите.
WinAPI на то и API чтобы общаться с системой. Без него никак.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
А какже qt?
Если автор имел ввиду нежелание лично использовать winapi, то это выход
Ответ написан более трёх лет назад
Нравится 1 9 комментариев
Да, но QT все равно в WinAPI уходит. Автор наоборот просит самый хардкорный способ.
kin63camapa @kin63camapa
15432: ну тут либо автор начитался джавы и тогда да, нужно смотреть в сторону qt и gtk; либо не очень понимает чего хочет (написать свою os для зачем то. )
15432: ну я поэтому и уточнил «лично», опосредованно без винапи наверное вариантов нет
Alexanqp @Alexanqp Автор вопроса
Я сразу сделал на WinApi, но преподаватель сказал, что это просто и нужно самому, как-то рисовать окно и т.д )
Alexanqp: как именно вы сделали на WinApi? Там два способа — программно и «дизайнерски». Программно это в коде задать в структуре все параметры размера окна, текстовые поля, и пр., а потом вызвать функцию создания окна. «дизайнерски» это создать ресурс Dialog, набросать в Visual Studio на нём все элементы (как .NET GUI в C#) и вызвать CreateDialog. Может преподаватель имел в виду что-то более простое, чем употреблять водку через задний проход для более полного усваивания.
Alexanqp @Alexanqp Автор вопроса
15432: «программно», но не в этом суть , ему не подошло такое решение из-за того, что там уже готовое API для создания окна. Он видимо имел ввиду тот способ, что Вы описали.