|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
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 прежде, чем зарегистрировать класс.
|
|
|
|
| |