Создание оконного приложения в visual studio

Создание оконного приложения в visual studio

Необходимые знания:

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

Создайте новый проект, в качестве типа шаблона установите приложение Windows Forms, как показано на рисунке 1:
Рисунок 1. Создание нового проекта.
Назовите проект RandWindow и нажмите кнопку ОК.

Рабочее окно MS Visual Studio содержит следующие вспомогательные окна (рис. 2).
Рисунок 2. Вспомогательные окна.
На рисунке цифрам отмечены:

  1. Окно Toolbox (Панель элементов управления) — элементы управления вы можете разместить на создаваемой форме.
  2. Окно Solution Explorer (Обозреватель решений) — здесь вы сможете увидеть следующие узлы: Properties — настройки проекта, Links (Ссылки) — подключенные к проекту библиотеки, а также созданные и подключенные к проекту файлы исходных кодов (с расширением .cs) и подключенные к проекту формы (например, Form1).
  3. Окно Class View (Окно классов) — здесь представлены все созданные в программе классы.
  4. Окно Properties (Свойства) — выбрав любой элемент управления или даже форму, вы сможете увидеть все параметры данного объекта, а также изменить значения, установленные в них по умолчанию.

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

Добавление новых элементов управления на форму

Итак, после того как вы ввели имя проекта, установили необходимый шаблон и нажали кнопку ОК, MS Visual Studio автоматически создаст каркас оконного приложения, после чего мы сможем добавить на него новые оконные элементы.

Для этого необходимо перетащить необходимый оконный элемент из окна инструментов (ToolBox).

Нашему окну потребуется 2 элемента поля для ввода, в которые мы будем выводить координаты указателя мыши, что облегчит нам понимание работы программы.

В центре окна будет находиться надпись, которую мы создадим с помощью элемента Label.
Снизу будут расположены 2 кнопки.

Немного растяните заготовку окна. Если вы нажмете на него правой кнопкой, то откроется контекстное меню. В нем нажмите на пункте свойства, после чего вы сможете изучить различные параметры окна, которые вы можете изменить. На рисунке 3 изображены самые (как правило) необходимые свойства:
Рисунок 3. Различные свойства окна (формы) в C# .NET.
Немного растяните заготовку окна и добавьте все необходимые элементы. На рисунке 4 вы можете увидеть их в окне ToolBox:
Рисунок 4. Перетаскивайте необходимые элементы из окна Toolbox на создаваемую форму.

Перейдите в свойства строки Label1, где измените текст на «Вы стремитесь сделать мир лучше?». Также измените тип шрифта, для этого найдите свойство Font (рис. 5).
Рисунок 5. Свойство Font элемента Label.
После чего установите тип шрифта Tahoma, ширину шрифта Bold и размер равный 16 (рис. 6).
Рисунок 6. Установки шрифта.
Далее измените текст на кнопках, используя свойство Text.

Полученная заготовка окна программы будет выглядеть следующим образом (рис. 7).
Рисунок 7. Форма будет выглядеть следующим образом.

Техническая часть работы программы

  1. Сначала мы добавим обработчик события перемещения мыши и реализуем вывод ее координат x и y в два созданных поля ввода.
  2. Далее мы создадим функции обработчики щелчка по каждой из клавиш мыши (особенно усердные пользователи все же смогут попасть по кнопке «Да, конечно!»).
  3. Далее мы добавим код, реализующий случайное перемещение окна в том случае, если курсор приблизиться к кнопке «Да, конечно!».

Определение перемещения указателя мыши по форме

Щелкните непосредственно на части формы создаваемого приложения (НЕ на одном из элементов).

Теперь перейдите к свойствам формы с помощью щелчка правой кнопки мыши -> контекстное меню свойства.

Теперь необходимо перейти к списку возможных событий, которые может получать данное окно. Для этого щелкните на кнопке «Event» (события), как показано на рисунке 8:
Рисунок 8. Переход к списку возможных событий.
Когда пользователь передвигает указатель мыши по нашему окну, операционная система посылает сообщение программе с текущими координатами указателя. Они-то нам и нужны.

Чтобы назначить обработчик данного события, найдите строку MouseMove (рис. 9), после чего сделайте двойной щелчок в поле справа от нее – автоматически добавится обработчик события движения мыши и добавится функция Form1_MouseMove в коде нашей программы.
Рисунок 9. После двойного щелчка справа от MouseMove появиться данная строка, и автоматически совершится переход к коду функции-обработчика данного события.
Добавьте в эту функцию 2 строки, чтобы ее код стал выглядеть следующим образом.

Данная функция, обрабатывающая событие перемещения указателя мыши над формой, получает 2 параметра: объект отправитель и экземпляр класса MouseEventsArgs, содержащий информацию о координатах указателя мыши и других текущих свойствах.

textBox1 и textBox2 это экземпляры класса textbox, реализующие управление нашими элементами поля для ввода.

Член данных экземпляров Text позволяет установить текст в данных полях.

Таким образом, если теперь откомпилировать программу (F5), при перемещении указателя мыши по форме окна мы будем видеть координаты указателя (внутри формы), которые будут непрерывно изменяться.

Читайте также:  Как открывать файл iso

Теперь вернемся к заготовке нашей формы. Для это щелкните на соответствующей закладке (Form1.cs [Конструктор]), как показано на рисунке 10:
Рисунок 10. Переход к конструктору форм C#.
Сделайте двойной щелчок по первой кнопке: Visual Studio автоматически добавит код обработки данной кнопки при нажатии.

Добавьте следующие строки кода:

Теперь снова вернитесь к конструктору и добавьте вторую кнопку, также с помощью двойного щелчка по ней.

Она будет содержать следующий код:

Как видите, здесь мы немного усложнили код вызова окна-сообщения, чтобы продемонстрировать то, как оно работает, более подробно. Все параметры передаваемые в функцию Show закомментированны в исходном коде.

Теперь нам осталось только реализовать перемещение окна в тот момент, когда мышь приближается к кнопке «Да, конечно».

Для этого мы добавим код в функцию:

private void Form1_MouseMove(object sender, MouseEventArgs)

Принцип очень прост: получая координаты движения мыши, мы проверяем не входят ли они в квадрат, очерчивающий нашу кнопку с небольшим запасом. Если да, то мы генерируем 2 случайных числа, которые будут использованы для перемещения окна.

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

Также нам понадобится объявить несколько "рабочих" переменных, которые мы будем в дальнейшем использовать.

Генерация случайных чисел

Класс Random в C# представляет собой генератор псевдослучайных чисел — т.е. данный класс отвечает за выдачу последовательности чисел, отвечающую определенным статистическим критериям случайности.

Random rnd = new Random();

Здесь мы объявили экземпляр класса Random (rnd), с помощью которого мы будем генерировать случайные числа. В дальнейшем мы будем использовать код, вида rnd.Next (диапазон_генерации) или rnd.Next (от, до -1) для генерации случайного числа.

Также мы объявим еще несколько переменных, часть из которых сразу будет инициализирована.

tmp_location объявляется для того, чтобы в будущем временно хранить текущее положение окна.

Также нам следует подумать о том, что при случайном перемещении, наше окно может выйти далеко за пределы экрана.

Чтобы определить разрешение экрана в C# .NET, мы будем использовать:

_h и _w будут хранить в себе размеры экрана пользователя, которые определяются при их инициализации.

Теперь код этой функции будет выглядеть следующим образом:

Вот, собственно, и все. Откомпеллировав приложение, можете попробовать нажать на кнопку "Да, конечно". Это будет крайне трудно.

Рассмотрим сегодня такой тип приложений приложения win32 на диалоговых окнах, visual C++, создание диалоговых окон. Приложения для windows делятся на три вида: 1. консольные — это самый простой тип приложений, 2.win32 приложения на диалоговых окнах — это самый простой тип win32 приложений и 3.просто приложения win32 это такие, где создаются дочерние окна, множество окон. Третий тип приложений считается самым сложным типом, консольные самый простой тип. Консольные приложения мы умеем создавать, а от увы win32 приложения нет.

