Главная страница
Навигация по странице:

  • RegisterClassEx

  • LoadIcon

  • GetStockObject

  • Алгоритмизации


    Скачать 1.15 Mb.
    НазваниеАлгоритмизации
    Дата27.09.2022
    Размер1.15 Mb.
    Формат файлаdocx
    Имя файла12_100229_1_124427 (1).docx
    ТипДокументы
    #700459
    страница57 из 67
    1   ...   53   54   55   56   57   58   59   60   ...   67

    Основнаяпрограмма


    Для работы программы подключен файл windows.h, содержащий заголовочные файлы с объявлениями функций, структур и числовых констант. Далее следует декларация прототипа функции WndProc– «оконная процедура» для окна программы Hello.


    Приложение6

    Основной функцией (точкой входа программы), аналогом стандартной функции main языка Си для Windows является функция WinMain:

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

    PSTR szCmdLine, int iCmdShow);

    использующая последовательность вызововWINAPIи возвращающая ОС

    Windowsцелое значение. В ней используются четыре параметра:

    hInstance– описатель экземпляра – уникальное число, идентифицирующее программу;

    hPrevInstance– предыдущий (previous) экземпляр; если в данный момент не было загружено копий программы, то hPrevInstance= 0 или NULL;

    szCmdLineуказатель на строку, в которой содержатся любые параметры, переданные в программу из командной строки;

    iCmdShow– число, показывающее, каким должно быть выведено на экран окно в начальный момент; обычно: SW_SHOWNORMAL(1) вывод окна нормального размера, SW_SHOWMINNOACTIVE(7) – окно должно быть изначально свернутым; префикс SW означает «показать окно» (showwindow).

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


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

    Перед созданием окна необходимо зарегистрировать класс окна, вызвав функцию RegisterClassEx, это расширенная версия функции Register- Class (Exextended– расширенный). Параметр функции – указатель на структуру типа WNDCLASSEX, определенную в заголовочных файлах:

    typedef struct tagWNDCLASSEX { UINTcbSize;

    UINT style; WNDPROC lpfnWndProc; int cbClsExtra;

    int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCSTR lpszMenuName; LPCSTR lpszClassName; HICON hIconSm;

    } WNDCLASSEX;
    Префиксы LPи lpозначают «длинный указатель» (longpointer),

    приставка lpfn «длинный указатель на функцию» (longpointertoa function);

    Приложение6

    приставка cb «счетчик байт» (counterofbytes); префикс hbr это

    «описатель кисти» (handletoabrush).

    Для работы WinMainнеобходимо определить эту структуру: WNDCLASSEX wndclass;

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

    Поле cbSize равно длине структуры. Инструкция: wndclass.style = CS_HREDRAW | CS_VREDRAW;

    осуществляет объединение двух идентификаторов «стиля класса» с помощью поразрядной операции «ИЛИ» (|). В заголовочных файлах Windows, идентификаторы, начинающиеся с префикса CS, задаются в виде 32- разрядной константы, только один из разрядов которой установлен в 1.

    Например, CS_VREDRAW (горизонтальный) – 0x0001, а CS_HREDRAW (вертикальный) – 0x0002 показывают, что все окна должны целиком перерисовываться при изменении размеров окна. Эти идентификаторы называют «поразрядными флагами» (bit flags).

    Третье полеwndclass.lpfnWndProc= WndProc; устанавливает оконную процедуру данного окна.

    Следующие две инструкции:

    wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0;

    резервируют дополнительное пространство, которое может быть использовано программой, в данной программе эта возможность не используется значения равны 0, иначе в этом поле было бы установлено

    «число байт» резервируемой памяти.

    В следующем поле описатель экземпляра программы, который является одним из параметров WinMain:

    wndclass.hInstance = hInstance;

    Инструкции

    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);

    и

    wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

    устанавливают значки (иконки), которые появляется на панели задач и в заголовке окна. Для получения описателя стандартного значка первый параметр устанавливается в NULL; при загрузке пользовательского значка этот параметр должен быть равен описателю экземпляра программы. Второй параметр определяется в заголовочных файлах, значок IDI_APPLICATION– это маленькое изображение окна. Функция LoadIcon возвращает описатель этого значка для полей wndclass.hIcon и wndclass.hIconSm, имеющих тип HICON («описатель значка» – handle to an icon).


    Приложение6

    Функция LoadCursorзагружает стандартный курсор IDC_ARROWи возвращает его описатель полю hCursor:

    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);

    Поле hbrBackgroundзадает цвет фона рабочей области окон (префикс hbrозначает «описатель кисти» handletoabrush). Кисть– графический объект, используемый для закрашивания области. В Windows имеется несколько стандартных кистей. В инструкции

    wndclass.hbrBackground = GetStockObject(WHITE_BRUSH);

    функция GetStockObjectвозвращает описатель белой кисти.

    Следующее поле задает меню класса окна, т.к. в нашем случае оно отсутствует – поле установлено в NULL:

    wndclass.lpszMenuName = NULL;

    На последнем этапе классу должно быть присвоено имя, которое может совпадать с именем программы, хранящемся в переменной szAppName:

    wndclass.lpszClassName = szAppName;

    После того как инициализированы все поля структуры, регистрируем класс окна, вызывая функцию: RegisterClassEx (&wndclass);

    1   ...   53   54   55   56   57   58   59   60   ...   67


    написать администратору сайта