Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Каркас приложения Windows






     

    Теперь; когда мы обсудили все необходимые основные понятия, можно начать разработку простейшего приложения Windows. Как уже отмечалось, все Windows-программы имеют определенные общие черты. Таким образом, в этом разделе мы разрабатываем программу, которая может быть каркасом или шаблоном для любого другого приложения. Технология написания программ для Windows предполагает широкое использование таких каркасов, поскольку, в отличие от DOS, простейшая программа для которой занимает около 5 строк, простейшая программа для Windows содержит примерно 50 строк.

    Простейшая программа для Windows состоит из двух функций – WinMain() и оконной функции. Функция WinMain() обычно должна выполнять следующие действия:

    1. Определение класса окна.

    2. Регистрация класса окна.

    3. Создание окна данного класса.

    4. Отображение окна.

    5. Запуск цикла обработки сообщений.

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

     

    Пример 2-1. Итак, рассмотрим простейшую программу для Windows. Она создает стандар­тное окно, которое имеет заголовок, системное меню и кнопки минимизации, полноэкранной развертки и закрытия окна. Это окно можно перемещать по экрану и изменять его размер.

     

    // Каркасное приложение Windows

    #include < Windows.h>

    LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM,

    LPARAM);

    char szWinName[]=" МоеОкно"; // Имя класса окна

     

    int WINAPI WinMain(HINSTANCE hThisInst,

    HINSTANCE hPrevInst,

    LPSTR lpszArgs,

    int nWinMode)

    {

    HWND hwnd;

    MSG msg;

    WNDCLASS wcl; // Определить класс окна

    wcl.hInstance=hThisInst; // Дескриптор приложения

    wcl.lpszClassName=szWinName; // Имя класса окна

    wcl.lpfnWndProc=WindowFunc; // Функция окна

    wcl.style=0; // Стиль по умолчанию

    wcl.hIcon=LoadIcon(NULL, IDI_APPLICATION); // Иконка

    wcl.hCursor=LoadCursor(NULL, IDC_ARROW); // Курсор

    wcl.lpszMenuName=NULL; // Без меню

    wcl.cbClsExtra=0; // Без дополнительной информации

    wcl.cbWndExtra=0;

    wcl.hbrBackground=

    (HBRUSH)GetStockObject(WHITE_BRUSH); //Белый фон

    if(! RegisterClass(& wcl)) // Регистрируем класс окна

    return 0;

    hwnd=CreateWindow(szWinName, // Создать окно

    " Каркас программы для Windows",

    WS_OVERLAPPEDWINDOW, // Стиль окна

    CW_USEDEFAULT, // x-координата

    CW_USEDEFAULT, // y-координата

    CW_USEDEFAULT, // Ширина

    CW_USEDEFAULT, // Высота

    HWND_DESKTOP, // Нет родител. окна

    NULL, // Нет меню

    hThisInst, // Дескриптор приложения

    NULL); // Нет дополнит. аргументов

    ShowWindow (hwnd, nWinMode); // Показать окно

    UpdateWindow (hwnd); // и перерисовать

     

    while(GetMessage(& msg, NULL, 0, 0)) // Запустить цикл

    { // обработки сообщений

    TranslateMessage(& msg); // Разреш. исп. клавиатуры

    DispatchMessage (& msg); // Вернуть управл. Windows

    }

    return msg.wParam;

    }

     

    // Следующая функция вызывается операционной

    // системой Windows и получает в качестве

    // параметров сообщения из очереди сообщений

    // данного приложения

    LRESULT CALLBACK WindowFunc(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.h. Как уже говорилось, этот файл содержит прототипы функций API, а также определения типов данных и макроопределения, используемые в профаммах для Windows. Например, типы данных HWND и WNDCLASS опреде­лены в Windows.h.

    Оконная функция, используемая программой, названа WindowsFunc(). Она вызы­вается операционной системой для взаимодействия с программой.

    Выполнение программы начинается с WinMain(), которой передается четыре параметра.

    Параметры hThisInst и hPrevInst являются дескрипторами:

    hThisInst – это дескриптор текущего экземпляра приложения (поскольку Windows – многозадачная система, в ней может одновременно работать несколько экземпляров одной и той же програм­мы);

    hPrevInst – этот дескриптор всегда будет равен NULL.

    Параметр lpszArgs является указателем на строку, содержащую аргументы программы при ее запуске. Параметр nWinModeопределяет способ визуализации окна при запуске программы.

    В функции WinMain()определяются три переменные. Переменная hwnd будет содержать дескриптор главного окна программы. Структура msg станет буфером для хранения сообщений, а структура wclбудет использоваться для определения класса окна.

     






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.