Опубликован: 10.03.2009 | Доступ: свободный | Студентов: 2225 / 254 | Оценка: 4.31 / 4.07 | Длительность: 09:23:00
Лекция 1:

Программирование под Windows с использованием Win API

Лекция 1: 123 || Лекция 2 >
Аннотация: В данной лекции вводятся основные термины и понятие, используемые при разработке Windows-приложений. Рассматриваются простейшие примеры создания Windows-приложения с использованием Win-API.

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

Примеры программ для лекции.

Ядро Windows:

  • USER (16, 32) .dll – функции ввода с клавиатуры мыши, ввод через интерфейс и т.д. (взаимодействие приложений с пользователями и средой Windows).
  • KERNEL (16, 32) .dll – функции операционной системы (память, распределение системных ресурсов, загрузка).
  • GDI (16, 32) .dll – графический интерфейс (функции создания и отображения графических объектов).

GUI (Graphics User Interface) – стандартный графический интерфейс пользователя. Это та часть Windows, которая обеспечивает поддержку аппаратно-независимой графики.

API (Application Program Interface)интерфейс прикладных программ (набор функций, сосредоточенных в ядре Windows и дополнительных библиотеках).

DLL (Dynamic Link Libraries) — библиотека динамической компоновки. Функции API содержатся в библиотеках динамической загрузки.

DDE – динамический обмен данными.

Нотация Windows ("венгерская нотация Чарльза Симони")

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

  1. мнемоническое значение – идентификатор должен легко запоминаться;
  2. смысловое значение – роль идентификатора должна быть ясна из его названия;
  3. преемственность – похожие объекты должны иметь похожие идентификаторы;
  4. быстрота принятия решения – придумывание, ввод и редактирование идентификатора не должны занимать много времени.

Некоторые префиксы венгерской нотации:

Префикс Значение
A массив
B логический тип (int)
By беззнаковый символьный тип (byte)
C символьный тип (1 байт)
Cb счетчик байтов
Cr цвет
cx,cy короткий тип (short)
Dbl double (с плавающей точкой)
Dw беззнаковое длинное целое число (dword)
Flt float (вещественная с плавающей точкой)
Fn функция
g_ префикс для глобальной переменной (глобальная переменная)
H handle (беззнаковое целое число)
hDC handle (указатель на контекст устройства)
I целое (integer)
Id интегральное значение идентификатора
L длинный тип (long)
Lp длинный указатель
Lpsz дальний указатель на строку, заканчивающуюся нулевым байтом
m_ переменная класса
N short или int
Np ближний указатель
P указатель
Pfn указатель на функцию
Pst указатель на структуру
Psz указатель на строку, заканчивающуюся нулевым байтом
Pv указатель на тип void
S строка
Sz строка, заканчивающая нуль-символом
U беззнаковый символ
Tm текстовая метрика
V тип void
W беззнаковое целое (word, 16-бит)
x, y короткое целое число (координата x или y)

Часто используемые типы данных Windows:

Тип данных Описание
HANDLE определяет идентификатор; 32-разрядное целое, используемое в качестве дескриптора – числа, определяющего некоторый ресурс
HWND определяет идентификатор окна
HDC определяет идентификатор контекста устройства
LONG 32-битовое целое со знаком
LPSTR определяет линейный указатель
NULL 0
UINT тип данных Win32 (32 бита для Win32)
WCHAR 16-битовый символ UNICODE. Используется для представления символов языков мира

Создание простейшего Windows-приложения с использованием Win API

Элементы Windows-приложения

Построение приложения Windows включает выполнение следующих этапов:

  1. Создание WinMain(...) и связанных с ней функций на языке C или C++.
  2. Создание описаний меню и всех дополнительных ресурсов, помещение описаний в файл описания ресурсов.
  3. Создание уникальных курсоров, пиктограмм и битовых образов.
  4. Создание диалоговых окон.
  5. Создание файла проекта.
  6. Компиляция и компоновка всего кода.

