- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Программирование для карманных компьютеров - Владимир Волков
Шрифт:
Интервал:
Закладка:
? Separator – установка этого флажка превращает данный пункт меню в разделитель.
? Shared New – выводит в строку меню кнопку New, предназначенную для создания нового пустого документа.
? Prompt – текст, предназначенный для автоматического показа в строке состояния, когда выбрана данная команда меню.
? Свойство Break имеет три состояния. Значение None указывает, что свойство не активно. Значение Column говорит о том, что данный пункт меню начинает следующий вертикальный столбец, а значение Bar указывает, что данный пункт меню начинает следующий вертикальный столбец, отделенный от предыдущего вертикальной линией.
В следующем списке рассматриваются органы управления, расположенные на вкладке Styles.
? Check Button – при установке данного флажка кнопка меню становится западающей. После первого щелчка мышью она переходит в нажатое состояние, после второго – возвращается в исходное состояние.
? Group – установка данного флажка позволяет создавать РіСЂСѓРїРїСѓ РєРЅРѕРїРѕРє. Рто имеет смысл, РєРѕРіРґР° РєРЅРѕРїРєРё РІСЃРµ имеют стиль Check Button. РўРѕРіРґР° нажатие РѕРґРЅРѕР№ РєРЅРѕРїРєРё вызывает автоматическое отжатие РґСЂСѓРіРѕР№ РєРЅРѕРїРєРё РІ РіСЂСѓРїРїРµ.
? Auto Size – автоматически меняет размер кнопки при изменении надписи.
? No wrap – установка флажка не позволяет переносить текст на другую строку.
? Pressed – нажатая РєРЅРѕРїРєР° РїСЂРё создании меню. Рмеет смысл для РєРЅРѕРїРєРё СЃРѕ стилем Check Button.
? Grayed – кнопка будет окрашена в серый цвет и станет неактивна.
? Indeterminate – кнопка неопределенного стиля, активная, но серая.
? Hidden – скрытая кнопка.
? Highlighted – надпись кнопки подкрашена в контрастный цвет.
Рнаконец, в последнем списке рассматривается предназначение органов управления, расположенных на вкладке More Styles.
? Bitmap – кнопка вместо надписи несет на себе изображение.
? Bitmap index – уникальный индекс, идентифицирующий номер изображения в наборе изображений, подключенных к меню.
Однако меню не исчерпывает все потребности при создании набора команд. Гораздо большую гибкость дает элемент управления CommandBar.
CommandBar
Рассмотрение возможностей этого органа управления лучше начать с конкретного примера, который приведен в следующем разделе.
Упражнение 4.6
1. Создать простое приложение и сохранить его с именем CommandBar.
2. В окне Workspace перейти на вкладку ResourceView, открыть корневую папку Menu resources и в этой папке перейти в подкаталог Menubar. Существующее меню нужно отредактировать так, чтобы оно содержало команды Tools, File и Edit. Не надо добавлять дополнительные элементы в меню, создавать подменю и совершать прочие действия, которые уже рассматривались в предыдущем упражнении. Данное меню будет нужно только для демонстрации использования ресурса меню при помещении его в CommandBar.
3. Как и в прошлом упражнении, добавить к ресурсам изображение для кнопок.
4. Щелкнуть внутри дерева ресурсов правой клавишей мыши на папке Dialogs и в контекстном меню выполнить команду Insert Dialog. В папку будет добавлен еще один диалог с идентификатором IDD_DIALOG1. Теперь нужно перейти в правую часть окна, в редактор диалога. На панели Controls следует отыскать компонент Combo Box и поместить его на окно диалога.
5. Перейти в редактор кода, и в файле CommandBar.cpp добавить код, приведенный в листинге 4.26.
Листинг 4.26//объявить хэндлеры для меню, компонентов CommandBar и Combo Box
HWNDg_hwndCombo, g_hwndMenu;
HMENUg_hmCB;
//объявление структуры для кнопок:
static TBBUTTON b_but1, b_but2, b_but3;6. Теперь нужно перейти в процедуру WinProc и в ее начале объявить переменные, как показано в листинге 4.27. Листинг 4.27
int i;
RECT *lprc;
wchar_t *mstr[]={L"1", L"2", L"3", L"4"};7. Удалить из обработчика сообщения WM_CREATE ранее сгенерированный код и ввести туда код, приведенный в листинге 4.28. Листинг 4.28
//Создаем CommandBar и помещаем его хэндлер в g_hwndCB
g_hwndCB = CommandBar_Create(g_hInst,hWnd, 500);
//Добавляем к списку изображений CommandBar (CB) наши рисунки
CommandBar_AddBitmap(g_hwndCB, g_hInst,IDB_BITMAP1, 2, 16, 16);
//Устанавливаем положение внизу окна
//Закомментируйте эту строку, и CB будет сверху
SendMessage (g_hwndCB, TB_SETSTYLE, 0, (LPARAM)(DWORD)CCS_BOTTOM);
//Добавляем в CB меню
CommandBar_InsertMenubar(g_hwndCB, g_hInst, IDM_MENU, 0);
//Добавляем в CB Combo Box
g_hwndCombo = CommandBar_InsertComboBox (g_hwndCB, g_hInst, 30,
WS_CHILD|WS_VISIBLE,IDC_COMBO1, 1);
//Задаем содержимое Combo Box
for (i=0;i<4;i++)
SendMessage (g_hwndCombo, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)mstr[i]);
//Устанавливаем текущую позицию, выбранную в Combo Box
SendMessage (g_hwndCombo, CB_SETCURSEL, (WPARAM)0, 0);
//Рспользуя структуры свойств РєРЅРѕРїРѕРє, устанавливаем РёС… параметры
//и добавляем кнопки к CB
b_but1.iBitmap = 0;
b_but1.idCommand = 201;
b_but1.fsState = TBSTATE_ENABLED;
//Рта РєРЅРѕРїРєР° будет содержать РІ себе выпадающий СЃРїРёСЃРѕРє
b_but1.fsStyle =TBSTYLE_BUTTON | TBSTYLE_DROPDOWN;
b_but1.dwData = 0;
b_but1.iString = -1;
CommandBar_InsertButton (g_hwndCB, 2, &b_but1);
//Создаем выпадающий список для кнопки
g_hmCB = CreatePopupMenu();
AppendMenu(g_hmCB,MF_STRING, 1000,TEXT(В«AI1В»));
AppendMenu(g_hmCB,MF_STRING, 1001, TEXT(В« AI2В»));
//Следующие две кнопки будут зависеть друг от друга
b_but2.iBitmap = 1;
b_but2.idCommand = 202;
b_but2.fsState = TBSTATE_ENABLED;
b_but2.fsStyle = TBSTYLE_BUTTON|TBSTYLE_CHECKGROUP;
b_but2.dwData = 0;
b_but2.iString = -1;
CommandBar_InsertButton (g_hwndCB, 3, &b_but2);
b_but3.iBitmap = 0;
b_but3.idCommand = 203;
b_but3.fsState = TBSTATE_ENABLED;
b_but3.fsStyle = TBSTYLE_BUTTON|TBSTYLE_CHECKGROUP;
b_but3.dwData = 0;
b_but3.iString = -1;
CommandBar_InsertButton (g_hwndCB, 4, &b_but3);
break;8. Запустить проект. Все должно работать, кроме выпадающего списка. Когда пользователь нажимает кнопку со стрелкой, щелчок на самой кнопке очень легко обработать в ветви WM_COMMAND, выловив идентификатор кнопки. Но вот как обработать щелчок на стрелке, чтобы появился выпадающий список? Теоретически, щелчок на этой стрелке должен генерировать константу TBN_DROPDOWN внутри поля lParam сообщения WM_NOTIFY, но, как выясняется, такой константы в этом поле нет. На самом деле в поле lParam помещается указатель на структуру LPTBNOTIFY, в которой есть поле hdr, в структуру которого входит поле code, в которое и помещается соответствующая константа. Значит, всего-то нужно выловить наличие константы в этом поле. Соответствующий код, располагающийся в процедуре WinProc, приведен в листинге 4.29. Листинг 4.29
case WM_NOTIFY:

