Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Для упрощения программирования с различными региональными настройками Microsoft разработала специфичные "общие" типы данных, процедур и других объектов. Такие типы данных в Visual С++ .NET объявляются с префиксом _t. В контексте данного примера объявление функции winMain как _twinMain принципиального значения не имеет.
winMain использует вызовы функций WIN API и после завершения работы возвращает управление системе Windows. winMain вызывается со следующими параметрами:
• hlnstance. Этот параметр называется дескриптором (описателем) экземпляра приложения. Если выполняется несколько копий одной и той же программы, то каждая имеет свой уникальный дескриптор hlnstance. Дескриптор представляет собой 32-разрядное двоичное число;
• hPrevinstance. Параметр считается устаревшим и всегда равен NULL;
• lpCmdLine. Этот параметр указывает на строку с завершающим нулем, в которой содержатся любые параметры, переданные в программу из командной строки;
• icmdshow. Параметр указывает на вид окна в момент запуска приложения: SW_SHOWNORMAL (окно развернуто на экране) или
SW_SHOWMINNOACTIVE (окно свернуто).
Главной задачей функции winMain является создание окна приложения. Окно создается на основе класса окна. Используя один класс, можно создать несколько экземпляров окна. Кроме того, что класс окна определяет оконную процедуру, он устанавливает и другие характеристики окон, создаваемых на основе данного класса.

Ни одно оконное приложение не будет работать, если не выполнена регистрация класса окна. Поэтому перед созданием окна необходимо зарегистрировать класс окна путем вызова функции RegisterciassEx. В функцию RegisterCiassEx передается один параметр: указатель на структуру типа WNDCLASSEX.
Программа winMain должна вначале заполнить все поля структуры WNDCLASSEX определенными значениями, которые будут характеризовать наше окно — стиль, пиктограмма, цвет и др.
Регистрация класса окна представлена следующим фрагментом программного КОДа ИЗ WinMain (листинг 4.3).
Листинг 4.3. Функция, выполняющая регистрацию класса окна ATOM MyRegisterClass(HINSTANCE hlnstance)
{
WNDCLASSEX wcex;
wcex.cbSize
wcex.style
wcex.lpfnWndProc
wcex.cbClsExtra
wcex.cbWndExtra
wcex.hlnstance
wcex.hlcon
wcex.hCursor
wcex.hbrBackground
wcex.IpszMenuName
wcex.IpszClassName
wcex.hlconSm
sizeof(WNDCLASSEX);
CS_HREDRAW | CS_VREDRAW;
(WNDPROC)WndProc;
0;
0;
hlnstance;
Loadlcon(hlnstance, (LPCTSTR)IDI_HELLOW);
LoadCursor(NULL, IDC_ARROW);
(HBRUSH)(COLOR_WINDOW+l);
(LPCTSTR)IDC HELLOW;
szWindowClass;
Loadlcon(wcex.hlnstance, (LPCTSTR)IDI SMALL);
return RegisterClassEx(&wcex);

Функция MyRegisterClass выполняет действия, необходимые для регистрации класса окна. Во-первых, в ней инициализируется структура WNDCLASSEX. Во-вторых, вызывается функция RegisterCiassEx, которая в качестве параметра принимает указатель на структуру WNDCLASSEX. Регистрация класса окна — это еще не само окно. Отображение окна и регистрация класса окна не имеют ничего общего. Оконный класс определяет общие характеристики окна и может использоваться для создания разных окон в одном приложении.

Само окно приложения создается в результате вызова функции Createwindow. Эта функция детализирует информацию об окне. Разные окна одного и того же класса могут отличаться по размеру, располагаться в разных местах экрана, иметь отличные друг от друга заголовки. Эти характеристики и задаются при создании окна, а не класса окна.
Функция initlnstance отображает конкретное окно. Фрагмент программного кода представлен в листинге 4.4.
Листинг 4.4. Функция, выполняющая отображение окна приложения BOOL Initlnstance(HINSTANCE hlnstance, int nCmdShow)
{
HWND hWnd;
hlnst = hlnstance; // сохраняем дескриптор приложения
// в глобальной переменной
hWnd = Createwindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CWJJSEDEFAULT, 0,
NULL, NULL, hlnstance, NULL);
if (IhWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
Updatewindow(hWnd);
return TRUE;
}

Окно приложения создается функцией WIN API createwindow, имеющей синтаксис:
HWND Createwindow(LPCTSTR lpClassName, // имя класса окна
LPCTSTR lpWindowName, // заголовок окна
DWORD dwStyle, // стиль окна
int x, // начальное положение окна
// по горизонтали
int У, // начальное положение окна
// по вертикали
int nWidth, // ширина окна
int nHeight, // высота окна
HWND hWndParent, // дескриптор родительского
HMENU hMenu, // дескриптор меню окна
HINSTANCE hlnstance, // дескриптор экземпляра
// приложения
LPVOID lpParam // параметры создания окна


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru