The Ultimate DirectX Tutorial (Directx 9) / Максимальные DirectX уроки (Directx 9): Win32 Basics(Lesson 2: A Primer of Basic Windows)

← →
Английский оригинал Перевод на русский

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

Описания Урока

Myxach 07.08.14 в 20:52

0

Обзор Урока

thesimplyowl 21.10.19 в 15:22

0

В этом уроке будет рассказано, как создать базовое приложение Windows. Прежде чем мы непосредственно перейдем к созданию окна (которое требуется для DirectX), мы рассмотрим, как создать приложение и добавить простое окно сообщения. Мы сделаем это, изучая каждый шаг программы "Hello World!".

p_zombie 12.07.19 в 18:10

0

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

p_zombie 12.07.19 в 18:23

0

Win32 Консольная программа и Оконное приложение

Myxach 07.08.14 в 20:52

0

Ниже приведен пример кода демоверсии простой программы "Hello World!" для консольного приложения Win32.

p_zombie 12.07.19 в 18:26

0

#include <stdio.h> // стандартные заголовочный файл ввода/вывода информации

Myxach 07.08.14 в 20:53

0

void main(void) // Программа начинается от сюда

Myxach 07.08.14 в 20:53

0

{

Myxach 07.08.14 в 20:53

0

printf("Hello World!"); // пишит "Hello World!" в консоли

Myxach 07.08.14 в 20:54

0

printf("Hello World!"); // выводит сообщение "Hello World!" на консоль

p_zombie 12.07.19 в 18:27

0

printf("Hello World!"); // выводит сообщение "Hello World!" в консоль

thesimplyowl 21.10.19 в 15:15

0

return; // вернуть значение

Myxach 07.08.14 в 20:54

0

return; // возвращает значение

p_zombie 12.07.19 в 18:42

0

}

Myxach 07.08.14 в 20:54

0

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

p_zombie 12.07.19 в 18:49

0

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

p_zombie 24.05.17 в 11:49

0

Что бы написать первое Windows приложение, сначала необходимо создать функцию, WinMain()

Myxach 07.08.14 в 20:55

0

Чтобы написать нашу первую Windows программу, нам нужно написать первую из этих двух функций, WinMain().

p_zombie 24.05.17 в 11:52

0

WinMain() Функция

Myxach 07.08.14 в 20:55

0

WinMain() функция - это аналог main() функции в консольном Win32. Это где приложение запускается и где вы можете задать какие-нибудь основные начальные значения. Я обычно просто вставляю код для создания окна, для главного цикла и, обычно, какой-нибудь код для таймера. Мы охватим каждую часть в лекции 'Основы'. Вот образец для WinMain() функции:

p_zombie 24.05.17 в 12:16

0

int WINAPI WinMain(HINSTANCE hInstance,

Myxach 07.08.14 в 20:55

0

HINSTANCE hPrevInstance,

Myxach 07.08.14 в 20:55

0

LPSTR lpCmdLine,

Myxach 07.08.14 в 20:55

0

int nCmdShow);

Myxach 07.08.14 в 20:55

0

Готово, итак, давайте разберём эту функцию на части:

p_zombie 24.05.17 в 12:22

0

WINAPI

Myxach 07.08.14 в 20:56

0

Прежде, чем мы перейти к аргументам функции, давайте взглянем что прямо перед ними. Между int и WinMain есть команда WINAPI. WINAPI - это метод передачи аргументов функции, который пришёл со дней Фортрана и Паскаля. Коротко говоря, то что он делает - это изменение наоборот последовательности передачи аргументов. Они обычно передаются справа налево, но с WINAPI они передаются слева направо. Подробности о том, почему это так, не очень важны. Windows просто требует, чтобы это было таким образом.

p_zombie 24.05.17 в 18:23

0
+1

Теперь, давайте глянем на каждый аргумент функции

p_zombie 24.05.17 в 19:49

0

HINSTANCE hInstance,

Myxach 07.08.14 в 20:56

0

