Сайт о программировании под Windows

  Меню
  Программирование под Windows

I. Простейшая программа для Windows.

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

Вот исходный код программы:
#include <Windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine, int nCmdShow)
{
    return 0;
}

Разберем все строки программы по порядку. Начинается программа с включения в ее код заголовочного файла <Windows.h>:
#include <Windows.h>
Это самый важный файл, подлючаемый к коду любой Windows-программы, так как содержит объявления функций, типов, констант, необходимых для программировании под Windows (строго говоря <Windows.h> ссылается на множество других заголовочных файлов, которые и содержат эти самые объявления).

Далее идет функция WinMain – точка входа в программу. В любой программа под Windows эта функция должна быть обязательно определена. Именно с нее начинается работа приложения. Прототип функции имеет следующий вид:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine, int nShowCmd)
Она имеет 4 параметра и возвращает целое. WINAPI – это тип вызова, который применяется для функции WinMain. В заголовочных файлах из <Windows.h> он определен как:
#define WINAPI      __stdcall
__stdcall – один из стандартных типов вызова, поддерживаемых Visual C++. Но прежде чем разобраться с параметрами WinMain, рассмотрим сначала новые типы данных, используемые в программе.

Непосредственно компилятор Visual C++ позволяет использовать лишь числовые типы: булевый (bool), целочисленные (char, short, int, long, __int64) и с плавающей точкой (float, double. long double). Информация об этих типах представлена в следующей таблице:
ТипРазмер в битахДиапазон значений
char8-128 ÷ 127
unsigned char80 ÷ 255
short16-32768 ÷ 32767
unsigned short160 ÷ 65535
int32-2147483648 ÷ 2147483647
unsigned int320 ÷ 4294967296
long32-2147483648 ÷ 2147483647
unsigned long320 ÷ 4294967296
__int6464-9223372036854775808 ÷ 9223372036854775807
unsigned __int64640 ÷ 18446744073709551616
float321.2×10-38 ÷ 3.4×1038
double642.2×10-308 ÷ 1.8×1038
long double803.4×10-4932 ÷ 1.2×104932
Надо отметить, что при создании Windows-программ эти типы редко используются напрямую. Обычно вместо них применяют те, которые определены в заголовочных файлах. Это необходимо для возможности переноса программ на более поздние версии операционной системы. Например, тип UINT определен посредством ключевого слова typedef как unsigned int, PFLOAT – как указатель на переменную типа float и т.д.

При программировании под Windows обычно к именам переменных применяют так называемую венгерскую нотацию. Ее смысл заключается в том, что в начале названия переменной помещают префикс, который показывает, какой тип имеет переменная. Это делается для того, чтобы при написании программы всегда знать с переменной какого типа имеешь дело, что заранее позволяет избежать ошибок. Вообще же венгерскую нотацию вы можете и не использовать. Ниже приведены примеры для некоторых типов переменных:
ТипПрефиксПример имени
переменной
charсcFirst
unsigned charbybyCode
shortnnValue
intniResult
указательppObject
строкаszszLine
функцияfnfnDraw
Но помимо базовых, в заголовочых файлах содержатся объявления и других типов, широко используемых при программировании.

Наверное, чаще всего в приложениях для Windows используются различного рода дескрипторы. Дескриптор некоторого объекта в Windows – это уникальное число, ставящееся ему в соответствие и дающее возможность отличить этот объект от всех остальных. Обычно это число определяет сама Windows и присваивает объекту при его создании. В нашей программе встречается лишь две переменные, являющиеся дескрипторами: hInstance и hPrevInstance (как правило, к названиям переменных-дескрипторов добавляют префикс «h»). Обе они имеют тип HINSTANCE – дескриптор экземпляра программы (то есть уникальное числовое значение, присваемое каждому экземпляру любого приложения). Даже если будут запущены несколько копий одной программы, каждая из них будет иметь свой дескриптор.

Программа «узнает» свой дескриптор, благодаря функции WinMain. Каждый раз, когда мы запускаем какое-либо приложение, Windows «находит» в исполняемом файле функцию WinMain и вызывает ее, передавая в качестве первого параметра дескриптор hInstance, который операционная система «присвоила» данной программе.

Второй параметр в 32-разрядных версиях Windows не используется (он сохранен лишь для совместимости с более ранними версиями операционной системы) и всегда равен нулю.

Третий параметр – lpCmdLine имеет тип LPSTR (он определен в заголовочных файлах как указатель на переменную типа char) и попросту указывает на командную строку, заканчивающуюся символом '\0' (нулевой символ). Префикс «lp» в имени переменной показывает, что она является длинным указателем («long pointer»). Надо заметить, что в Windows все указатели являются длинными, поэтому вместо префикса «lp» можно было использовать «p».

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

Возвращает функция значение типа int. В случае, если программа не создает окон (как наша), WinMain должна возвращать 0. Хотя фактически возвращаемое значение Windows игнорирует.


В нашей программе тело функции WinMain не содержит ничего, кроме строки
return 0;
то есть сразу после вызова Windows функции WinMain мы возвращаем нулевое значение и программа завершает свою работу.


Исходный код программы (2K)

  Новости

На сайте появился форум

04.02.06

Размещены первые две статьи по программированию под Windows

03.02.06
Яндекс цитирования Rambler's Top100 PageRank
© 2006 CrazyProger.Narod.Ru
E-Mail для связи: crazyproger@narod.ru
Hosted by uCoz