C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  Update World C++: Сборник GPL QT исходников
  Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Дебетовая карта Home Credit [CPS] RU

 Урок API 2 - Функция WinMain / Уроки / Win32 API

Visual C++. API-функции
Урок 2. Функция WinMain

На этом уроке мы с вами обсудим, как устроена функция WinMain. Во-первых, её параметры:

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR     lpCmdLine,
                   int       nCmdShow)

Первый параметр hInstance типа HINSTANCE указывает на экземпляр нашего приложения. Второй hPrevInstance тоже типа HINSTANCE указывал раньше (Windows 3.1) на предыдущий запущенный экземпляр нашего приложения. В современных версиях Windows он равен NULL. Третий (lpCmdLine) - это указатель на командную строку. И, наконец, последний параметр показывает, в каком виде должно запуститься наше приложение (в распахнутом или нормальном окне и т. п.).

Теперь переходим непосредственно к телу функции. Сначала мы заводим структуру для описания класса нашего окна:

WNDCLASS w;

Затем мы эту структуру заполняем:

    ...
    w.style = CS_HREDRAW | CS_VREDRAW;
    w.lpfnWndProc = WndProc;
    w.hInstance = hInstance;
    w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    w.lpszClassName = "My Class";
    ...

Обратите внимание на строку

    w.lpfnWndProc = WndProc;

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

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

memset(&w,0,sizeof(WNDCLASS));

Затем мы наш класс регистрируем:

RegisterClass(&w);

И создаем окно на его основе:

hwnd = CreateWindow("My Class","My title", WS_OVERLAPPEDWINDOW,
        300,200,200,180,NULL,NULL,hInstance,NULL);

То, что окно делается на основе нашего класса, ясно из первого параметра функции CreateWindow. Он совпадает с именем нашего зарегистрированного оконного класса (строка

w.lpszClassName = "My Class";

в тексте выше). Кстати говоря, класс здесь - это вовсе не класс в смысле ООП. Термин один, но смысла два. И исторически классы окон возникли раньше, чем классы ООП.

У функции CreateWindow параметров много. Второй - это заголовок окна, потом идут стили, местоположение и т. д. Подробности смотрите в MSDN.

Обратите внимание на возвращаемое функцией CreateWindow значение (переменная hwnd). Это указатель вновь созданного окна. Он нам понадобится ниже и в следующем уроке.

После того, как окно создано, его надо показать и обновить:

ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);

После чего запускается цикл обработки сообщений:

while(GetMessage(&msg,NULL,0,0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

Цикл этот обрабатывает сообщения и вращается до тех пор, пока ваше окно не получит сообщения WM_DESTROY (только при получении этого сообщения наша функция GetMessage вернет FALSE и цикл закончится.




Дебетовая карта Home Credit [CPS] RU