На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Using Window Classes



In Windows, each application must register its own window classes. Your application can register an application local class at any time by using the RegisterClassEx function. You must define the window procedure in the application, fill the members of the WNDCLASSEX structure, and then pass a pointer to the structure to the RegisterClassEx function.

The following example shows how to register a local window class and use it to create your application's main window.

#include

// Global variable

HINSTANCE hinst;

// Function prototypes.

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
InitApplication(HINSTANCE);
InitInstance(HINSTANCE, int);
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);

// Application entry point.

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;

if (!InitApplication(hinstance))

return FALSE;

if (!InitInstance(hinstance, nCmdShow))
return FALSE;

while (GetMessage(&msg, (HWND) NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
UNREFERENCED_PARAMETER(lpCmdLine);
}

BOOL InitApplication(HINSTANCE hinstance)
{
WNDCLASSEX wcx;

// Fill in the window class structure with parameters
// that describe the main window.


wcx.cbSize = sizeof(wcx); // size of structure
wcx.style = CS_HREDRAW |
CS_VREDRAW; // redraw if size changes
wcx.lpfnWndProc = MainWndProc; // points to window procedure
wcx.cbClsExtra = 0; // no extra class memory
wcx.cbWndExtra = 0; // no extra window memory
wcx.hInstance = hinstance; // handle of instance
wcx.hIcon = LoadIcon(NULL,
IDI_APPLICATION); // predefined app. icon

wcx.hCursor = LoadCursor(NULL,
IDC_ARROW); // predefined arrow
wcx.hbrBackground = GetStockObject(
WHITE_BRUSH); // white background brush
wcx.lpszMenuName = "MainMenu"; // name of menu resource
wcx.lpszClassName = "MainWClass"; // name of window class
wcx.hIconSm = LoadImage(hinstance, // small class icon
MAKEINTRESOURCE(5),
GetSystemMetrics(SM_CXSMICON),
GetSystemMetrics(SM_CYSMICON),

LR_DEFAULTCOLOR);

// Register the window class.

return RegisterClassEx(&wcx);
}

BOOL InitInstance(HINSTANCE hinstance, int nCmdShow)
{
HWND hwnd;

// Save the application-instance handle.

hinst = hinstance;

// Create the main window.

hwnd = CreateWindow(
"MainWClass", // name of window class
"Sample", // title-bar string
WS_OVERLAPPEDWINDOW, // top-level window

CW_USEDEFAULT, // default horizontal position
CW_USEDEFAULT, // default vertical position
CW_USEDEFAULT, // default width
CW_USEDEFAULT, // default height
(HWND) NULL, // no owner window
(HMENU) NULL, // use class menu
hinstance, // handle of application instance
(LPVOID) NULL); // no window-creation data

if (!hwnd)
return FALSE;


// Show the window and send a WM_PAINT message to the window
// procedure.

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

}


Registering an application global class is similar to registering an application local class, with the following exceptions:

· The style parameter of the WNDCLASSEX structure must specify the CS_GLOBALCLASS style.
· The class can be registered by an application or a DLL. If registered by an application, the class is global only within the application. If the class is registered by a DLL and listed in the registry, the system loads the DLL for every application.
· The application or DLL need not check for a previous instance of the application or DLL before registering the class.




Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Использование Классов Окна



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

Следующий пример показывает как, чтобы регистрировать локальный класс окна и использовать это, чтобы создавать ваше прикладное основное окно.

#include

// Глобальная переменная

HINSTANCE hinst;

// Функциональные прототипы.

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
InitApplication(HINSTANCE);
InitInstance(HINSTANCE, int);
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);

// Точка входа Приложения.

int WINAPI WinMain(hinstance HINSTANCE, hPrevInstance HINSTANCE, LPSTR lpCmdLine, int nCmdShow)
{
msg MSG;

если (!InitApplication(hinstance))

обратная ЛОЖЬ;

если (!InitInstance(hinstance, nCmdShow)) ОБРАТНАЯ ЛОЖЬ;

пока (GetMessage(&msg, (HWND) НЕДЕЙСТВИТЕЛЬНЫЙ, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
возвращайте msg.wParam;
UNREFERENCED_PARAMETER(lpCmdLine);
}

BOOL InitApplication(hinstance HINSTANCE)
{
wcx WNDCLASSEX;

// Заполните структуру класса окна параметрами //, которые описывают основное окно.


wcx.cbSize = sizeof(wcx); // размер структуры wcx.style = CS_HREDRAW | CS_VREDRAW; // обновление изображения если размер изменяет wcx.lpfnWndProc = MainWndProc; // точки на окно процедуры wcx.cbClsExtra = 0; // никакая дополнительная память класса wcx.cbWndExtra = 0; // никакая дополнительная память окна wcx.hInstance = hinstance; // ручка примера wcx.hIcon = LoadIcon(НЕДЕЙСТВИТЕЛЬНАЯ, IDI_APPLICATION); // встроенная app. икона

wcx.hCursor = LoadCursor(НЕДЕЙСТВИТЕЛЬНЫЙ, IDC_ARROW); // встроенная стрела wcx.hbrBackground = GetStockObject( WHITE_BRUSH); // белая щетка фона wcx.lpszMenuName = "MainMenu"; // имя ресурса меню wcx.lpszClassName = "MainWClass"; // имя класса окна wcx.hIconSm = LoadImage(hinstance, // небольшая иконка класса MAKEINTRESOURCE(5), GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON),

LR_DEFAULTCOLOR);

// Зарегистрируйте класс окна.

возвращайте RegisterClassEx(&wcx);
}

BOOL InitInstance(hinstance HINSTANCE, int nCmdShow)
{
HWND hwnd;

// Сохраняемый прикладной пример ручки.

hinst = hinstance;

// Создайте основное окно.

hwnd = CreateWindow(
"MainWClass", // ИМЯ класса окна "Образца", // название-зона строки WS_OVERLAPPEDWINDOW, // окна верхнего уровня

CW_USEDEFAULT, // по умолчанию горизонтальная позиция CW_USEDEFAULT, // по умолчанию вертикальная позиция CW_USEDEFAULT, // по умолчанию ширина CW_USEDEFAULT, // по умолчанию высота (HWND) НЕДЕЙСТВИТЕЛЬНЫЙ, // никакое окно владельца (HMENU) НЕДЕЙСТВИТЕЛЬНЫЙ, // hinstance меню класса использования, // ручки прикладного примера (LPVOID) НЕДЕЙСТВИТЕЛЬНЫЙ); // никакое окно-создание данных

если (!hwnd) обратная ЛОЖЬ;


// Покажите окно и посылайте сообщение WM_PAINT в окно // процедура.

ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
возвращайтесь ВЕРНО;

}


Регистр прикладного глобального класса подобный регистру прикладного локального класса, с следующими исключениями:

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




Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz