Как создать простую программу для Windows

Рассмотрим пример проектирования стандартного оконного приложения. Простейшая последовательность действий:
1) визуальное проектирование интерфейса (перенос на форму с Панели элементов необходимых визуальных и не визуальных элементов);
2) генерация заготовок методов обработки событий, связанных с элементами управления;
3) программирование методов обработки событий.

Постановка задачи

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

Реализация

Разместим на форме визуальный элемент textBox1 класса TextBox. Размер элемента сделайте чуть меньше размера формы, сместив его вниз от заголовка на 30-40 пикселей. Задайте свойство textBox1.MultiLine = true (для редактирования текста в несколько строк).

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

Как создать программу «КАЛЬКУЛЯТОР» в блокноте

Для выбора имен файлов для их чтения и записи перетащим на эту же панель элементы openFileDialog1 (класс OpenFileDialog) и saveFileDialog1 (класс SaveFileDialog).

Кликнув по кнопке «Введите здесь», введите имя раздела меню «Файл» и добавьте ниже следующие пункты меню работы с файлами «Открыть», «Сохранить как» и «Выход». Ваша форма (вместе с панелью невизуальных элементов) будет выглядеть примерно так:
Примечание: для наглядности изменено свойство формы BackColor = Color.Peru. Первая группа действий закончена.

Вторая группа действий обеспечивает генерацию заголовков методов обработки событий, связанных к кнопками меню. Для этого дважды нажмите каждую из трех позиций меню, а также событию Load формы Form1 на закладке «События» панели «Свойства» поставьте в соответствие метод Form1_Load (двойной клик справа от в строке Load).

Откроем форму в режиме Кода (файл Form1.cs):

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace ТекстовыйРедактор < public partial class Form1 : Form < public Form1() < InitializeComponent(); >private void открытьToolStripMenuItem_Click(object sender, EventArgs e) < >private void сохранитьКакToolStripMenuItem_Click(object sender, EventArgs e) < >private void выходToolStripMenuItem_Click(object sender, EventArgs e) < >private void Form1_Load(object sender, EventArgs e) < >> >

Перейдем к третьей группе действий — написанию кода для этих четырех методов.

Метод Form1_Load( ) используем для очистки поля компонента textBox1, для задания форматов файловых диалогов и имени файла — контрольного примера при его открытии:

Уроки по С++.1 урок.Как создать программу?

private void Form1_Load(object sender, EventArgs e)

Комментарий. При загрузке формы мы задаем свойство FileName объекта openFileDialog1 указанием имени файла для открытия, а также задаем фильтры для диалогов открытия и сохранения файлов. Сравните работу программы без использования этого метода.

В методе открытьToolStripMenuItem_Click( ) используется компонент openFileDialog1 для выбора имени файла для чтения. Если имя не выбрано (FileName = String.Empty), то работа метода завершается. Иначе создается новый экземпляр класса System.IO.StreamReader (var Читатель) с указанием имени файла и кодировки, данные из текстового файла переносятся в textBox1, объект Читатель закрывается. Добавлена обработка исключений, которые могут возникнуть при открытии файла:

private void открытьToolStripMenuItem_Click(object sender, EventArgs e) < openFileDialog1.ShowDialog(); if (openFileDialog1.FileName == String.Empty) return; // Чтение текстового файла try < var Читатель = new System.IO.StreamReader( openFileDialog1.FileName, Encoding.GetEncoding(1251)); textBox1.Text = Читатель.ReadToEnd(); Читатель.Close(); >catch (System.IO.FileNotFoundException Ситуация) < MessageBox.Show(Ситуация.Message + «nНет такого файла», «Ошибка», MessageBoxButtons.OK, MessageBoxIcon.Exclamation); >catch (Exception Ситуация) < // отчет о других ошибках MessageBox.Show(Ситуация.Message, «Ошибка», MessageBoxButtons.OK, MessageBoxIcon.Exclamation); >>

Аналогично выполняется запись (сохранение) текстового файла:

private void сохранитьКакToolStripMenuItem_Click(object sender,EventArgs e) < saveFileDialog1.FileName = openFileDialog1.FileName; if (saveFileDialog1.ShowDialog() == DialogResult.OK) < try < var Писатель = new System.IO.StreamWriter( saveFileDialog1.FileName, false, System.Text.Encoding.GetEncoding(1251)); Писатель.Write(textBox1.Text); Писатель.Close(); >catch (Exception Ситуация) < // отчет о других ошибках MessageBox.Show(Ситуация.Message, «Ошибка», MessageBoxButtons.OK, MessageBoxIcon.Exclamation); >> >

Последний метод — закрытие формы — реализуется одним оператором:

private void выходToolStripMenuItem_Click(object sender, EventArgs e)

Подготовим в блокноте текстовый файл Text2.txt и разместим его в подкаталоге data папки, где будет размещено ваше приложение. Запустим программу на выполнение. Добавьте в окне редактора несколько строк, сохраните файл с другим именем. Откройте новый файл и удалите часть текста в окне редактора.

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

ВЫВОД: В первом приближении поставленная задача решена. Данный пример приведен всего лишь для понимания:
во-первых, алгоритма действий разработчика визуального приложения «интерфейс, события-методы, реализация»;
во-вторых, удобства использования готовых компонентов (нам не пришлось программировать операции редактирования текста — стандартные события уже привязаны к компоненту textBox1);
в-третьих, целесообразности использования готовых компонентов (файловых диалогов) с точки зрения стандартизации интерфейса пользователя и программы.

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

Читайте также:
Что такое средство удаления вредоносных программ Windows 7

NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.

Источник: c-sharp.pro

Как сделать Data Science приложение для Windows (и не только) с графическим интерфейсом с помощью PySimpleGUI

Работать с Data Science в Jupyter, конечно, очень приятно, но если вы хотите пойти дальше и развернуть свой проект или модель на облачном сервере, то здесь есть много отличных решений — с помощью Flask, Django или Streamlit. Хотя облачные решения по-прежнему самые популярные, часто хочется создать быстрое приложение с графическим интерфейсом. Например:

  • Модель ML тестируется на различных наборах данных. Вы можете перетащить файлы CSV в модель и отрисовать кривую AUS/ROC. Здесь GUI проявит себя прекрасно, правда?
  • Построить случайную переменную или статистическое распределение в заданном диапазоне и динамически управлять параметрами с помощью графического интерфейса.
  • Быстро запустить некоторые задачи обработки или предварительной обработки данных в наборе с помощью GUI вместо того, чтобы писать кучу кода.

Что такое PySimpleGUI?

В экосистеме Python есть несколько очень популярных GUI-фреймворков, таких как Tkinter, PyQt и т. д. Но часто они несколько раздуты и трудны в изучении для специалистов по Data Science, которые могут захотеть написать простое приложение с минимумом кода, а не тратить время на разработку крупной программы с графическим интерфейсом на уровне энтерпрайза.

Обёртка, которую легко изучить

На сайте PySimpleGUI написано: «Python GUI для людей —трансформирует Tkinter, Qt, Remi, WxPython в портативные Pythonic-интерфейсы, дружественные людям». По сути, этот GUI-фреймворк берёт все эти популярные и хорошо зарекомендовавшие себя GUI-фреймворки и обёртывает их в единую библиотеку, которую просто изучить и затем собирать приложения.

Вам даже не нужно писать определение класса, чтобы создать GUI-приложение! Часто специалисты по Data Science не имеют достаточно опыта в разработке.

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

Преимущества обёртки

  • Не нужно никаких обратных вызовов.
  • Чтобы сократить объём кода, используются конструкции Python. Например, виджет настраивается прямо на месте, в котором он должен быть, а не на расстоянии нескольких строк кода от этого места.
  • Зависит от одного пакета: обёртывает Tkinter и не требует установки других пакетов.
  • Одна и та же программа с GUI может выполняться на нескольких платформах, включая веб-браузер, без изменения исходного кода, за исключением оператора импорта.
  • Можно разрабатывать интерфейс для нескольких платформ ОС — Windows, Linux, Raspberry Pi и Android (PyDroid3) — с очень незначительными изменениями.

В принципе, можно начать создавать работающие (и полезные) приложения с GUI, имея базовые знания Python, и вы справитесь за день.

Примеры приложений

Установите библиотеку вот так: pip install pysimplegui . Чтобы запустить примеры, вам также понадобятся эти библиотеки:

  • Numpy.
  • Pandas.
  • Matplotlib.
  • Scikit-learn.
  • Seaborn.

Data Science «Hello World»

Простейшая программа в PySimpleGUI отобразит строку Hello World в маленьком окне. Но, в духе DS, давайте сделаем нашу вводную программу интереснее и полезнее! Вот скрипт. Назовём его GenRandom.py .

Перейдите в каталог с этим скриптом, выполните команду python GenRandom.py . Вы увидите простое всплывающее окно, в котором можно нажать кнопку, чтобы вызвать функцию обновления (см. код выше), чтобы сгенерировать случайное число от 1 до 99.

Хотя это очень простой сценарий, в нём есть:

  • макет (с аргументами стиля, например size и font ) и окно;
  • элемент кнопки, который вызывает внешнюю функцию (событие);
  • функция обновления текстового элемента в объекте окна.

Другие виджеты

Вот еще один сценарий, иллюстрирующий другие виджеты. Просто запустите команду:

python FontUpdate.py

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

Решатель уравнений

Запустите команду python QuadraticEquation.py и вы увидите всплывающее окно, в котором можно ввести коэффициенты квадратного уравнения, чтобы решить его (даже если корни окажутся комплексными числами!).

Анализатор Pandas DataFrame

В этом примере мы показываем, как легко создать GUI, который взаимодействует с широко используемым объектом, например с Pandas DataFrame. Как обычно, вы запускаете скрипт командой python SimpleDataFrame.py. Вначале он запросит у вас файл набора данных (CSV).

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

После выбора cars.csv появятся другие запросы:

Если вы нажмёте Yes на последней подсказке, то увидите набор данных, который был прочитан в новом окне:

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

После закрытия этого окна ещё одно всплывающее окно спросит о том, хотите ли вы увидеть пример графика. Если вы нажмете Yes, то увидите что-то вроде этого:

Генератор случайных диаграмм рассеяния

Это приложение предназначено, чтобы продемонстрировать возможность создания динамического графика, который взаимодействует с пользователем. Скрипт лежит здесь. Когда вы запустите его, появится окно с простой кнопкой, которую вы можете нажимать столько раз, сколько хотите, каждый раз генерируя график случайного рассеяния. Под капотом, конечно, Numpy и Matplotlib.

Читайте также:
Чем открыть Виндовс программы в линукс

Приложение для подгонки кривой

Специалисты по DS и аналитики всегда подгоняют кривые или аналитические функции под некоторые данные. Легко создать простое приложение, где вы сможете продемонстрировать это с помощью PySimpleGUI.

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

Пример обучения модели Scikit-learn

Наконец-то мы снисходим до примера настоящего ML. Мы покажем, как построить простое приложение, позволяющее загрузить набор данных Pima Indians diabetes и обучить модель Случайного леса на этих данных с помощью Scikit-learn в фоновом режиме. Скрипт лежит здесь. На рисунке ниже показывается работа этой программы с графическим интерфейсом. Обратите внимание, что она охватывает стандартные процессы, как ожидается от программы машинного обучения:

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

Резюме

Заплатка на асме. Создаем панель инструментов для Windows на Flat Assembler

В этой статье я рас­ска­жу о том, как соз­дать прос­тое при­ложе­ние — заготов­ку панели инс­тру­мен­тов для рабоче­го сто­ла Windows. По ходу дела мы вспом­ним Win32 API, раз­берем­ся, как его исполь­зовать на язы­ке ассем­бле­ра, и поз­накомим­ся с Flat Assembler, который ста­нет для нас основным инс­тру­мен­том раз­работ­ки.

Нет в мире совершенства

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

Дефект монитора в виде горизонтальных полос

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

Ка­кие еще оста­ются вари­анты? Знаю по опы­ту, что офи­циаль­ный сер­вис, ско­рее все­го, выс­тавит заг­радитель­ную цену, а отда­вать боево­го товари­ща в очу­мелые руч­ки кус­таря‑оди­ноч­ки совесть не поз­воля­ет. Наибо­лее здра­вой кажет­ся мысль пой­ти в бли­жай­ший магазин, купить новый монитор и не дурить голову ни себе, ни читате­лям. Имен­но так я бы и пос­тупил, если бы монитор не работал сов­сем. Но он поч­ти работа­ет, и выб­расывать его поп­росту жал­ко.

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

Дос­тает свой тол­стый кошелек и спе­шит в бли­жай­ший бутик за новыми? Нет, он вспо­мина­ет уро­ки Марь­ван­ны и, при­меняя методо­логию «впе­ред игол­ка», нак­ладыва­ет зап­латку! Или дру­гой при­мер. В не менее прек­расный день ин­женеры NASA обна­ружи­ли, что основная антенна ради­освя­зи запущен­ного к Юпи­теру зон­да не рас­кры­лась пол­ностью.

Раз­ве они бро­сили неис­прав­ное устрой­ство на про­извол судь­бы и обра­тились к пра­витель­ству за финан­сирова­нием нового? Нет, они про­яви­ли наход­чивость и тех­ничес­кую сме­кал­ку, в резуль­тате чего пусть и не без тру­да, но успешно про­вели мно­голет­нюю иссле­дова­тель­скую мис­сию.

Выбор цели и средства

Рас­смат­рива­емая в статье ситу­ация находит­ся где‑то меж­ду эти­ми край­ними слу­чаями. Наиболь­шие неудобс­тва опи­сан­ный дефект дос­тавля­ет при исполь­зовании раз­верну­тых на весь экран прог­рамм, потому что попада­ет либо на адресную стро­ку бра­узе­ра, либо на глав­ное меню при­ложе­ния. Исполь­зование же прог­рамм в окон­ном режиме, с под­гонкой их мес­тополо­жения пос­ле каж­дого запус­ка, гро­зит нер­вным расс­трой­ством. Я готов пожер­тво­вать частью полез­ной пло­щади экра­на, если изоб­ражение не будет попадать на дефек­тную область.

Ос­новная опе­раци­онная сис­тема на моем компь­юте­ре — Windows. Как исклю­чить полосу в вер­хней час­ти экра­на из дос­тупно­го прос­транс­тва рабоче­го сто­ла, что­бы окна при­ложе­ний при раз­верты­вании не попада­ли на нее? Идею мне под­ска­зала панель задач: она монопо­лизи­рует ниж­нюю часть экра­на и никог­да не перек­рыва­ется окна­ми прог­рамм.

Может быть, дос­таточ­но будет прик­репить ее к вер­хней час­ти экра­на? Нет, во‑пер­вых, она не сов­сем под­ходит по раз­меру, а во‑вто­рых, сама при­обре­тает неп­ригляд­ный вид из‑за дефек­та. А нель­зя ли сде­лать «зап­латку» с такими же свой­ства­ми, но что­бы поль­зователь мог кон­тро­лиро­вать ее раз­мер и цвет?

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

Читайте также:
Произошла ошибка программы восстановления системы 0х81000202 Windows 10

Основное средс­тво раз­работ­ки с исполь­зовани­ем Win32 API — ком­пилятор С. Но для вызова нес­коль­ких фун­кций опе­раци­онной сис­темы хочет­ся вос­поль­зовать­ся чем‑то более прос­тым и изящ­ным. Поэто­му я отпра­вил­ся в тем­ную кла­довую сво­ей памяти и нашел там пыль­ную шка­тул­ку с плос­ким мон­тажни­ком. Если кто‑то еще не догадал­ся, то так зву­чит по‑рус­ски Flat Assembler в вари­анте Яндекс‑перевод­чика. Уди­витель­но, но про­дукт, с которым я поз­накомил­ся еще в середи­не 2000-х, про­дол­жает жить и здравс­тво­вать.

Что умеет Flat Assembler?

Да­вай пря­мо сей­час раз­берем­ся со сре­дой, в которой будем работать. На стра­нице заг­рузки выбери архив с пос­ледней вер­сией сбор­ки для Windows, заг­рузи его и рас­пакуй куда‑нибудь на диск. В трех мегабай­тах пап­ки FASMW есть все, что нам пот­ребу­ется.

Соз­дай пус­тую пап­ку Appbar для рабоче­го про­екта и ско­пируй в нее исходный текст шаб­лона типово­го при­ложе­ния Windows FASMW EXAMPLES TEMPLATE TEMPLATE. ASM . Запус­ти интегри­рован­ную сре­ду раз­работ­ки FASMW FASMW. EXE и с помощью пун­кта меню File → Open. заг­рузи в нее этот файл. Обра­ти вни­мание, что в нашем рас­поряже­нии есть тек­сто­вый мно­гоокон­ный редак­тор с под­свет­кой син­такси­са ассем­бле­ра.

Текстовый редактор интегрированной среды FASMW

Шаб­лон Windows-при­ложе­ния на ассем­бле­ре сос­тоит из сле­дующих основных час­тей:

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

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

Во‑вто­рых, Flat Assembler на осно­ве сво­его набора мак­роинс­трук­ций пред­лага­ет син­такси­чес­кий сахар, который дела­ет исполь­зование API мак­сималь­но приб­лижен­ным к высоко­уров­невым язы­кам прог­рамми­рова­ния. Ска­жем, доволь­но слож­ный вызов фун­кции соз­дания окна опи­сыва­ется одной стро­кой:

