На главную

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 | Скачать Вниз

Creating Accelerators for Font Attributes



The example in this section shows how to perform the following tasks:

· Create an accelerator-table resource.
· Load the accelerator table at run time.
· Translate accelerators in a message loop.
· Process WM_COMMAND messages generated by the accelerators.



These tasks are demonstrated in the context of an application that includes a Character menu and corresponding accelerators that allow the user to select attributes of the current font.
The following portion of a resource-definition file defines the Character menu and the associated accelerator table. Note that the menu items show the accelerator keystrokes and that each accelerator has the same identifier as its associated menu item.

#include
#include "acc.h"

MainMenu MENU
BEGIN
POPUP "&Character"
BEGIN
MENUITEM "&Regular\tF5", IDM_REGULAR
MENUITEM "&Bold\tCtrl+B", IDM_BOLD
MENUITEM "&Italic\tCtrl+I", IDM_ITALIC
MENUITEM "&Underline\tCtrl+U", IDM_ULINE
END
END

FontAccel ACCELERATORS
BEGIN
VK_F5, IDM_REGULAR, VIRTKEY
"B", IDM_BOLD, CONTROL, VIRTKEY
"I", IDM_ITALIC, CONTROL, VIRTKEY

"U", IDM_ULINE, CONTROL, VIRTKEY
END


The following sections from the application's source file show how to implement the accelerators.

HWND hwndMain; /* handle of main window */
HANDLE hinstAcc; /* handle of application instance */

int WINAPI WinMain(hinst, hinstPrev, lpCmdLine, nCmdShow)
HINSTANCE hinst;
HINSTANCE hinstPrev;
LPSTR lpCmdLine;
int nCmdShow;
{
MSG msg; /* application messages */
HACCEL haccel; /* handle of accelerator table */

.
. /* Perform the initialization procedure. */
.

/* Create a main window for this application instance. */


hwndMain = CreateWindowEx(0L, "MainWindowClass",
"Sample Application", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL,
hinst, NULL );

/* If a window cannot be created, return "failure." */

if (!hwndMain)
return FALSE;

/* Make the window visible and update its client area. */

ShowWindow(hwndMain, nCmdShow);
UpdateWindow(hwndMain);

/* Load the accelerator table. */


haccel = LoadAccelerators(hinstAcc, "FontAccel");
if (haccel == NULL)
HandleAccelErr(ERR_LOADING); /* application defined */

/*
* Get and dispatch messages until a WM_QUIT message is
* received.
*/

while (GetMessage(&msg, NULL, NULL, NULL)) {

/* Check for accelerator keystrokes. */

if (!TranslateAccelerator(
hwndMain, /* handle of receiving window */
haccel, /* handle of active accel. table */

&msg)) { /* address of message data */
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}

LRESULT APIENTRY MainWndProc(hwndMain, uMsg, wParam, lParam)
HWND hwndMain;
UINT uMsg;
WPARAM wParam;
LPARAM lParam;
{
BYTE fbFontAttrib; /* array of font-attribute flags */
static HMENU hmenu; /* handle of main menu */

switch (uMsg) {

case WM_CREATE:

/*
* Add a check mark to the Regular menu item to
* indicate that it is the default.
*/

hmenu = GetMenu(hwndMain);
CheckMenuItem(hmenu, IDM_REGULAR, MF_BYCOMMAND |
MF_CHECKED);
return 0;

case WM_COMMAND:
switch (LOWORD(wParam)) {

/* Process the accelerator and menu commands. */


case IDM_REGULAR:
case IDM_BOLD:
case IDM_ITALIC:
case IDM_ULINE:

/*
* GetFontAttributes is an application-defined
* function that sets the menu-item check marks
* and returns the user-selected font attributes.
*/

fbFontAttrib = GetFontAttributes(
(BYTE) LOWORD(wParam), hmenu);


/*
* SetFontAttributes is an application-defined
* function that creates a font with the
* user-specified attributes the font with
* the main window's device context.
*/

SetFontAttributes(fbFontAttrib);
break;

default:
break;
}
break;


.
. /* Process other messages. */
.

default:
return DefWindowProc(hwndMain, uMsg, wParam, lParam);
}
return NULL;
}



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

Создание Акселераторов для Шрифтовых Атрибутов



Пример в этой секции показывает как, чтобы выполнять следующие задачи:

Создавать акселератор-табличный ресурс.
Нагрузка стол акселератора во времени выполнения.
Переводиться акселераторы в цикл сообщения.
Сообщения Процесса WM_COMMAND генерировались акселераторами.



Эти задачи продемонстрированы в контексте приложения, которое включает меню Символа и соответствующих акселераторов, которые позволяют пользователя, чтобы выбираться атрибуты текущего шрифта.
Следующая часть ресурса-определения файла определяет меню Символа и связанная таблица акселератора. Отметьте, что пункты меню показывают нажатия клавиши акселератора и, что каждый акселератор имеет тот же идентификатор как связанный пункт меню.

#include #include "acc.h"

МЕНЮ MainMenu НАЧИНАЕТСЯ
ВЫСВЕЧИВАНИЕ "&Символ" НАЧИНАЮТСЯ
MENUITEM "&Regular\tF5", IDM_REGULAR MENUITEM "&Bold\tCtrl+B", IDM_BOLD MENUITEM "&Italic\tCtrl+I", IDM_ITALIC MENUITEM "&Underline\tCtrl+U", КОНЕЧНЫЙ КОНЕЦ IDM_ULINE

АКСЕЛЕРАТОРЫ FontAccel НАЧИНАЮТСЯ
VK_F5, IDM_REGULAR, VIRTKEY "B", IDM_BOLD, УПРАВЛЕНИЕ, VIRTKEY "Я", IDM_ITALIC, УПРАВЛЕНИЕ, VIRTKEY

"U", IDM_ULINE, УПРАВЛЕНИЕ, КОНЕЦ VIRTKEY


Следующие секции из прикладного исходного файла показывают как, чтобы осуществлять акселераторы.

HWND hwndMain; /* ручка основного окна */ РУЧКА hinstAcc; /* ручка прикладного примера */

int WINAPI WinMain(hinst, hinstPrev, lpCmdLine, nCmdShow) HINSTANCE hinst;
HINSTANCE hinstPrev;
LPSTR lpCmdLine;
int nCmdShow;
{
msg MSG; /* прикладные сообщения */ HACCEL haccel; /* ручка таблицы акселератора */

.
. /* Выполните инициализацию procedure. */
.

/* Создайте основное окно для этого приложения instance. */


hwndMain = CreateWindowEx(0L, "MainWindowClass", "Приложение Образца", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, НЕДЕЙСТВИТЕЛЬНЫЙ, НЕДЕЙСТВИТЕЛЬНЫЙ, hinst, НЕДЕЙСТВИТЕЛЬНЫЙ );

/* Если окно не может быть создано, возвращайте "неудачу." */

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

/* Сделайте окном видимым и корректируйте своего клиента area. */

ShowWindow(hwndMain, nCmdShow);
UpdateWindow(hwndMain);

/* Загрузите акселератор table. */


haccel = LoadAccelerators(hinstAcc, "FontAccel");
если (haccel == НЕДЕЙСТВИТЕЛЬНЫЙ)
HandleAccelErr(ERR_LOADING); /* приложение определено */

/*
* Получите и посылайте сообщения пока сообщение WM_QUIT не будет
* полученное.
*/

пока (GetMessage(&msg, НЕДЕЙСТВИТЕЛЬНЫЙ, НЕДЕЙСТВИТЕЛЬНЫЙ, НЕДЕЙСТВИТЕЛЬНЫЙ)) {

/* Чек акселератора keystrokes. */

если (!TranslateAccelerator( hwndMain, /* РУЧКА, получающий окно */ haccel, /* ручка активной accel. таблицы */

&msg)) { /* адрес данных сообщения */ TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
возвращайте msg.wParam;
}

LRESULT APIENTRY MainWndProc(hwndMain, uMsg, wParam, lParam) HWND hwndMain;
UINT uMsg;
WPARAM wParam;
LPARAM lParam;
{
БАЙТ fbFontAttrib; /* массив шрифтового-атрибута сигнализирует */ статический HMENU hmenu; /* ручка основного меню */

ключ (uMsg) {

случай WM_CREATE:

/*
* Добавьте контрольную отметку к Регулярному пункту меню, чтобы
* укажите, что это по умолчанию.
*/

hmenu = GetMenu(hwndMain);
CheckMenuItem(hmenu, IDM_REGULAR, MF_BYCOMMAND | MF_CHECKED);
возврат 0;

случай WM_COMMAND: ключ (LOWORD(wParam)) {

/* Обработайте акселератор и меню commands. */


случай IDM_REGULAR: случай IDM_BOLD: случай IDM_ITALIC: случай IDM_ULINE:

/*
* GetFontAttributes - определенное приложение
* функция, что устанавливает меню-пункт контрольных отметок
* и возврат выбранный шрифт пользователя приписывается.
*/

fbFontAttrib = GetFontAttributes( (БАЙТ) LOWORD(wParam), hmenu);


/*
* SetFontAttributes - определенное приложение
* функция, что создает шрифт с the
* определенный пользователь приписывает шрифт с
* контекст устройства основного окна.
*/

SetFontAttributes(fbFontAttrib);
прерывание;

умолчание: прерывание;
}
прерывание;


.
. /* Обработайте другой messages. */
.

умолчание:
возвращайте DefWindowProc(hwndMain, uMsg, wParam, lParam);
}
возвращайте НЕДЕЙСТВИТЕЛЬНЫЙ;
}



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