|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Creating a Class Menu
The following example shows how to create a class menu for an application, create a window that uses the class menu, and process menu commands in the window procedure.
Following is the relevant portion of the application's header file:
// Menu-template resource identifier #define IDM_MYMENURESOURCE 3
Following are the relevant portions of the application itself:
HINSTANCE hinst; int APIENTRY WinMain(hinstance, hPrevInstance, lpCmdLine, nCmdShow) HINSTANCE hinstance; HINSTANCE hPrevInstance; LPSTR lpCmdLine; int nCmdShow; { MSG msg; // message WNDCLASS wc; // windowclass data HWND hwnd; // handle to the main window // Create the window class for the main window. Specify // the identifier of the menu-template resource as the // lpszMenuName member of the WNDCLASS structure to create
// the class menu. wc.style = 0; wc.lpfnWndProc = (WNDPROC) MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hinstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = GetStockObject(WHITE_BRUSH); wc.lpszMenuName = MAKEINTRESOURCE(IDM_MYMENURESOURCE); wc.lpszClassName = "MainWClass"; if (!RegisterClass(&wc)) return FALSE;
hinst = hinstance; // Create the main window. Set the hmenu parameter to NULL so // that Windows uses the class menu for the window. hwnd = CreateWindow("MainWClass", "Sample Application", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hinstance, NULL); if (hwnd == NULL) return FALSE; // Make the window visible and send a WM_PAINT message to the
// window procedure. ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); // Start the main message loop. while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; UNREFERENCED_PARAMETER(hPrevInstance); } LRESULT APIENTRY MainWndProc(hwnd, uMsg, wParam, lParam) HWND hwnd; UINT uMsg; WPARAM wParam; LPARAM lParam; { switch (uMsg) {
. . // Process other window messages. . case WM_COMMAND: // Test for the identifier of a command item. switch(LOWORD(wParam)) { case IDM_FI_OPEN: DoFileOpen(); // application-defined break; case IDM_FI_CLOSE: DoFileClose(); // application-defined break; .
. // Process other menu commands. . default: break; } return 0; . . // Process other window messages. . default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } return NULL; }
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Создание Меню Класса
Следующий пример показывает как, чтобы создавать меню класса для приложения, создавать окно, которое использует меню класса, и меню процесса командует в процедуре окна.
Следующее является важной частью прикладного файла заголовка:
// Меню-шаблон идентификатора ресурса #define IDM_MYMENURESOURCE 3
Следующее является самими важными частями приложения:
HINSTANCE hinst; int APIENTRY WinMain(hinstance, hPrevInstance, lpCmdLine, nCmdShow) hinstance HINSTANCE; hPrevInstance HINSTANCE; LPSTR lpCmdLine; int nCmdShow; { msg MSG; // wc сообщения WNDCLASS; // windowclass данные HWND hwnd; // ручка в основное окно // Создайте класс окна для основного окна. Определите // идентификатор меню-шаблона ресурса как // элемент lpszMenuName структуры WNDCLASS, чтобы создаваться
// меню класса. wc.style = 0; wc.lpfnWndProc = (WNDPROC) MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hinstance; wc.hIcon = LoadIcon(НЕДЕЙСТВИТЕЛЬНЫЙ, IDI_APPLICATION); wc.hCursor = LoadCursor(НЕДЕЙСТВИТЕЛЬНЫЙ, IDC_ARROW); wc.hbrBackground = GetStockObject(WHITE_BRUSH); wc.lpszMenuName = MAKEINTRESOURCE(IDM_MYMENURESOURCE); wc.lpszClassName = "MainWClass"; если (!RegisterClass(&wc)) ОБРАТНАЯ ЛОЖЬ;
hinst = hinstance; // Создайте основное окно. Установите параметр hmenu на НЕДЕЙСТВИТЕЛЬНЫЙ так //, что Windows использует меню класса для окна. hwnd = CreateWindow("MainWClass", "Приложение Образца", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, НЕДЕЙСТВИТЕЛЬНЫЙ, НЕДЕЙСТВИТЕЛЬНЫЙ, hinstance, НЕДЕЙСТВИТЕЛЬНЫЙ); если (hwnd == НЕДЕЙСТВИТЕЛЬНЫЙ) обратная ЛОЖЬ; // Сделайте окном видимым и посылайте сообщение WM_PAINT в the
// процедура окна. ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); // Начало основной цикл сообщения. пока (GetMessage(&msg, НЕДЕЙСТВИТЕЛЬНЫЙ, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } возвращайте msg.wParam; UNREFERENCED_PARAMETER(hPrevInstance); } LRESULT APIENTRY MainWndProc(hwnd, uMsg, wParam, lParam) HWND hwnd; UINT uMsg; WPARAM wParam; LPARAM lParam; { ключ (uMsg) {
. . // Процесс другие сообщения окна. . случай WM_COMMAND: // Тест для идентификатора командного пункта. ключ(LOWORD(wParam)) { случай IDM_FI_OPEN: DoFileOpen(); // определенное прикладное прерывание; случай IDM_FI_CLOSE: DoFileClose(); // определенное прикладное прерывание; .
. // Процесс другие команды меню. . умолчание: прерывание; } возврат 0; . . // Процесс другие сообщения окна. . умолчание: возвращайте DefWindowProc(hwnd, uMsg, wParam, lParam); } возвращайте НЕДЕЙСТВИТЕЛЬНЫЙ; }
|
|
|
|
| |