Отправляет email-рассылки с помощью сервиса Sendsay

Windows API

  Все выпуски  

Windows API


Информационный Канал Subscribe.Ru

Windows API. Рассылки сайта progs.biz
Рассылка № 23
С Новым Годом и Рождеством!
 
Начало > WinAPI > Основы > Урок 25

Б. Страуструп. Язык программирования С++.
Б. Страуструп. Язык программирования С++.
Заказать на Озоне

Подробнее


Полные версии уроков (с картинками): урок 25.

Windows API
Урок 25. Добавляем акселератор

Акселератор - это некоторая комбинация клавиш, которая дублирует команду (скажем, команду меню). Например, для некоторого меню вы можете создать акселератор Ctrl+D - это означает, что и при выборе этого пунтка меню мышкой и при нажатии комбинации клавиш Ctrl+D будет производится одно и то же действие.

Для создания акселератора вы должны сделать следующие действия: создать таблицу акселераторов через API-функцию CreateAcceleratorTable. Далее мы должны в цикле while, обрабатывающем сообщения Windows, вызвать API-функцию TranslateAccelerator, которая переводит сообщения от нажатых клавиш в WM_COMMAND (или в WM_SYSCOMMAND). И, наконец, в соответствующем месте мы должны уничтожить созданную таблицу акселераторов путем вызова API-функции DestroyAcceleratorTable.

Теперь практическая часть урока. А качестве основы возьмем программу с меню, написанную на прошлом уроке.

Шаг первый - создание таблицы акселераторов:

HACCEL CreateAccelerators()
{
    // Массив акселераторов.
    ACCEL acc[1];
    // Задаем акселератор команды.
    // Идентификатор команды.
    acc[0].cmd = 1001;
    // Определяем клавишу-модификатор (Ctrl).
    acc[0].fVirt = FVIRTKEY|FCONTROL;
    // Определяем клавишу.
    acc[0].key = 0x4e;
    // Создаем таблицу акселераторов.
    return CreateAcceleratorTable((LPACCEL)acc, 1);
}

Этот кусок кода можно вставить, например, после include в самом начале программы. В этом фрагменте у нас только один акселератор (в массиве только один элемент). Для акселератора мы должны определить идентификатор команды и комбинацию клавиш, по которой команда будет вызываться. Тут мы определили, что наша команда с идентификатором 1001 будет вызываться по Ctrl+N.

Следующий шаг изменение функции WinMain. Тут мы делаем вызов только что определеной функции CreateAccelerators, изменяем цикл while и уничтожаем таблицу акселераторов:

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR     lpCmdLine,
                   int       nCmdShow)
{
    ...
    // Создание таблицы акселераторов.
    HACCEL hAccel = CreateAccelerators();
    
    while(GetMessage(&msg,NULL,0,0))
    {
        // Перевод сообщения от нажатых клавиш в WM_COMMAND.
        if(!(hAccel && TranslateAccelerator(hwnd, hAccel, &msg)))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }

    }
    // Уничтожение таблицы акселераторов.
    DestroyAcceleratorTable(hAccel);
    return msg.wParam;
}

Собственно говоря, все. Можно компилировать и запускать программу. Теперь наш messagebox будет появляться не только при выборе соответствующего пункта меню, но и при нажатии Ctrl+N.

Рассылки сайта progs.biz
Visual C++, MFC
C# и .NET
VB.NET
ASP.NET new!
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


PARKING.RU. Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows(r): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(r), безопасность, гарантии. http://www.parking.ru


Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2005 сайт progs.biz
© 2002-2005 Алексеев Игорь

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.winapilessons
Отписаться

В избранное