invoke CreateWindowEx , 0 , _class , _title , WS_VISIBLE + WS_DLGFRAME + WS_SYSMENU , 128 , 128 , 256 , 192 , NULL , NULL , [ wc. hInstance ] , NULL

Здесь invoke — это коман­да вызова под­прог­раммы в соот­ветс­твии с сог­лашени­ем STDCALL, CreateWindowEx — имя вызыва­емой API-фун­кции, а далее через запятую сле­дуют аргу­мен­ты в том поряд­ке, в котором они опи­саны в докумен­тации. С‑прог­раммис­ты могут счи­тать, что име­на всех перемен­ных здесь — это ука­зате­ли ( _class , _title ), для разыме­нова­ния которых исполь­зуют­ся квад­ратные скоб­ки ( [ wc. hInstance] ). Отме­тим при­выч­ную «точеч­ную» нотацию дос­тупа к эле­мен­там струк­туры.

Опи­сание окон­ной про­цеду­ры WindowProc тоже не дол­жно выз­вать зат­рудне­ний:

proc WindowProc uses ebx esi edi , hwnd , wmsg , wparam , lparam

Сог­лашение Win32 API тре­бует, что­бы пос­ле воз­вра­та из про­цедур обратно­го вызова (callback-про­цедур) зна­чения регис­тров EBX , ESI и EDI были такими же, как и перед вызовом. Для это­го в заголов­ке при­сутс­тву­ет ука­зание на сох­ранение этих регис­тров в виде фра­зы uses ebx esi edi . А даль­ше через запятую идет спи­сок фор­маль­ных парамет­ров про­цеду­ры, которые соот­ветс­тву­ют докумен­тации.

Те­перь ты можешь ском­пилиро­вать и выпол­нить эту прог­рамму. Но сна­чала ука­жи путь к пап­ке с под­клю­чаемы­ми дирек­тивой include фай­лами в пун­кте меню Options → Compiler setup так, что­бы он соот­ветс­тво­вал фак­тичес­кому мес­тополо­жению FASMW INCLUDE . Пос­ле это­го выпол­ни пункт меню Run → Run или прос­то наж­ми кла­вишу F9. Если все было сде­лано пра­виль­но, то в рабочей пап­ке Appbar появит­ся све­жесоб­ранный файл TEMPLATE. EXE , а на экра­не отоб­разит­ся кро­шеч­ное окно Win32 program template.

Настройка пути к подключаемым файлам

Создание обработчика сообщения WM_CREATE

Со сре­дой раз­работ­ки разоб­рались, прис­тупим к работе над прог­раммой. Если рань­ше ты никог­да не прог­рамми­ровал панели рабоче­го сто­ла Windows, то сей­час самое вре­мя изу­чить докумен­тацию. Но перед этим хочу обра­тить вни­мание на основные момен­ты. Панель рабоче­го сто­ла не явля­ется каким‑то уни­каль­ным объ­ектом опе­раци­онной сис­темы. Роль панели может играть любое окно, соз­данное фун­кци­ей CreateWindowEx . Все средс­тва Windows, обес­печива­ющие фун­кци­они­рова­ние панели, сос­редото­чены в единс­твен­ной фун­кции SHAppBarMessage, с помощью которой мож­но:

  • уз­нать гра­ницы области рабоче­го сто­ла, в пре­делах которых мож­но раз­местить новую панель инс­тру­мен­тов;
  • за­резер­вировать на этой области учас­ток для раз­мещения новой панели;
  • ука­зать манипу­лятор ( handle ) окна с панелью, которо­му будут отправ­лять­ся сис­темные уве­дом­ления, свя­зан­ные с изме­нени­ем обста­нов­ки на рабочем сто­ле.

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

С помощью пун­кта меню File → Save as. сох­рани откры­тый в редак­торе файл под име­нем appbar. asm . В нашей прог­рамме панелью будет глав­ное окно при­ложе­ния. Зарезер­виру­ем для нее полосу в вер­хней час­ти рабоче­го сто­ла. Это мож­но сде­лать в обра­бот­чике со­обще­ния WM_CREATE , которое отправ­ляет­ся опе­раци­онной сис­темой окну при­ложе­ния непос­редс­твен­но перед тем, как отоб­разить его на экра­не. Для это­го в начале окон­ной про­цеду­ры WindowProc вста­вим стро­ки перехо­да к обра­бот­чику сооб­щения:

cmp [ wmsg ] , WM_CREATE
je . wmcreate

и напишем сам обра­бот­чик перед мет­кой . wmdestroy :

Источник: xakep.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru