Категории:

  • Программирование


  • Изобразительное искусство


  • Программирование встраиваемых систем


  • Компьютерная графика


  • WEB Разработка


  • Музыка


  • Инженерия


  • iVARIOUS


  • Mobil App


  • WinAPI. Введение.

    WinApiWINAPI - это набор функций и структур для программирования приложений которые работают в операционной системе Windows. WINAPI в основном спроектирован для работы с языком СИ. Интерфейсы управления процессами от внешнего вида окон программ и до работы с портами ввода/вывода основаны на структурах языка СИ. Любые процессы в компьютере контролирует операционная система, и Windows выделяет по очереди время для каждой программы в которое приложение имеет доступ до вычислительных ресурсов ПК.
    Организацию приложения WINAPI можно разделить на три составляющие:
    1) Окно приложения (его регистрация в операционной системе, создание и отображение).
    2) OS WINDOWS.
    3) Функция обработки сообщений WndProc.
    В первом пункте создается переменная типа HWND (HWND hwnd) которая является дескриптором главного окна, именно через нее в ходе выполнения программы будет происходить управление главным окном (добавление/удаление элементов, вывод информации и другое). Переменную hwnd можно создать как глобальную (вне любых функций) или внутри главной функции с которой приложение начинает работу - WinMain. WinMain - функция создает еще несколько переменных, две из которых имеют тип HINSTANCE, где хранится дескриптор приложения, по которому Windows будет отличать программу из множества других. В функции WinMain также заполняется структура главного окна WNDCLASSEX (WNDCLASSEX wincl), в которой содержатся настройки окна (его вид, визуальный тип курсора и другое). Далее созданное окно регистрируется в системе функцией RegisterClassEx(&wincl). Следующим этапом идет отображение окна функцией ShowWindow (hwnd, nCmdShow);
    Заключительным этапом первого пункта - запуск цикла сообщений , извлекаемых из операционной системы функцией GetMessage (&messages, NULL, 0, 0); где messages - ранее созданная переменная типа MSG. По параметрам этих сообщений определяются события происходящие в программе и в компьютере в целом.

    Второй пункт OS WINDOWS, операционная система, она есть посредник между программой и аппаратурой компьютера. OS WINDOWS решает когда, и на сколько выделять ресурсы ПК для программы, и делает более читаемым вид событий которые происходят в системе на уровне электрических сигналов.

    Третий , более абстрактный пункт - функция обработки сообщений WndProc(), это - логика приложения. Она вызывается операционной системой, и принимает сообщения из OS WINDOWS в виде параметров WPARAM wParam, LPARAM lParam . В свою очередь в зависимости от событий, программа решает что делать и какие действия производить в ответ на происходящее.
    Данный пример кода создания окна является стартовым в среде разработки программ Code::Blocks:
    WinApi

    #include <tchar.h>
    #include <windows.h>

    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

    TCHAR szClassName[ ] = _T("iVARIOUS.COM");

    int WINAPI WinMain (HINSTANCE hThisInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpszArgument,
    int nCmdShow)
    {
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;


    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);


    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;

    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;


    if (!RegisterClassEx (&wincl))
    return 0;


    hwnd = CreateWindowEx (
    0,
    szClassName,
    _T("iVARIOUS.COM"),
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    700,
    600,
    HWND_DESKTOP,
    NULL,
    hThisInstance,
    NULL
    );


    ShowWindow (hwnd, nCmdShow);




    while (GetMessage (&messages, NULL, 0, 0))
    {

    TranslateMessage(&messages);

    DispatchMessage(&messages);
    }


    return messages.wParam;
    }




    LRESULT CALLBACK 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;
    }


    Читайте больше в категории: Программирование

    2016-07-08 15:10:01



    Другие статьи:

    STM32. Код работы таймера Basic TIM 6

    Линии и пятна

    STM32. Прерывание на кнопке

    Основы рисунка

    STM32. Программирование на СИ

    WinAPI. Изображения

    Java. Интерфейсы

    JavaScript. Создание простой Галереи изображений

    Бронецький Замок. 3D реконструкція

    STM32. USART