Зачем нужно visual C++, создание диалоговых окон

Как правило все коммерческие программы содержать сильный GUI, который довольно тяжело создавать, можно например посмотреть такие программы как microsoft word или exel да и много других. Там программируются множество дочерних окон, создается множество элементов управления там сотни окон, я хз. как такие приложения создавать, они так сложновато устроены. Мы рассмотрим и будем создавать приложения которые будут состоять всего навсего из одного окошка с набором элементов. Сам я недавно с ними познакомился. Будем создавать диалоговые окна.

Даже не знаю с чего начать сам слабо в этой теме разбираюсь и так наверно начну с создания проекта. Создаем новый проект

Нажимаем Ок, затем появится окошко жмем кнопку Далее и мы попадаем в окошко в котором ставим галочку на «пустой проект»

жмем готово и у нас создался новый пустой проект.

Создание файла main.cpp

Дальше создадим файл main.cpp со следующим кодом:

Короче вызывается просто функция DialogBox() которой передается в качестве параметра собственная процедура DlgProc() в которой мы обрабатываем 3 вида событий: WM_INITDIALOG, WM_COMMAND, WM_CLOSE. Ну в первый WM_INITDIALOG мы попадаем сразу при создании программы когда производится инициализация окна, в третий WM_CLOSE попадаем когда закрываем окно (нажимем крестик), ну и во втором параметре WM_COMMAND мы уже обрабатываем собственные события. Как видно наша процедура возвращает либо FALSE либо TRUE, если мы возвращаем FALSE, то у нас вызывается процедура которая вырисовывает окно, если мы вернем TRUE, то это означает что функция стандартная для прорисовки окна не вызовется. Это так небольшой ликбез по теории

visual C++, создание диалоговых окон, создание самого окна в редакторе

Идем дальше, а дальше нам нужно создать само окно в визуальном редакторе, так называемый файл ресурсов, все создается автоматически, нам не нужно ничего в ручную создавать просто нажимаем в обозревателе решений правую клавишу на проекте и выбираем добавить ресурс

Читайте также:  Как сделать многостраничный tiff файл

выбираем и мы попадаем в окно «Добавление ресурса»

Выбираем Dialog и нажимаем создать

Все диалог создан, в «Панель элементов» мы видим какие элементы мы можем добавлять, а в «Свойства» мы можем изменять свойства каждого элемента. Дальше компилируем проект, нажимаем Ctrl+F5 и у нас создается окошко с кнопкой ок и отмена

По нажатию на кнопку Ок у нас вызывается окошко

А по нажатии на кнопку отмена вызывается другое информационное окошко

Что происходит

Это все происходит потому что наша функция DialogBox() при завершении функцией EndDialog(hwnd,1); возвращает второй ее параметр поэтому в WinMain() у нас ret принимает либо 1 либо 0 смотря как была завершена функция DialogBox(), это нужно для того что б в приложениях в которых много окон, что б можно было определять какая кнопка была нажата, Ок или Отмена, это мы будем просто понимать, если Ок, то нужно применить изменения, а если Отмена то ничего не делать. Так как у нас одно оконное приложение, то нам это не нужно разбирать visual C++, создание диалоговых окон.

Это короче основа visual C++, создание диалоговых окон, от как из всего выше видно что наше приложение на диалоговых окнах очень просто создается, мы дальше разберем код как можно ввести текст через editbox и вывести на экран, а так же разберем список. Неахота сильно описывать, я просто покажу скрин проги и ниже код ее, ну а дальше опишу немножко как она работает, и так приступим, начнем со Edit Control и Button

Edit Control и Button

И так это просто поле для ввода текста и кнопка. И так создаем в визуальном редакторе для нашего прооекта visual C++, создание диалоговых окон следующий каркас:

Ну и код для работы с каркасом:

Лень описывать что нить, просто пошарте в коде, попробуйте что нить поменять, мы тут используем функцию для получения содержимого поля функции

Ну а для того что б данные вывести в поле мы используем функцию

Тут ничего не могу сказать, сам не сильно знаю, нужно читать дополнительную литературу или МСДН, но лучше конечно Питзольда.

Дальше рассмотрим программу для работы с List Box

List Box.

Это элемент список, вы должны снова создать каркас программы.

Ну и код к этому диалоговому окну:

Описание проги

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

Рассмотрим используемые функции, тут немного функций использовано. При выделении элемента из списка у нас отправляется в наше приложение команда и мы ее можем выловить в case IDC_LIST1: , там создается оператор switch (HIWORD(wParam)) и мы ловим параметр case LBN_SELCHANGE: он будет передан при выделении списка. Мы в общем создали обработчик этого события, для того что бы определить какой элемент был выделен, получить его порядковый номер мы используем функцию

для того что б получить именно само значение строки используем

для удаления элемента используем функцию

для добавление элемента в список юзаем функцию

Создание диалоговых окон — ИТОГИ

Что еще сказать? Наша процедура для обработки событий состоит из трех частей. В первой части инициализируется наше приложение. Там мы инициализировали наш список тремя значениями. Пожалуй это и все. Я сам с этими функциями и возможностями недавно познакомился. Для меня это все новенькое, но уже с данными знаниями мы можем создавать какие нить приложения.

Это вообще то мелочь что мы изучили, если посмотреть визуальный редактор, то там очень много элементов и каждый элемент имеет различные свойства. То что мы рассмотрели сейчас это мелочь «ПУЗАТАЯ». Будем дальше конечно пополнять свой запас знаний, но с этими знаниями мы уже можем создавать более менее нормальные приложения. Ну от например у меня дальше по учебнику идет приложение простая база данных, от я думаю что ж сделать создать ее свою все полностью или использовать тот код что в приложении. Там библиотека dll используется. Я беспокоюсь что ее на моем компе нету. Наверно попытаюсь все таки запустить то приложение что в книге, а затем уже свое приложение создам, где я все напишу на С++ без использования либы БД.

Мне несложно записать в текстовый файл данные, а затем их оттуда извлечь, это так сказать приложение база данных телефонных номеров. Нам уже эти знания по ВИНАПИ дают возможность создавать такие приложения плюс мы будем конечно пополнять свой запас знаний по созданию ГУИ. После этой простой БД мы создадим так же простой текстовый редактор, который будет сохранять файл, открывать файл, создавать файл и все это легко делается на ВИНАПИ. Ладно приступим, хватит писать пора дело делать 🙂 . ГУИ наконец то, аж не верится, что я дошол до его изучения.

Visual C++, создание диалоговых окон это легко для новичков с моим мега про гайдом, сможет это сделать любой школьник 🙂

Читайте также:  Данное четырехзначное число читается одинаково

В лабе в универе надо сделать оконное приложение (изучение форм). Так как выбор языка не ограничен, то пример был на c#, который никто из студентов не знает. До этого писали только консольные приложения на c++.

На шарпе создаёшь приложение windows forms и всё. Как сделать что-то подобное на c++? Гугл подсказал CLR->. и тд, но это не работает (по крайней мере в VS2015), да и в целом информации очень мало даже на английском.

Подскажите, пожалуйста, литературу про оконные приложения и современные/актуальные технологии как всё это делается.

  • Вопрос задан более трёх лет назад
  • 6606 просмотров

Это работает в VS 2013, только шаблон проекта нужно создать и затем экспортировать, в интернете есть уроки как это сделать, а в VS 2008 даже ничего делать не надо, просто создаете приложение WinForms и все.

да и в целом информации очень мало даже на английском.

Ищите по C#, в данном случае разница только в синтаксисе.

Еще один вариант — Qt, но он уступает .NET, вам запросто может не хватить его возможностей, работать с ним не так удобно, да и информации не так много, как по .NET.

UPD: Еще C++ Builder же, но он тоже не конкурент для .NET, ни новая версия XE (Embarcadero), ни старая 6.

Pavel K: Да очень много на что, сравните сколько виджетов (контролов) доступно в Qt Widgets и сколько в WinForms, а ведь некоторые контролы WinForms хоть и имеют аналоги, но худшие, например DataGridView заметно более "мощный" и гибкий, чем QTableView/QTableWidget, и вообще Qt это кроссплатформенный инструмент, он не будет таким же "мощным", как и нативные, объяснить почему?

Вы прям оскорбили мои чувства верующего.

Rou1997: C ssl да, все сложно в qt. Сам один раз пытался, с нахрапа, внедрить QSslSocketы, но потерпел фиаско.

В любом случае, я изначально работаю на С++, тут Qt практически вне конкуренции для создания клиентских приложений.

Для любителей С# — конечно, qt не вариант.

З.Ы. Правда я не думаю, что необходимость установить какую-ту минимальную версию .Net Framework не сильно лучше. Весь вопрос только в автоматизированности установки. Но проблема с deployment’ом вообще во всем c++ существует. Так или иначе, приходится подкидывать библиотеки.

Константин Степанов: Не только с SSL, с теми же базами данных и с QSystemTrayIcon у меня тоже трудности были, я не скажу что у C# с NotifyIcon все лучше, но у C# помимо MSDN еще огромная экосистема, отсюда даже на сложный вопрос в поисковиках аж несколько ответов, а у Qt кроме документации, пары форумов и не таких уж многочисленных сообщений на "общих" форумах — ничего нет.

"В любом случае, я изначально работаю на С++"
Я с Delphi начинал, на C# перешел тяжело, но с каждым новом языком информация структурировалась в голове все лучше, теперь вообще не проблема писать то на C#, то на C++, то на Java, то на ассемблерах, то на Web-стеке.

"необходимость установить какую-ту минимальную версию .Net Framework"
В Windows Vista и выше она уже входит.

"Но проблема с deployment’ом вообще во всем c++ существует."
В C++ Builder ее почти что нет, кстати забыл его в своем ответе упомянуть — он тоже вариант.
В C# она решена полностью, стандартные библиотеки входят в .NET и не надо за них волноваться, сторонние автоматически добавляются в папку с exe, кроме разве что нативных (в машинном коде).

Rou1997: Я начинал как разработчик игр, там только с++. Я, вообще, по большому счету, не программист, по крайней мере, у меня нет оконченного образования на эту тему. Разные, большие и маленькие приложения, пишу на чем удобнее, либо С++, либо Java.

ИМХО, Qt вывел С++ до уровня, на котором можно писать и ui, и ядро вместе, обрабатываю информацию быстро и удобно. Грубо говоря, мы получили язык с возможностью делать очень качественный и простой ui, плюс кому-то важна более менее простая кросплатформенность, плюс очень простое и удобное распараллеливание кода при помощи сигналов-слотов. В принципе, я из-за последнего остаюсь на С++ с Qt, т.к. я немного "фанат" многопоточности.

Если брать только Windows, то гораздо существеннее заслуги Borland в VCL, они и на C# очень повлияли, наибольший вклад и в VCL и в .NET внес один и тот же человек, Андерс Хейлсберг, сначала в Borland работал, потом в MS.

Качественными я бы не назвал ни Widgets ни QML, вообще кроссплатформенный интерфейс особо качественным не бывает, и удобство и скорость разработки тоже хромают, IDE Qt Creator отстает от Visual Studio.

Распараллеливание в Qt действительно лучше, там оно есть в тех местах, где в C# его "из коробки" нет.

не программист, по крайней мере, у меня нет оконченного образования на эту тему

Ссылка на основную публикацию
Смарт часы что они умеют
В этой статье мы поговорим о том, для чего нужны умные часы, а также какими функциями они располагают чаще всего....
Сервер не поддерживает символы не ascii
Многие из нас пользуются замечательным FTP сервером FileZilla Server. Думаю, не я один столкнулся с проблемой некорректного отображения русских букв...
Сервера для обновления nod32 бесплатно
Отличие полной версии от триальной Полные (не триальные) антивирусные базы и программные компоненты Eset Antivirus и Eset Smart Security! Отличия...
Смарт часы самсунг с сим картой
Хотите быть современным и модным человеком? Перестать зависеть от своего громоздкого смартфона? Только представьте, вы можете не брать телефон на...
Adblock detector