Простейшая программа. Создание и вывод Windows-окна на экран

Создадим пустой проект Windows- приложения с помощью мастера:

  1. File \to New \to Project.
  2. Project types: Win32 Templates: Win32 Project.
  3. Ok.
  4. Установить галочку Empty project.
  5. Добавить в проект файл *.cpp.
  6. Project \to Properties. Вкладка Configuration Properties \to General.
  7. Значение поля Character Set устанавливаем Use Multi-Byte Character Set.

Добавим следующий код:

#include <windows.h>
LONG WINAPI WndProc(HWND, UINT, WPARAM,LPARAM);
int  WINAPI  WinMain (HINSTANCE  hInstance,
                     HINSTANCE  hPrevInstance,
                     LPSTR    lpCmdLine,
                      int    nCmdShow)
{
  HWND hwnd;
  MSG msg;
  WNDCLASS w;
  memset(&w,0,sizeof(WNDCLASS));
  w.style = CS_HREDRAW | CS_VREDRAW;
  w.lpfnWndProc = WndProc;
  w.hInstance = hInstance;
  w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  w.lpszClassName = "My Class";
  RegisterClass(&w);
  hwnd = CreateWindow("My Class", "Окно пользователя", WS_OVERLAPPEDWINDOW,500, 300, 500, 380, NULL, NULL, hInstance, NULL);
  ShowWindow(hwnd,nCmdShow);
  UpdateWindow(hwnd);
  while(GetMessage(&msg,NULL,0,0))
  {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return msg.wParam;
}

LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
  switch (Message)
  {
    case WM_DESTROY: PostQuitMessage(0); break;
    default: return DefWindowProc(hwnd, Message, wparam, lparam);
  }
  return 0;
}

Скомпилируем и запустим программу. На экране появится Windows-окно.

Комментарии к программе

Все приложения Windows должны содержать два основных элемента: функцию WinMain(...) и функцию окна WndProc.

Функция WinMain(...) служит точкой входа в приложение. Эта функция отвечает за следующие действия:

  1. регистрацию типа класса окон приложения;
  2. выполнение всех инициализирующих действий;
  3. создание и инициализацию цикла сообщений приложения;
  4. завершение программы (обычно при получении сообщения WM_QUIT ).

Функция WndProc отвечает за обработку сообщений Windows. Эта часть программы является наиболее содержательной с точки зрения выполнения поставленных перед программой задач. Если мы хотим, чтобы программа обращала на наши действия внимание, то необходимо добавить ветки case для оператора switch в оконную процедуру WndProc. Например, если мы хотим, чтобы наше приложение обращало внимание на щелчок левой кнопкой мыши – добавляем ветку case WM_LBUTTONDOWN. В настоящий момент в оконной процедуре происходит только обработка сообщения WM_DESTROY. Больше Windows-окно пока ничего делать не умеет.

Заголовочный файл windows.h нужен для любой традиционной Windows программы на C. Именно в нем содержатся разные определения констант ( WM_DESTROY и т. д.).

Параметры функции WinMain:

  1. hInstance (тип HINSTANCE ) – является идентификатором текущего экземпляра приложения. Данное число однозначно определяет программу, работающую под управлением Windows.
  2. hPrevInstance (тип HINSTANCE ) – указывал ранее (Windows 3.1) на предыдущий запущенный экземпляр приложения. В современных версиях Windows он равен NULL.
  3. lpCmdLine – это указатель на строку, заканчивающуюся нулевым байтом. В этой строке содержатся аргументы командной строки приложения (как правило, содержит NULL ).
  4. nCmdShow – этот параметр принимает значение одной из системных констант, определяющих способ изображения окна (например, SW_SHOWNORMAL, SW_SHOWMAXIMIZED или SW_SHOWMINIMIZED ).
Лекция 1: 123 || Лекция 2 >
Татьяна Якубайлик
Татьяна Якубайлик
Россия, Красноярск
Павел Костицын
Павел Костицын
Россия, Лысьва, ЛФ ПНИПУ, 2013