Этот первый аргумент - это есть сокращенное наименование "метка на экземпляр". Метка - это 32 битное (2^32) целое число, которое нумерует что-либо, вроде объекта.
Экземпляром является копия приложения. По причине многозадачности и возможности запускать несколько копий программы, Windows нужен способ отслеживать какие программы есть какие. Делают это, придавая каждому экземпляру любого приложения "метку на экземпляр" или целое число, которое идентифицирует каждое приложение от других. Когда ваша программа запускается, Windows выбирает число и подставляет его в этот аргумент.

p_zombie 24.05.17 в 20:29

0

HINSTANCE hPrevInstance,

Myxach 07.08.14 в 20:56

0

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

p_zombie 12.07.19 в 18:54

0

Еще задолго до момента появления 32-разрядных процессоров и Windows 95 несколько копий одного и того же приложения были вынуждены использовать одно и то же пространство памяти. Это сильно усложняло дело, и многим программистам было интересно, чтобы их приложения не запускали несколько копий самих себя. Чтобы избежать этого, hPrevInstance даст дескриптор предыдущему экземпляру (если таковой имеется) и вернет NULL, если он единственный, что позволит программисту обнаружить любые запущенные копии.

p_zombie 12.07.19 в 18:59

0

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

p_zombie 12.07.19 в 19:03

0

Существует метод обнаружения предыдущих экземпляров приложения, но он выходит за рамки данного руководства. Этот метод можно изучить в библиотеке MSDN в разделе функция WinMain.

p_zombie 12.07.19 в 19:10

0

LPSTR lpCmdLine,

Myxach 07.08.14 в 20:56

0

Этот параметр является длинным указателем на строку, которая содержит в себе командную строку, вызывающую работу программы. Пример: если у вас есть приложение под названием "MyApp.exe "и вы запустили его с помощью "Выполнить" прямо в меню "Пуск", то вы сможете запустить его так: "MyApp.exe" или "MyApp.exe RunA" или "MyApp.exe RunB" .В любом случае, lpCmdLine будет хранить все, что было введено, позволяя программе проверять специальные параметры.

p_zombie 12.07.19 в 19:58

0

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

p_zombie 12.07.19 в 20:17

0

int nCmdShow

Myxach 07.08.14 в 20:56

0

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

p_zombie 12.07.19 в 20:22

0

nCmdShow Values:

Myxach 07.08.14 в 20:56

0

Описания значений

Myxach 07.08.14 в 20:56

0

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

p_zombie 12.07.19 в 20:25

0

SW_SHOW Активирует окно и изображает его в текущем размере и позиции

Myxach 07.08.14 в 20:57

0

SW_HIDE Скрывает окно и активирует другое

Myxach 07.08.14 в 20:57

0

SW_MAXIMIZE Разворачивает указанное окно.

thesimplyowl 21.10.19 в 15:17

0

SW_MINIMIZE Сворачивает указанное окно и активирует следующее, верхнее окно по оси Z.

thesimplyowl 21.10.19 в 15:19

0

SW_RESTORE Активирует и отображает окно. Если окно свернуто или развернуто, система восстанавливает его исходный размер и положение. Приложение должно указывать этот флаг при восстановлении свернутого окна.

thesimplyowl 22.10.19 в 11:52

0

SW_SHOWMAXIMIZED Активирует окно и отображает его развёрнутым.

thesimplyowl 22.10.19 в 11:53

0

SW_SHOWMINIMIZED Активирует окно и отображает его как свернутое окно.

thesimplyowl 22.10.19 в 11:54

0

SW_SHOWMINNOACTIVE Отображает окно как свернутое окно. Это значение похоже на SW_SHOWMINIMIZED, за исключением того, что окно не активировано.

thesimplyowl 22.10.19 в 12:01

0

SW_SHOWNA Отображает окно в его текущем размере и позиции. Это значение аналогично SW_SHOW, за исключением того, что окно не активировано.

thesimplyowl 22.10.19 в 12:25

0

SW_SHOWNOACTIVATE Отображает окно в его самом последнем размере и позиции. Это значение аналогично SW_SHOWNORMAL, за исключением того, что окно не активно.

thesimplyowl 22.10.19 в 12:26

0

Hello World

Myxach 07.08.14 в 20:57

0
Минутку...

Следующая страница →