Программирование для окон


Содержание

Тема 9.Особенности программирования в оконных операционных средах

Цель

Рассмотреть основные стандартные модули, обеспечивающие работу в оконной операционной среде.

Задачи

  1. Обобщить особенности оконной среды Windows.
  2. Обобщить особенности создания оконных приложений (форм).
  3. Обобщить оконную поддержку инструментария среды программирования.

Оглавление

Оконная среда Windows

Вы имеете достаточный опыт работы в среде операционной системы Windows и знакомы со многими ее особенностями. Проанализируем наши знания и рассмотрим основные принципы этой среды с точки зрения программирования для Windows.

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

  • окно приложения (рис.9.1);
  • окно сообщения рис.9.2);
  • диалоговое окно (рис.9.3).

    Рис.9.1. Окно приложения (создано в MS Visual Studio.NET)

    Рис.9.2. Окно сообщения (создано в MS Visual Studio.NET)

    Рис.9.3. Окно диалога (создано в MS Visual Studio.NET)

    Окно приложения может находиться в одном из трех возможных режимов: режим «развернутый», режим «оконный» — возможны изменения размеров и перемещение окна, режим «свернутый» — окно свернуто на панель задач.

    Кроме основных, существует множество других типов окон, например, меню (рис.9.4) или панели инструментов в любом приложении (рис.9.5).

    Рис.9.4. Меню приложения в режиме конструирования (создано в MS Visual Studio.NET)

    Рис.9.5. Панель инструментов с необходимым инструментарием (создана в MS Visual Studio.NET)

    Необходимо заметить, что все разновидности описанных окон, в свою очередь, разделяются на два типа: модальные и немодальные. Окна сообщений и диалоговые окна являются модальными, а все остальные — немодальные. Особенность работы с модальным окном заключается в том, что пока оно не закрыто, невозможно продолжение работы с данным приложением.

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

    Рис.9.6. Окно произвольной конфигурации (создано в MS Visual Studio.NET)

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

    Написание обработчиков событий (создание процедур обработки события) для окон-приложений является задачей программиста.

    Разработка оконного интерфейса приложений

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

    Рис.9.7. Окно консольного приложения

    Оконные приложения состоят из форм. Формы — это объекты, снабженные визуальным интерфейсом и представленные на экране для того, чтобы обеспечить взаимодействие пользователей с приложениями.

    Окно, как самостоятельный объект программирования, получило наилучшую проработку в объектно-ориентированной парадигме программирования, как реализация одного из классов. Подобно всем остальным объектам, встречающимся в объектно-ориентированных языках, формы (окна) обладают свойствами, методами и событиями.

    Свойства определяют внешний вид формы: например, свойство BackColor задает ее основной цвет. Методы отвечают за поведение формы: в частности, метод Hide позволяет скрыть визуальный интерфейс формы от пользователя. События формы определяют взаимодействие с пользователем (или другими объектами): к примеру, событие MouseDown вызывает определенные действия, когда пользователь щелкает на кнопке правой кнопкой мыши.

    Элементы управления представляют собой компоненты, снабженные визуальным интерфейсом и позволяющие взаимодействовать с приложением. Форма — это специальный элемент управления, именуемый контейнерным. Контейнерный элемент включает другие элементы управления. В формах системы Windows можно размещать различные элементы управления. К числу наиболее распространенных из них относятся такие, как TextBox, Label, OptionButton, ListBox и CheckBox. Кроме элементов управления, представленных средой программирования, программист может создавать собственные элементы управления или приобретать таковые у других поставщиков (рис.9.8).

    Формы могут быть много документными и одно документными. MDI-формы (Multiple Document Interface) позволяют отобразить несколько документов одновременно, в то время, как SDI-формы (Single Document Interface) отображают только один документ. В MDI-интерфейсе имеется одна родительская и несколько дочерних форм. Перечисленные возможности форм регулируются соответствующими значениями свойств формы, так, например, в среде.NET этим свойством является IsMDIConteiner=True|False.

    Рис.9.8. Форма — контейнер для элементов управления

    Оконный интерфейс приложения, в зависимости от среды функционирования приложения, может быть построен, например, как Windows-форма или Web-форма.

    Windows-формы предназначены для создания большого класса обычных приложений с графическим интерфейсом. Это могут быть как отдельные настольные приложения, работающие совершенно независимо, так и клиентские части с большими возможностями (так называемые «толстые клиенты», fat clients) в распределенных клиент-серверных приложениях. Классы для реализации Windows-форм реализованы таким образом, что «прячут» от программистов вызовы Win32 API, позволяя сосредоточиться не на технических сложностях, а на функциональных возможностях приложения.

    Другим классом оконных приложений являются web-приложения или web-формы, web-страницы, для доступа к которым нужен лишь браузер. Модель создания web-приложений отличается от модели создания windows-форм (рис.9.9, 9.10): логика представления отделена от бизнес-логики при помощи техники, называемой CodeBehind (рис.9.11, 9.12, 9.13).

    Рис.9.9. Модель создания Windows-формы: визуальный интерфейс

    Рис.9.10. Модель создания Windows-формы: бизнес-логика

    Рис.9.11. Модель создания Web-формы: визуальный интерфейс

    Рис.9.12. Модель создания Web-формы: логика представления

    При создании современных web-приложений можно использовать «настоящие» языки программирования, такие как C# или VB.NET, а не только интерпретируемые языки скриптов.

    Рис.9.13. Модель создания Web-формы: бизнес-логика

    Таким образом, современное web-приложение — это набор взаимосвязанных файлов (*.html, *.asp, *.aspx, файлов изображений), а также связанных с ними компонентов (двоичных файлов.NET или классического COM), которые размещены на web-сервере.

    Среда разработки: система окон разработки, система меню

    Рассмотрим особенности оконного интерфейса среды разработки на примере Microsoft Visual Studio.NET, которая является интегрированной средой разработки (Integrated Development Environment, IDE) Windows и Web-проектов.

    Основной единицей работы в Visual Studio.NET является проект. Более 10 различных типов проектов можно создать, используя шаблоны и мастера Visual Studio.NET. Проект, в зависимости от типа, представляет собой набор файлов с программным кодом, фалов ресурсов, файлов с информацией о сборке проекта и так далее. Практически все действия пользователя в Visual Studio.NET сопровождаются интеллектуальной поддержкой, чаще всего реализованной в виде окон: мастеров, диалоговых, справочных, браузеров. Например, окно Solution Explorer (Проводник решений, рис.9.14) отображает имена всех компонентов проекта и решения, представляя их в иерархической структуре.

    Рис.9.14. Окно Solution Explorer

    Для создания окон разрабатываемых проектов Visual Studio.NET располагает окном конструирования с панелями инструментов Toolbox (рис.9.15). Используя панель инструментов ToolBox, из незаполненной формы можно сконструировать любое диалоговое окно, требуемое для приложения.

    Кроме создания интерфейса в проект, конечно, надо добавить код для реализации бизнес-логики. Код набирается в окне редактирования кода или редакторе кода (рис.9.16). Окно работает в основном как текстовый редактор, однако вместо проверки синтаксиса и грамматики человеческого языка (например, английского или русского) анализирует корректность программного кода.

    Рис. 9.15. Окно конструирования формы и панель Toolbox

    Написание программ существенно облегчается за счет способности окна редактора кода автоматически завершать написание операторов, свойств и параметров. При написании кода редактор сам предлагает пользователю список компонентов (list members), логически завершающих вводимую пользователем конструкцию. Например, при наборе имени элемента управления Button2 после ввода точки на экране отобразится список компонентов (рис.9.16), которые логически завершают данную конструкцию.

    Рис.9.16. Список компонентов

    Другая возможность окна редактирования кода — автоматическое отображение на экране справки о формальных параметрах (parameter info) процедур, свойств, методов и конструкторов после набора их имени. На рис.9.16 в желтой рамке показан пример такой автоматической справки.

    Среда Visual Studio.NET располагает достаточно большим количеством окон, например, окно Task List предоставляет удобное средство по отладке программ. Это окно сводит в централизованный список всю информацию об ошибках. В окне Object Browser отображен список всех объектов, которые имеются в системе и которые можно использовать при создании проекта. Окно Class View выводит на экран в виде иерархической структуры библиотеки классов. Окно Output отображает информацию о результатах компиляции проекта. Впечатляющими возможностями обладают окна Server Explorer, они позволяют создавать таблицы реляционной базы данных, диаграммы базы данных, писать хранимые процедуры, создавать представления (рис.9.17).

    Рис.9.17. Разработка базы данных в окне Server Explorer

    Другими словами, создание проекта в среде Visual Studio.NET — это работа с оконным интерфейсом среды.

    Выводы

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

    В объектно-ориентированной парадигме окно является одним их классов с методами, свойствами и событиями. Программирование объекта «окно» выполняется точно также как и программирование любого другого класса. Окно, как и любой другой объект, может быть создано в режиме конструирования или программным путем. В концепции.NET окно является объектом класса Form, находящимся в пространстве имен System.Windows.Forms.Form.

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

    Все эти особенности следует учитывать при создании собственного оконного интерфейса.

    2.2 Создание первого оконного приложения в .NET. «Убегающее окно».

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

    Создавая данную программу, мы рассмотрим основные принципы создания оконных приложений в 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), при перемещении указателя мыши по форме окна мы будем видеть координаты указателя (внутри формы), которые будут непрерывно изменяться.

    Теперь вернемся к заготовке нашей формы. Для это щелкните на соответствующей закладке (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 объявляется для того, чтобы в будущем временно хранить текущее положение окна.

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

    Илон Маск рекомендует:  Что такое код filepro_fieldwidth

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

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

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

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

    Программирование для окон

    Многие из вас хотели бы научиться разрабатывать программы для Windows, но, столкнувшись с трудностями, отступили. И теперь в редакцию приходят письма с просьбами открыть цикл статей, из которых бы читатели могли почерпнуть необходимую информацию о технике создания Windows-приложений. Признаться, автор этих строк и сам подумывал об этом, но никак не мог решиться. Однако почта, касающаяся вопроса Windows-программирования, которая была получена за последнее время, склонила чашу весов в сторону начала публикации. Обратите внимание на один важный момент: здесь вы не найдете тщательного «разжевывания», характерного для книг. Если вы совсем не знакомы с основными принципами функционирования Windows, непременно прочтите какую-нибудь книгу по данной тематике.

    Об инструментах

    За несколько последних лет программирование Windows-приложений претерпело значительные изменения, в первую очередь они связаны с переходом на 32-разрядные программы. Кроме того, наметилась тенденция все большего использования коммерческих библиотек классов, таких как Microsoft MFC, Borland OWL, Rogue Wave zApps и некоторых других.

    Как известно, на заре Windows практически все программы для этой, тогда еще оболочки, создавались с применением набора Microsoft Software Development Kit (SDK). В состав этого набора, который, кстати, продолжает выпускаться и сейчас, входит комплект полезных утилит, предназначенных для создания ресурсов приложений, тестирования программ и просто ускорения процесса разработки. SDK содержит полный набор библиотек для связывания Windows-программ, заголовочные файлы, электронную документацию и большое количество примеров программ на все случаи жизни.

    Мы с вами также будем опираться на SDK. И это вовсе не потому, что автор — фанат командной строки, не признающий достижений современного программирования, а потому, что исходные тексты Windows-приложений, разработанных на уровне программного интерфейса Windows (Windows API) без всяких библиотек классов, легко могут быть переработаны в готовые программы с помощью любого компилятора языков Си и Си++. Все, что потребуется, — это знание универсального программного интерфейса API Win32, на котором базируются приложения для Windows 95 и Windows NT.

    Пытавшиеся ранее программировать для Windows, наверняка вздрогнули на этом месте, вспоминая, как они мучились с API и как радовались появлению первых библиотек. А теперь им предлагают вернуться назад. Ну что же, если хотите, можете обойтись и без API. Но есть и контрдоводы. Главный из них: вы никогда не создадите программы для Windows, если не знаете API. Это не голословное утверждение. Разумеется, с помощью библиотеки можно создать работающий каркас с приятным внешним видом, но по мере усложнения вашей программы и добавления новых функций, вы все чаще и чаще будете сталкиваться с невозможностью решения проблем на уровне библиотек класса. И тогда вам опять придется прибегать к API. Кроме того, знание API дает понимание глубинных процессов, происходящих в ваших программах. А без этого, согласитесь, считать себя программистом нелепо. В лучшем случае это просто кодировщик.

    Но пусть уважаемый читатель не пугается трудностей. На самом деле многие фрагменты программ постоянно повторяются, так что их можно применять в разных местах. Помимо этого, мы будем использовать в нашей работе новый продукт компании Borland C++ Builder, представляющий собой аналог пакета Delphi, но построенного на базе языка программирования Си++. Это значительно облегчит нам работу, снимая с наших плеч труд по созданию окон программы, и позволит сконцентрироваться непосредственно на реализации логики программы.

    Главное в Windows-программе

    Любая программа для операционной системы Windows начинается всегда с одного и того же — вызова функции WinMain. Это точка входа в Windows-приложение, такая же, как функция main для DOS-программ. WinMain описана в документации к SDK следующим образом:

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

    Разберем параметры, передаваемые функцей WinMain. Первый параметр, hInstance, представляет собой дескриптор экземпляра программы. В 16-разрядных версиях Windows этот параметр четко определял связь сегмента данных программы с ее экземпляром, позволяя определить точно, с каким из запущенных экземпляров программы мы работаем. С появлением 32-битовых программ, когда каждому экземпляру программы выделяется свой сегмент данных, не зависящий от других экземпляров этой же программы, параметр hInstance — это линейный базовый адрес, по которому программа загружена в память. Это значение для Windows 95 может быть от 0x0040000 и выше. Почему именно 0x0040000? Потому что, начиная с этого адреса памяти, загрузчик размещает программу при ее запуске. Обычно это значение можно изменить в опциях компоновщика (linker), но, как правило, это не требуется.

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

    Третий параметр, lpCmdLine, является указателем на параметры командной строки, переданные вашей программе при запуске. Но это действует с одной поправкой. Дело в том, что, в отличие от командной строки программ DOS, вы не сможете извлечь из lpCmdLine полный путь к запущенной вами программе, и даже ее название. Все, что вы можете получить — это дополнительные параметры, передаваемые вместе с командной строкой. Если же вам нужно знать полную командную строку, то необходимо вызвать функцию Win32 API GetCommandLine().

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

    Итак, теперь вы знакомы с WinMain и, следовательно, готовы для написания пробной программы, которая поможет рассмотреть аспекты использования этой функции. Пусть наша программа покажет при запуске содержимое всех параметров, которые были переданы WinMain. Поскольку мы еще не разбирали процесс создания окна программы, то вместо последнего воспользуемся диалоговой панелью сообщений, которую можно получить вызовом функции API MessageBox(). Вот исходный текст нашей программы:

    Произведите сборку программы с помощью любого 32-разрядного компилятора. Сгодится Borland C++ версий 4.x и 5.x, Watcom С++, Microsoft Visual C++ 4.x (я использовал Microsoft Visual C++ 4.2). Запустим нашу программу, набрав в командной строке «test1.exe Passed String». Лучше всего, если вы повторите эту операцию два-три раза.

    Внимательно посмотрите на параметры, которые показывает наша программа. Оказывается, между ними нет никакой разницы! Это очень важное открытие, подтверждающее сказанные ранее слова о том, что один экземпляр программы не знает о другом. Как и было обещано, система загрузила нашу программу по адресу 0x00400000, т. е. на отметке 4 Мбайт, о чем свидетельствует содержимое параметра hInstance. Обратите внимание, что все экземпляры программы загружены по одному и тому же адресу. Это не чудо, а умение процессоров Intel транслировать виртуальные адреса в физические. На самом деле, внутри физической памяти все запущенные экземпляры могут быть в совершенно разных ее уголках, а могут и вовсе быть сброшены на жесткий диск в процессе подкачки.

    Второй параметр, hPrevInstance, равен нулю у всех экземпляров, как уже было сказано. Параметр командной строки, а именно строка «Passed String», передана нашей программе без изменений. И наконец последний параметр, nCmdShow, содержит число 1, которому в API Win32 соответствует флаг SW_SHOWNORMAL. Этот флаг говорит о том, что окно отображается в нормальном режиме.

    Следующий обязательный блок для любой Windows-программы — цикл получения сообщений. Как вы, наверное, уже знаете, операционная система непрерывно бомбардирует программы потоком сообщений о тех или иных событиях. Большинство из них для программ бесполезны, и лишь небольшая их часть должна быть перехвачена и обработана. При запуске программы Windows создает очередь сообщений. Для получения сообщений из очереди внутри функции WinMain() должен быть специальный блок исходного текста. Он выглядит примерно так:

    Разберем этот исходный текст подробнее. Прежде всего это цикл, созданный на основе оператора while. Разумеется, вы можете использовать операторы for и do-while. Данный цикл на базе while представляет собой лишь общепринятую форму. Цикл будет выполняться до тех пор, пока функция GetMessage() не возвратит FALSE. Это означает, что в очереди сообщений обнаружено сообщение WM_QUIT, которое говорит о том, что программа закончила свою работу и нужно прекратить обработку сообщений. Программист сам может послать такое сообщение, вызвав функцию API PostQuitMessage(), и передать через эту функцию код возврата из программы. Так вызов PostQuitMessage(100) приведет к завершению программы с кодом выхода 100.

    Функция GetMessage извлекает сообщение из очереди и сохраняет его в структуре MSG, адрес которой передается как первый параметр функции. Если полученное сообщение не WM_QUIT, то GetMessage возвратит TRUE, и цикл обработки сообщений будет продолжен. Второй параметр функции GetMessage — это дескриптор окна, от которого функция хочет получать сообщения. Если значение равно NULL, это означает, что мы хотим получать сообщения от всех окон, принадлежащих данной программе или потоку. Вообще-то этот параметр чаще всего равен NULL, потому что редко в практике программирования может возникнуть задача слежения за сообщениями конкретного окна.

    Предпоследний и последний параметры задают минимальное и максимальное числа, соответствующие минимальному и максимальному принимаемым сообщениям. Если эти параметры равны 0, то принимаются все возможные сообщения.

    После того как сообщение получено и упаковано в структуру MSG, за дело берутся две другие функции API: TranslateMessage() и DispatchMessage(). Функция TranslateMessage() занимается тем, что транслирует сообщения нажатия и отпускания клавиш WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN и WM_SYSKEYUP в сообщения WM_CHAR, WM_DEADCHAR, WM_SYSCHAR и WM_SYSDEADCHAR. Такая трансляция приводит к тому, что виртуальные коды клавиш транслируются в коды символов.

    DispatchMessage() завершает путь прохождения сообщений, пересылая их в оконную процедуру — сердце Windows-программы, определяющее поведение программы. Оконная процедура отбирает нужные ей сообщения, реагирует на них соответствующим образом, а необработанные сообщения пересылает системному обработчику DefWindowProc(). Обычно на долю именно этой функции выпадает основная работа по выполнению такой рутинной работы, как изменение размера окна, его перемещение и т. д.

    Следующим «номером» нашей программы будет методика создания окна. Как известно, большая часть программ в Windows имеют собственные окна. Поэтому программист должен уметь создавать окна и работать с ними. Создание окна в Windows происходит в три этапа. На первом этапе необходимо создать класс окна программы. В системе уже зарегистрировано несколько собственных классов различных окон, например класса «BUTTON», который служит для создания всех кнопок в Windows. Однако создание своего класса — это необходимость. Если, к примеру, вы создадите окно на базе своего класса, и будете проводить над ним манипуляции, то система может гарантировать, что другие окна, не относящиеся к вашему классу, не будут затронуты вашими действиями. Кроме того, если вы создаете свой класс окна, то можете настроить его по своему желанию и в дальнейшем использовать как шаблон для создаваемых окон. С системными классами эксперементировать не стоит. Если вы измените параметры класса «BUTTON», то это немедленно отразится на всех кнопках в Windows, что делать не стоит.

    Второй этап создания окна состоит в регистрации созданного класса вызовом функции API RegisterClass(). После регистрации класс можно использовать. С этого момента можно создавать свои окна на базе зарегистрированного класса. Это делается вызовом CreateWindow(). Но это еще не окно на экране, а лишь его образ в памяти. Показ окна на экране дисплея — это третий и последний этап создания окна. Для этого вызывается функция ShowWindow(), показывающая окно на экране, и функция UpdateWindow(), посылающая сообщение WM_PAINT, получив которое программа должна перерисовать свое окно. В принципе UpdateWindow() можно и не вызывать, но тогда Windows не может гарантировать, что в вашем окне будет именно то, что вы хотите.

    Чтобы помочь читателю разобраться с исходным текстом, приведем некоторые комментарии. Строка wc.style = CS_VREDRAW | CS_HREDRAW обозначает, что при изменении размеров окна по вертикали или горизонтали окно должно быть перерисовано. Еще одна непонятная строка — wc.hbrBackground = (HBRUSH)( COLOR_WINDOW+1 ). Но она поддается расшифровке, если знать, что системное число COLOR_WINDOW — это тот цвет, который выбран вами для фона. Однако массив цветовых настроек устроен так, что приходится прибавлять единицу для того, чтобы найти правильный его элемент. Два загадочных параметра wc.cbClsExtra и wc.cbWndExtra всегда сбивают с толку программистов. А между тем ничего загадочного здесь нет. Через эти параметры программист может запросить дополнительные байты памяти, размещенные в структуре параметров класса (cbClsExtra) или в структуре окна (cbWndExtra). Как правило, это необходимо для передачи каких-либо данных между окнами или экземплярами программы.

    Последний параметр lpParam, передаваемый функции CreateWindow(), также может вызвать замешательство. На самом деле, это указатель на структуру CREATESTRUCT, задающую параметры создания окна и предаваемую в качестве параметра при посылке сообщения WM_CREATE. Это сообщение посылается оконной функции в момент вызова функции CreateWindow(). Это дает шанс оконной процедуре поправить параметры или просто выявить параметры создаваемого окна для каких-то собственных нужд.

    Наверное читатель заметил непонятный вызов UnregisterClass(), происходящий при завершении программы. Это действительно очень важный момент. Когда вы регистрируете свой класс окна, для него выделяется блок памяти и делается запись в системной области, где хранятся все важные имена. Обычно при завершении программы Windows чистит эти области. Но не стоит надеяться на то, что это случится, мы должны быть приверженцами «дуракоустойчивого» программирования. Это значит, что мы сами освобождаем описанные выше системные области вызовом UnregisterClass().

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

    После того как вы сами написали Windows-программу, вы уже догадались, что в природе должен существовать такой инструмент, который способен значительно облегчить работу. Его название Borland C++ Builder — Delphi-подобная среда разработки программ. Он позволяет избавиться от необходимости написания исходного текста для создания окон и всех связанных с этой задачей проблем. С самого начала программист получает готовое приложение с окном, сразу же начиная решать главную задачу, а не вспомогательную. Поэтому в своих дальнейших занятиях мы будем пользоваться пакетом Borland C++ Builder.

    Ford Mondeo Сургут 2.0 › Бортжурнал › Программирование функции закрывания и открывания окон одним нажатием

    Запись больше для себя ! Копипаст с мондео клуба!

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


    Для перенастройки функции делаем следующее:

    Жмем и держим кнопку опускания окна, до тех пор пока оно полностью не опустится
    Отпускаем кнопку опускания окна и быстро нажимаем её 5 раз
    Жмем и держим кнопку поднимания окна, до тех пор пока оно полностью не поднимется
    Отпускаем кнопку опускания окна и быстро нажимаем её 5 раз

    Если у вас не получилось то попробуйте после опускания и поднимания стекла не сразу отпускать кнопку а удерживать кнопку нажатой в течении 10 — 15 сек. Все остальное также. Далее следует повторить данную процедуру для всех окон оборудованных ЭСП

    Для калибровки доводчиков после снятия клеммы АКБ достаточно следующих действий:
    1. Включить зажигание
    2. Немного опустить стекло
    3. Нажать кнопку подъема стекла до упора и не отпускать пока стекло не остановится.
    4. Отпустить кнопку и снова нажать до упора. Стекло поднимется еще немного (у меня например на 1-1.5 см).
    5. Доводчик настроен

    Все об автоматических электроприводах для окон

    Как работает оконная автоматика

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

    Способы управления оконной автоматикой

    Чтобы привод открыл или закрыл окно, на электродвигатель в нужный момент необходимо подать напряжение. Эта операция может быть выполнена разными способами. Функцию подачи рабочего напряжения всегда выполняет специальное исполнительное устройство. В самом простом и доступном по цене варианте в этом качестве используют ручные переключатели. При выборе такого способа открывания электронные платы не требуются, поскольку человек лично посылает и прерывает импульсы.

    Во всех остальных ситуациях используются более сложные системы. Они представляют собой исполнительные устройства, которые управляются с центральной панели или пульта Д/У. Сигналы передаются через проводные коммуникации либо радиоволнами. К таким устройствам может подключаться разное количество окон. Число управляемых с одного блока створок зависит от модификации.

    Благодаря использованию исполнительного блока и центральной панели можно расширить свои возможности:

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

    Количество функций зависит от выбора вида приемно-контрольного блока. Некоторые платы, подающие сигналы на двигатель, совместимы с датчиками влажности, температуры и ветра. Другие устройства полностью управляются через центральную панель, интегрированную в систему «Умный дом». Стоимость приемно-контрольных блоков составляет 5000-60000 рублей за одну единицу, а цена и функционал управляющего устройства определяются его видом.

    PM переключатели

    Преимущества Недостатки
    Возможность из одного места управлять несколькими створками Минимальное количество функций
    Простота в обращении Необходимость подходить к окнам для их открывания или тянуть провода через комнату в место установки выключателя
    Надежность

    Пульты Д/У

    Преимущества Недостатки
    Не нужно подходить близко к окнам для их открывания и закрывания У пультов для окон те же проблемы, что и у аналогичных приборов для управления другой бытовой техникой – их часто теряют в доме и ломают по неосторожности
    Имеется возможность управления несколькими створками по отдельности или группами окон Если исполнительный блок управляется исключительно пультом Д/У, ему нельзя отдать команду со смартфона или компьютера
    Имеется функция программирования действий контролера, который будет давать команду на самостоятельное открывание створок при определенной температуре, влажности и погоде за окном

    Управление через центральную панель

    Преимущества Недостатки
    Возможность управлять открыванием окон, находясь за пределами своего дома, офиса или предприятия Единые центры системы «Умный дом» управляются при помощи программного обеспечения, которое может давать сбои
    Совместимость с автоматическими жалюзи и рольставнями для окон Беспроводные системы чувствительны к помехам
    Индивидуальное программирование окон на самостоятельное открывание и закрывание при срабатывании датчиков дождя, солнца, ветра, температуры При выборе проводной системы управления необходимо заранее позаботиться о прокладке многочисленных проводов

    Для увеличения количества управляемых приводов используются специальные синхронизаторы и модули расширения. Они стоят от 5500 до 30000 рублей.

    Область применения оконной автоматики

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

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

    Также независимо от типа, габаритов, веса и места установки оконных конструкций при их подключении к индивидуальным датчикам или централизованной системе «Умный дом» автоматически понадобится интеграция электроприводов.

    Оконная автоматика востребована при эксплуатации не только стандартных конструкций, изготовленных на основе традиционных профилей из ПВХ, дерева или алюминия. Она также необходима для комплектации систем фасадного остекления.

    Виды приводов для окон

    Любой привод для открывания окон состоит из корпуса, электрического двигателя, выталкивающего и втягивающего механизма, системы крепления. Это общие элементы для всех изделий. Однако они отличаются между собой по способу преобразования движения, мощности и длине хода штокового элемента. На текущий момент существует 4 вида этих устройств. Их производительность определяется усилием на выталкивание и втягивание. Чем больше этот параметр, тем тяжелее створка, которую сможет открыть привод.

    Шпиндельные (штоковые) приводы

    Основные характеристики Достоинства Недостатки
    Усилие на выталкивание и втягивание – до 3000 N Подходят для эксплуатации в загрязненных помещениях Могут выступать за пределы оконного проема и занимать место внутри помещений
    Максимальная длина выхода штока – до 600 мм Крепятся как на раме, так и на откосах, ригеле, швеллере, стене, подоконнике Необходимо регулярно смазывать ходовой механизм – эта процедура требуется чаще, чем у других приводов
    Рабочий диапазон температур: от -20 до +70 °C Работают при высоких нагрузках

    Цепные приводы

    Основные характеристики Достоинства Недостатки
    Усилие на выталкивание и втягивание – до 400 N Высокая скорость открывания и закрывания – до 40 мм/с Чем шире открывается створка, тем меньше мощность устройства
    Максимальная длина выхода штока 500 мм Подходят для внутреннего и наружного открывания Для герметичного и надежного закрывания створок необходима интеграция дополнительной фурнитуры
    Рабочий диапазон температур: от -20 до +70 °C Удобная и простая система монтажа позволяет выполнить самостоятельную установку приборов Не подходят для открывания окон на крыше

    Реечные приводы

    Основные характеристики Достоинства Недостатки
    Усилие на выталкивание и втягивание до 650 N Способны соединяться комплексы из нескольких приборов, благодаря чему подходят для открывания тяжелых габаритных створок Уменьшение тягового усилия при увеличении ширины открывания створки
    Максимальная длина выхода штока – до 1500 мм Легко переносят серьезные загрязнения, что делает возможной их эксплуатацию на промышленных объектах Невысокая скорость движения штока – до 8 мм/с
    Рабочий диапазон температур: от -20 до +70 °C Пригодны для открывания тяжелых дверных блоков и откатных ворот

    Рычажные приводы

    Основные характеристики Достоинства Недостатки
    Усилие на вытягивание и втягивание – до 750 N (у двухножничных моделей – до 1400) Наличие серии компактных встраиваемых устройств, которые интегрируются внутрь профиля Затруднена совместная эксплуатация с погодными блоками
    Максимальное распахивание створки – до 200 мм Фрамужный механизм наружного монтажа имеет небольшую ширину корпуса (от 36 мм), что позволят его устанавливать между 2 створок Низкая скорость открывания и закрывания – до 2,5 мм/с
    Рабочий диапазон температур: от -20 до +60 °C Работают при высоких нагрузках Встраиваемую модель привода нельзя установить на этапе эксплуатации окон – такие устройства монтируются только в процессе их изготовления на предприятии

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

    Как выбрать электропривод для окна

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

    Область применения механических приводов для окон

    Электропривод Конструкция
    Цепной Малогабаритные верхне- и среднеподвесные окна
    Шпиндельный Тяжелые ленточные, многослойные, вертикальные и верхнеподвесные окна, которые необходимо распахивать и закрывать с высокой скоростью
    Реечный Окна с габаритными и тяжелыми створками на промышленных или коммерческих объектах
    Рычажный Окна со стандартными габаритами в жилых или офисных помещениях

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

    Расчет тягового усилия

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

    Мастер по установке и настройке автоматических систем открывания Ракитин Олег: «В течение 7 лет своей работы постоянно устраняю проблемы, возникшие после монтажа автоматики без привлечения профильных специалистов. Именно в таких случаях установленные устройства не справляются с нагрузкой. Эксплуатировать подобранные «на глаз» модели нельзя, поскольку они не только не смогут корректно работать, но и очень быстро выйдут из строя вследствие перегрузок. Чтобы любой электропривод для окон ПВХ отлично справлялся с возложенными на него задачами, недостаточно правильно выбрать его вид. Обязательно потребуется еще определить оптимальное тяговое усилие. На каждом приборе указывается максимальное значение этого параметра. Однако такой информации недостаточно, поскольку самые мощные приводы стоят дороже. И нет никакого смысла переплачивать и приобретать модель с запасом».

    Рекомендуется потратить немного времени, чтобы измерить створки и произвести несложные вычисления. Узнать оптимальное тяговое усилие в каждом конкретном случае можно при помощи следующих формул:

    1. Для световых фонарей и горизонтальных конструкций люкового типа – F = (P / 2) * 10.
    2. Для окон с вертикально открывающимися фрамугами – F = (P / 2) * (C / H) * 10.
    3. Для конструкций с откидывающимися вниз створками применима предыдущая формула – F = (P / 2) * (C / H) * 10, однако в этом случае потребуется вычислить не выталкивающее, а втягивающее усилие, и этот нюанс следует учесть при выборе модели привода.

    Обозначения для всех приведенных выше формул одинаковые и расшифровываются следующим образом:

    • P – вес активного элемента оконной конструкции (створка/фрамуга/люк);
    • C – максимально возможный ход при открытии фрамуги/люка/створки;
    • H – высота по вертикали активного элемента оконной конструкции;
    • F – тяговое усилие.

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

    Общая стоимость оконной автоматики

    Устройство Цена в рублях за одну единицу
    Штоковые приводы 9000-27000
    Цепные приводы 6000-13600
    Реечные приводы 6750-17300
    Рычажные приводы До 60000
    Приемно-контрольные блоки 5000-60000
    Датчики 2500-5300
    PM переключатели 400-4000
    Пульты Д/У 1000-4000
    Центральные панели управления 5000-40000
    Модули расширения и синхронизаторы 5500-30000

    Также нужно учитывать стоимость монтажа системы управления. Она напрямую зависит от объема и сложности работ. Самостоятельно сложную установку выполнять не рекомендуется.

    Как сделать оконное приложение на c++?

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

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

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

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

    Это работает в 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# его «из коробки» нет.

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

    Вызов окна программного кода

    Вызов окна программного кода

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

    * Нажать клавишу F7.

    * Щелкнуть на кнопке View Code в верхней части окна проводника проектов.

    * Щелкнуть на объекте правой кнопкой мыши и выбрать View Code из появившегося контекстного меню.

    * В случае модуля (но не пользовательской формы!) дважды щелкнуть на нем или нажать клавишу Enter.

    Если вы находитесь в окне пользовательской формы, то нажатие клавиши F7 или выбор View=Code откроет окно программного кода этой пользовательской формы.

    Похожие главы из других книг

    Использование фрагментов программного кода C#

    Использование фрагментов программного кода C# Перед использованием TextPad следует упомянуть еще об одном бесплатном расширений, которое вы можете установить. Перейдите на страницу http://www.textpad.com/add-ons/cliplibs.html и загрузите файл csharp_l.zip с библиотекой фрагментов C#, которую

    Окно определений программного кода

    Окно определений программного кода Если вы имеете опыт программирования в .NET 1.1, то должны знать об утилите Windows Forms Class Viewer, wincv.exe (утилита обзора классов Windows Forms). Этот инструмент позволяет задать имя .NET-типа и просмотреть его C#-определение. В версии .NET 2.0 утилиты wincv.exe уже

    Фрагменты программного кода и окружения

    Фрагменты программного кода и окружения В Visual Studio 2005 (как и в Visual C# 2005 Express) предлагаются разнообразные возможности автоматического добавления сложных блоков программного кода C# с помощью выбора вариантов меню, контекстно-зависимых щелчков кнопкой мыши и/или комбинаций

    Анализ программного кода делегирования

    Анализ программного кода делегирования Предложенный выше метод Main() начинается с создания экземпляров типов Garage и ServiceDepartment. Когда вы пишете// Помыть все грязные машины.g.ProcessCars(new Car.CarDelegate(sd.WashCar));это на самом деле означает: «Добавить указатель на метод ServiceDepartment.WashCar() к

    Разделы программного кода

    Разделы программного кода Возможно, одной из самых полезных директив препроцессора являются #region и #endregion. Используя эти признаки, вы указываете блок программного кода, который можно скрыть от просмотра и идентифицировать информирующим текстовым маркером. Использование

    Модель программного кода Web-страницы ASP.NET

    Модель программного кода Web-страницы ASP.NET Web-страницы ASP.NET могут строиться с использованием одного из двух подходов. Вы можете создать один файл *.aspx, который будет содержать комбинацию программного кода сервера и HTML (по примеру классической технологии ASP). Для создания

    Разработка программного кода

    Разработка программного кода Объявите в разделе var переменную mouse типа TPoint. В этой переменой будут храниться координаты указателя мыши, при изменении которых программа должна закрываться:var Form1: TForm1; mouse: TPoint;Программа экранной заставки должна закрываться не только по

    Блоки программного кода

    Блоки программного кода Два и более операторов присваивания, а также вызовов процедур или функций можно выделять в блоки программного кода при помощи ключевых слов begin и end. Такие блоки используются в конструкции with-do, а также в рассматриваемых ниже циклических

    Перенос имеющегося программного кода

    Перенос имеющегося программного кода Единая модель данных Windows призвана минимизировать объем возможных изменений исходного кода, но полностью избежать необходимости внесения изменений невозможно. Например, такие функции, как HeapCreate и HeapAlloc (глава 5), которые имеют дело

    Создание нового окна программного кода

    Создание нового окна программного кода При добавлении в проект нового модуля автоматически открывается новое окно пользовательского кода для этого модуля. (Процесс добавления новых модулей обсуждается в главе 6.) При создании новой формы для нее автоматически создается

    Печатание программного кода

    Печатание программного кода Окна программного кода в VBA являются, по сути, простыми текстовыми редакторами, правда, у них есть специальные возможности для создания и редактирования именно VBA-кода.Печатание VBA-операторов происходит точно так же, как и в обычном текстовом

    Перемещение в окне программного кода

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

    Разделение окна программного кода

    Разделение окна программного кода Любое окно программного кода можно разделить на два (рис. 5.14). Это позволит вам видеть одновременно различные части программного кода одного и того же модуля. В этом случае очень удобно также копировать текст из одной части программного

    Созидательные возможности окна программного кода

    Созидательные возможности окна программного кода Зачем печатать программный код самим, если кто-то может напечатать его за вас? Редактор Visual Basic балует вас возможностью автоматического ввода совершенно непригодных для запоминания терминов VBA и как раз в самый

    Вызов окна свойств

    Вызов окна свойств Чтобы отобразить окно свойств на экране, выполните любое из следующих действий.* Нажмите F4.* Щелкните на кнопке Properti es (Свойства) в панели инструментов Standard (Стандартная).* Выберите View=Properties из меню.После того как окно свойств появится на экране, перейдите

    Запуск нового программного кода

    Запуск нового программного кода Наконец, рассмотрим запуск на выполнение нового, отличного от родительского процесса программного кода, образ которого содержится в отдельном исполняемом файле в качестве дочернего процесса. Для этой цели в QNX существуют две группы

    Оконные сообщения и функции работы с окнами

    Окно это не только область на экране, посредством которой при­ложение может представить свой вывод, это еще и адресат событий и сообщений в среде Windows.

    Окно идентифицируется по дескриптору окна. Этот дескриптор (переменная типа HWND) однозначно определяет каждое окно в сис­теме. Windows организует свои окна в иерархическую структуру:

    — каждое окно имеет родителя, корнем дерева всех окон является окно рабочего стола, создаваемого Windows при загрузке;

    — для всех окон верхнего уровня (для главных окон приложений и других перекрывающихся и всплывающих окон приложений) роди­тельским окном является рабочий стол.

    Родитель дочернего окна окно верхнего уровня или другое до­чернее окно, более высокого уровня по иерархии.

    Между окнами верхнего уровня (перекрывающиеся и всплываю­щие окна) существует еще одна иерархическая связь. Владельцем окна верхнего уровня может быть другое окно того же уровня. Окно, имеющее владельца, всегда отображается поверх своего владельца и исчезает при минимизации окна-владельца. Типичным случаем владе­ния одного окна верхнего уровня другим является приложение, ото­бражающее диалоговое окно. Диалоговое окно не является дочерним окном (оно является всплывающим окном), но его владельцем остается окно приложения.

    Окно, как правило, реагирует на множество сообщений. Рассмот­рим наиболее часто обрабатываемые сообщения:

    — WMCREATE посылается окну перед тем, как окно станет ви­димым, при получении сообщения приложение может инициализиро­вать нужные данные;

    — WMDESTROY посылается окну, которое уже удалено с экрана и должно быть разрушено;

    — WMCLOSE указывает, что окно должно быть закрыто. Прило­жение может при его обработке, например, вывести диалоговое окно подтверждения закрытия окна;

    — WMQUIT сообщение, требующее завершить приложение;

    — WMQUERYENDSESSION уведомляет приложение о намере­нии Windows закончить сеанс. Приложение может возвратить значе­ние FALSE в ответе на это сообщение, предотвратив этим выключение Windows. После обработки сообщения WMQUERYENDSESSION Windows посылает всем приложениям сообщение WMENDSESSION с результатами этой обработки;

    — WMENDSESSION посылается приложениям после обработки сообщения WMQUERYENDSESSION. Оно указывает, должна ли Windows выключиться, или выключение отложено. При указании вы­ключения сеанс Windows может закончиться в любое время после об­работки сообщения WMENDSESSION всеми приложениями. Поэто­му важно, чтобы приложения выполнили все задачи по обеспечению безопасного завершения работы;

    — WMACTIVATE указывает, что окно верхнего уровня будет ак­тивизировано или деактивизировано. Сообщение сначала посылается окну, которое должно быть деактивизировано, а потом окну, которое должно быть активизировано;

    — WMSHOWWINDOW указывает, что окно должно быть скрыто или отображено;

    — WMENABLE посылается окну, когда оно становится доступ­ным или недоступным. Недоступное окно не может принимать вводи­мые данные от мыши или клавиатуры;

    — WMMOVE указывает, что расположение окна изменилось;

    — WMSIZE указывает, что размер окна был изменен;

    — WMSETFOCUS указывает получение окном фокуса клавиату­ры;

    — WMKILLFOCUS указывает, что окно должно потерять фокус клавиатуры;

    Рассмотрим функции, позволяющие приложению исследовать ие­рархию окон, находить, перемещать, изменять режим отображения, изменять вид окна:

    AnimateWindow дает возможность производить специальные эффекты при показе или сокрытии окон. Имеются четыре типа мультип­ликации: ролик, слайд, свертывание или развертывание и плавное пе­ретекание;

    CloseWindow свертывает (но не разрушает) определенное окно;

    FindWindow используется для поиска окна верхнего уровня по имени его класса окна или по заголовку окна;

    FlashWindow предназначена для создания окна с мигающим за­головком, используется для привлечения внимания к окну;

    FlashWindowEx усовершенствованный вариант FlashWindow;


    GetClientRect возвращает координаты клиентской области окна;

    GetParent возвращает дескриптор родительского окна для ука­занного;

    GetDesktopWindow возвращает дескриптор окна рабочего стола Windows;

    GetTitleBarlnfo возвращает информацию о строке заголовка;

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

    GetWindowPlacement возвращает данные о расположении окна;

    GetWindowTextLength возвращает длину (количество символов) текста строки заголовка для окна, если окно имеет область заголовка. Если окно элемент управления, функция возвращает длину текста внутри элемента управления.

    IsChild проверяет, является ли окно дочерним окном или порож­денным окном для указанного родительского окна;

    IsWindow определяет, соответствует ли заданный дескриптор существующему окну;

    IsWindowVisible возвращает информацию о состоянии заданно­го окна;

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

    Openlcon восстанавливает свернутое окно;

    SetWindowPlacement устанавливает в состояние показа и восста­навливает, свертывает и развертывает окно;

    SetWindowText копирует текст строки заголовка окна (если оно имеет ее) в буфер. Если окно элемент управления, текст элемента управления копируется;

    ShowWindow устанавливает состояние показа окна; WindowFromPoint отыскивает дескриптор окна, которое содер­жит заданную точку.

    Источник: Сучкова, Л.И. Win32 API: основы программирования: учебное пособие/ Л.И. Сучкова; АлтГТУ им. ИИ. Ползунова. -Барнаул, АлтГТУ, 2010. 138 с, ил.

    Принципы программирования в пакете «TwidoSoft»

    Для написания программы для любых объектов в пакете «TwidoSoft» необходимо вначале произвести описание переменных программируемых объектов. Поскольку пока мы познакомились только с битовыми объектами (контакты и катушки) то описывать их будем через соответствующие переменные.

    Как уже сообщалось выше в нашем стенде в качестве контактов, подающих сигналы на входы контроллера, используются кнопки (тумблеры) К1-К12, а катушки представлены индикаторными лампами (L1-L8). Будем обозначать эти элементы как переменные этими же именами.

    Для этой цели запускаем программный пакет «TwidoSoft» и из позиции «File» раскрываем позицию «NEW». После конфигурирования структуры стенда по выше описанной схеме на рабочем поле проекта установится окно с именем «Ladder Viewer ». Ниже на первой строке этого окна расположены «иконки» меню инструментов, которые раскрывается поясняющими надписями при помещении на их поля курсора. Последовательная значимость «иконок» следующая: Insert; Edit; Delete; View Symbols ; View Address….

    До начала программирования для описания переменных найдем и раскроем в главном меню пакета позицию «Symbols». При ее раскрытии на экране появится очередное окно с именем «Symbol Editor» предназначенное для описания битовых переменных. Вид этого окна после описания всех битовых переменных стенда показан на Рис 5.

    Структурно это окно представляет собой таблицу из четырех столбцов. Кроме порядкового номера строки оно содержит столбцы: «Symbol», «Address» и «Comment»

    Рис 5 Вид окна «Symbol Editor» после описания всех битовых переменных стенда.

    В столбце «Symbol» записывается (на любом алфавите) имя переменной начинающееся с буквенного символа. В нашем случае имена переменных совпадают с названием кнопок и ламп стенда. В столбце «Address» помещают внутренний адрес для каждой переменной, который имеет структуру следующего вида: %Iy/z, %Qy/z , где (%)-символ признака пакета «TwidoSoft», (I)-признак ввода сигнала, (Q)- признак вывода сигнала, (y)-номер модуля (0 -для базового ПЛК, от 1 до 7 для модулей расширения ), (z)-номер канала ввода/вывода в модуле.

    Для ввода первого символа запишем «К1» в первой строке столбца «Symbol» и нажмем клавишу «Enter». После чего раскроется всплывающее окно «Object Browser» Рис.6, в строке «Symbol» которого будет записано «К1». Необходимо в строку «Address» этого окна записать %I0.0, что означает опрос (ввод) информации по каналу «0» базового контроллера. После нажатия в этом окне с помощью «мыши» кнопки «ОК» происходит возврат в окно «Symbol Editor», в строке «Address» которого уже будет записано значение введенного адреса, а курсор уже будет автоматически установлен на следующей строке столбца «Symbol» . Подобным образом описываем все битовые переменные нашего стенда. В результате чего вид окна «Symbol Editor» должен соответствовать его содержанию, представленному на Рис.5.

    Рис.6 Вид окна «Object Browser» при вводе внутреннего адреса переменной.

    После описания всех переменных составим программу на языке «Ladder» , по которой первоначально при нажатии кнопки «К1» загоралась бы лампа «L1».

    Для начала программирования этой задачи закроем окно «Symbol Editor» и вернемся в окно «Ladder Viewer», в меню которого выберем позицию «Insert». После этого рабочее окно проекта сменит свое название на «Ladder Editor » при этом на рабочем поле этого окна появится программируемая решетка, каждый блок которой состоит из 11 столбцов и 7 строк. Столбцы делятся на две зоны: зону проверки и зону действия. Зона проверки размещается с 1 по 10 столбец. В ней помещаются логические условия для выполнения конкретных действий. Зона действий размещается с 8 по 11 столбец и содержит катушку или оператор, который будет выполнен согласно результатам проверки условий в предыдущей зоне.

    Процесс программирования на языке «Ladder» состоит в размещении объектов или инструкций в узлах программируемой решетки. Инструкции, условия проверки, объекты, операторы функций и катушки вводятся последовательно и выравниваются по левому краю программируемой решетки.

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

    Рабочее окно «Ladder Editor » содержит строку инструментов, в которой есть следующие позиции: (надписи появляются при визировании курсором их иконок)

    · New — создать новую программу (поместите курсор на первую иконку строки

    · Clear — удалить текущую схему;

    · Previous — перейти к предыдущей схеме;

    · Next — перейти к следующей схеме;

    · Toggle Grid — показать/скрыть решетку;

    · Accept — подтвердить изменения в схеме;

    · Concel — отменить изменения в схеме.

    Строкой ниже в окне «Ladder Editor » расположен список инструкций,

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

    · F1 – режим выбора;

    · F2 — контакт нормально открытый;

    · F3 — контакт нормально закрытый;

    · F4 — контакт переднего фронта;

    · F6 — контакт заднего фронта;

    · F7 — линия горизонтального соединения;

    · F8 — линия вертикального соединения;

    · F9 — удаление линии вертикального соединения;

    · F11 — линия горизонтального соединения через все блоки;

    · F12 — вставка контура функционального блока.

    Другая половина списка инструкций относится к зоне действий, среди которых:

    · ÝF2 – катушка нормально отключенная;

    · ÝF3 — катушка нормально включенная;

    · ÝF5 – сброс самоблокирующаяся катушки;

    · ÝF6 – включение самоблокирующаяся катушки;

    · ÝF7 – вызов подпрограммы;

    · ÝF8 – операционный блок;

    · ÝF12 – вставка функционального блока.

    Для начала программирования поставленной задачи поместим курсор на позицию «F2» в списке инструкций и нажмем левую клавишу «мыши». После чего перенесем курсор на первую ячейку рабочего поля пакета «TwidoSoft» и повторно нажмем левую клавишу «мыши». В результате этого нормально открытый контакт « -||- .» будет зафиксирован в первой ячейке наборного поля пакета.

    После этого поместим курсор на позицию «ÝF2» в зоне действий списка инструкций и аналогично перенесем катушку «-( )-.» этого типа на последнюю ячейку первой строки рабочего поля пакета. Затем поместим курсор на позицию «F11», активизируем ее нажатием левой клавиши «мыши» и, переместив курсор на вторую ячейку первой строки рабочего поля пакета, повторно нажмем левую клавишу «мыши». В результате этого пусковая кнопка соединится с выбранной катушкой.

    После графического построения этой схемы приступим к выбору ее параметров. Для этого поместим курсор на поле изображения контакта « -||- .» и дважды щелкнем по нему левой кнопкой «мыши». После чего в левом верхнем углу этой ячейки выделяется угловая зона с мерцающим курсором. Для ввода параметра кнопки набиваем на латинском алфавите имя переменной «К2» и нажимаем клавишу «Enter». В результате этого контакту присваивается введенное имя. Нажатием клавиши «Esc» завершаем этот процесс.

    Ртс.7. Программа на языке «Ladder» задачи включения лампы «L1» нажатием

    Переместив курсор на поле ячейки катушки «-( )-.», аналогично присваиваем ей имя «L1». После чего программирование поставленной задачи завершается. Общий вид этой программы должен соответствовать рисунку 7.

    После составления схемы этой программы необходимо ее записать в буфер пакета «TwidoSoft», а затем перенести в оперативную память контроллера «Twido» и запустить ее исполнение. Для этого в строке инструментов окна «Ladder Editor — Insert Rung» надо установить курсор на позицию «Accept» (клавиша с галочкой) и нажать левую клавишу «мыши». Перед тем как совершить последующие действия необходимо проверить подключение контроллера «Twido» через кабель к «COM» порту персонального компьютера.

    После этого раскрыть в главном меню пакета позицию «PLC» и последовательно переместить курсор сначала на позицию «Select connection», а затем на «COM1\COM2». Отметить галочкой (по согласованию с преподавателем) действующий порт, после чего переместить курсор на позицию «Connect» и нажать левую клавишу «мыши». Позиция «Connect» расположена также в виде иконки на панели инструментов окна «Ladder Editor — Insert Rung». После выполнения последнего действия программный пакет «TwidoSoft» зависнет на некоторое проверочное время . В случае правильности написания программы и при условии обеспечения взаимосвязи компьютера и контроллера через некоторое время появляется окно «Connect» , в котором необходимо нажать клавишу «PC => Controller» после чего на рабочем поле проекта исчезает графическое изображение программы и появляется окно «TWIDOSOFT» с надписью о том, что контроллер готов к запуску при этом нужно нажать клавишу «ОК». После нажатия этой клавиши происходит загрузка программы в память контроллера . В этот момент в нижней части рабочего окна происходит индикация этой загрузки (синяя расширяющаяся полоса), а в соседнем окне помещается надпись «Offline». После окончания загрузки индикация исчезает, а надпись «Offline» преобразуется в мигающую красным и зеленым «Online». Это свидетельствует о полной загрузке программы. При этом световой индикатор «Run» контроллера с мигания красным цветом переключается на зеленое мигание.

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

    Теперь можно приступить к испытанию программы. Для этого нажмите на лицевой панели стенда кнопку «К1» при этом загорается лампа «L1». Эта лампа будет гореть до тех пор, пока будет нажата кнопка «К1».

    Для возврата в режим редактирования или составления новой программы нужно нажать клавишу (иконку) «Stop», которая (в виде прямоугольника) расположена рядом с клавишей «Run». Нажатие клавиши «Stop» требует подтверждения останова программы через нажатие кнопки «ОК». После останова

    программы необходимо разорвать связь контроллера с компьютером. Для чего нужно нажать клавишу с иконкой «Disconnect» расположенную слева от иконки «Run» или выбрать эту позицию в подменю «PLC» в главном меню.

    Не нашли то, что искали? Воспользуйтесь поиском:

    Создание графического интерфейса

    Tkinter. Создание окна приложения

    Многие программы на сегодняшний день используют графический интерфейс, который более интуитивен и удобен для пользователя, чем консоль. И с помощью языка программирования Python также можно создавать графические программы. Для этого в Python по умолчанию применяется специальный тулкит — набор компонентов, который называется tkinter .

    Тулкит tkinter доступен в виде отдельного встроенного модуля, который содержит все необходимые графические компоненты — кнопки, текстовые поля и т.д.

    Базовым моментом в построении графических программ является создание окна. Затем в окно добавляются все остальные компоненты графического интерфейса. Поэтому создадим вначале простейшее окно. Для этого определим следующий скрипт:

    Для создания графического окна применяется конструктор Tk() , который определен в модуле tkinter. Создаваемое окно присваивается переменной root, и через эту переменную мы можем управлять атрибутами окна. В частности, с помощью метода title() можно установить заголовок окна.

    С помощью метода geometry() — размер окна. Для установки размера в метод geometry() передается строка в формате «Ширина x Высота». Если при создании окна приложения метод geometry() не вызывается, то окно занимает то пространство, которое необходимо для размещения внутреннего содержимого.

    Для отображения окна надо вызвать у него метод mainloop() , который запускает цикл обработки событий окна для взаимодействия с пользователем.

    В результате при запуске скрипта мы увидим такое пустое окошко:

    Начальная позиция окна

    По умолчанию окно позиционируется в верхний левый угол экрана. Но мы можем изменить его положение, передав нужные значения в метод geometry() :

    Теперь строка в методе geometry имеет следующий формат: «Ширина x Высота + координатаX + координатаY». То есть при запуске окно будет находиться на 300 пикселей вправо и на 250 пикселей вниз от верхнего левого угла экрана.

    Илон Маск рекомендует:  Что такое код bar
  • Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL