2 - Органи toolbar і statusbar

Для початку займемося зображеннями, які намальовані на кнопках Toolbar. Потім ми розповімо вам про те, як створити вікно органу управління Toolbar.

Підготовка зображень для кнопок

У попередніх томах "Бібліотеки системного програміста" ми створювали Toolbar засобами Win16. Тоді для кожної кнопки ми готували три різних зображення - для віджатого, натиснутого і заблокованого стану. Якщо кнопок багато, малювати доводиться довго.

Тепер вам потрібно тільки одне зображення, правда, в ньому повинні розташовуватися малюнки для всіх кнопок. Як приклад найкраще взяти файл TOOLBAR.BMP, який створюється автоматично генератором додатків AppWizard з Microsoft Visual C ++ (рис. 2.1).

Мал. 2.1. Зображення стандартних кнопок для органу управління Toolbar. яке створюється генератором додатків AppWizard

Ви можете створити свої зображення, взявши цей файл за основу, змінивши існуючі піктограми або додавши нові. Для цього можна скористатися, наприклад, додатком Paint, яке входить до складу Microsoft Windows 95. Можна також створити новий bmp-файл, який повинен бути 16-кольоровим. Інша умова - всі піктограми в цьому зображенні повинні бути одного розміру.

У будь-якому випадку ви повинні додати створене зображення в файл ресурсів програми, забезпечивши його ідентифікатором, наприклад:

Якщо ви користуєтеся Microsoft Visual C ++, то це середовище розробки додатків внесе всі необхідні зміни в rc-файл автоматично, як тільки ви визначите відповідний ресурс.

опис кнопок

Далі ви повинні створити масив структур TBBUTTON. який описує кнопки і роздільники між групами кнопок. У цьому масиві необхідно зарезервувати по одній структурі для кожної кнопки і для кожного роздільник груп кнопок.

У файлі commctrl.h знаходиться таке визначення структури TBBUTTON:

В поле iBitmap кожної структури масиву необхідно записати номер кнопки (нумерація починається з нуля). Для роздільник в цьому полі слід вказати нульове значення.

В поле idCommand ви повинні записати ідентифікатор, який буде передаватися батьківському вікну з повідомленням WM_COMMAND, коли користувач натисне відповідну кнопку. Якщо елемент масиву структур TBBUTTON описує роздільник групи кнопок, в поле idCommand вам потрібно записати нульове значення.

Поле fsState повинно містити прапор вихідного стану кнопки:

Роздільник між групами кнопок

Через поле dwData можна передати додаткові дані, які будуть зберігається в описі кнопки і використовуватися при необхідності. Ви можете записати в це поле нульове значення.

Якщо текстові рядки не використовуються, в поле iString слід записати нульовий значення.

Ось зразок підготовленого масиву структур TBBUTTON, що описує вісім кнопок і три роздільник між ними:

Виклик функції створення вікна Toolbar

Тепер, коли ви підготували файл зображення кнопок, створили для нього ідентифікатор в файлі ресурсів програми і підготували масив структур TBBITMAP. описує кнопки, можна створювати вікно Toolbar. Найпростіше це зробити за допомогою спеціально призначеної для цього функції CreateToolbarEx:

Як можна дізнатися з документації, ця функція створює вікно Toolbar і додає в нього кнопки, описані в масиві структур TBBITMAP. При цьому їй також потрібно вказати ідентифікатор зображення кнопок, а також інші параметри, перераховані вище.

Якщо процедура CreateToolbarEx повертає ідентифікатор створеного органу управління Toolbar. який можна буде використовувати для посилки повідомлень. Якщо ж Toolbar з яких-небудь причин створити так і не вдалося, функція повертає значення NULL.

Перед першим викликом цієї функції слід викликати функцію InitCommonControls, яка не має параметрів, не повертає ніякого значення і служить для ініціалізації бібліотеки стандартних органів управління.

Ось приклад застосування цієї функції в додатку Smart Application, вихідні тексти якого будуть приведені пізніше:

В якості першого параметра ми передаємо функції ідентифікатор головного вікна програми. Це вікно буде отримувати від органу Toolbar сповіщення у вигляді повідомлень WM_COMMAND і WM_NOTIFY.

Параметр ws визначає стилі вікна Toolbar. Так як це вікно завжди є дочірнім по відношенню до створив його вікна, необхідно використовувати стиль WS_CHILD. Для того щоб вікно Toolbar мало рамку і було видимим, ми вказуємо стилі WS_BORDER і WS_VISIBLE. Якщо потрібно щоб користувач міг змінювати зовнішній вигляд Toolbar, необхідно використовувати стиль CCS_ADJUSTABLE.

Крім того, для органу управління Toolbar ви можете задати наступні стилі:

TB_GETTOOLTIPS

Визначення ідентифікатора органу управління Tool Tip, пов'язаного з даним органом управління Toolbar.

Параметри повідомлення повинні бути рівні нулю.

TB_HIDEBUTTON

За допомогою цього повідомлення можна відобразити або приховати кнопку, задану своїм ідентифікатором.

Якщо прапор дорівнює TRUE, кнопка стає прихованою, якщо FALSE - відображається.

TB_INDETERMINATE

За допомогою цього повідомлення можна встановити або скасувати для кнопки невизначений стан, коли кнопка відображається сірим кольором.

Якщо прапор дорівнює TRUE, невизначений стан встановлюється, якщо FALSE - скасовується.

TB_INSERTBUTTON

Вставка кнопки в Toolbar.

Якщо кнопка була вставлена ​​успішно, функція SendMessage поверне значення TRUE, в іншому випадку - FALSE.

TB_ISBUTTONCHECKED

За допомогою цього повідомлення додаток може перевірити стан кнопки - натиснута кнопка чи ні.

Значення параметра lParam має дорівнювати нулю.

Якщо кнопка натиснута, функція SendMessage поверне значення TRUE, в іншому випадку - FALSE.

TB_ISBUTTONENABLED

За допомогою цього повідомлення додаток може перевірити стан блокування кнопки - заблокована кнопка чи ні.

Значення параметра lParam має дорівнювати нулю.

Якщо кнопка розблокована, функція SendMessage поверне значення TRUE, в іншому випадку - FALSE.

TB_ISBUTTONHIDDEN

За допомогою цього повідомлення додаток може перевірити, прихована кнопка чи ні.

Значення параметра lParam має дорівнювати нулю.

Якщо кнопка прихована, функція SendMessage поверне значення TRUE, в іншому випадку - FALSE.

TB_ISBUTTONINDETERMINATE

За допомогою цього повідомлення додаток може перевірити, чи знаходиться кнопка в невизначеному стані, коли вона відображається сірим кольором.

Значення параметра lParam має дорівнювати нулю.

Якщо кнопка знаходиться в невизначеному стані, функція SendMessage поверне значення TRUE, в іншому випадку - FALSE.

TB_ISBUTTONPRESSED

За допомогою цього повідомлення додаток може перевірити, чи знаходиться кнопка в натиснутому стані.

Значення параметра lParam має дорівнювати нулю.

Якщо кнопка знаходиться в натиснутому стані, функція SendMessage поверне значення TRUE, в іншому випадку - FALSE.

TB_PRESSBUTTON

За допомогою цього повідомлення додаток може встановити кнопку в натисканні або віджате стан.

Для того щоб перевести кнопку в натисканні стан, необхідно встановити значення прапора fPress рівним TRUE, а для того щоб перевести кнопку в віджате стан - рівним FALSE.

Якщо стан кнопки було змінено успішно, функція SendMessage поверне значення TRUE, в іншому випадку - FALSE.

TB_SAVERESTORE

Посилаючи органу управління Toolbar повідомлення TB_SAVERESTORE, додаток може зберегти або відновити стан Toolbar. Для зберігання стану Toolbar використовується системна реєстраційна база даних.

Якщо значення прапора fSave одно TRUE, буде виконано збереження стану Toolbar. а якщо FALSE - відновлення.

Через параметр ptbsp передається покажчик на структуру типу TBSAVEPARAMS. наведену нижче:

Робота з системної реєстраційною базою даних Microsoft Windows 95 буде описана в одному з наступних томів "Бібліотеки системного програміста".

TB_SETBITMAPSIZE

За допомогою повідомлення TB_SETBITMAPSIZE додаток може встановити розмір картинки, зображеної на поверхні кнопки.

Значення параметра wParam має дорівнювати нулю.

Через параметри dxBitmap і dyBitmap передається, відповідно, ширина і висота зображення.

TB_SETBUTTONSIZE

За допомогою повідомлення TB_SETBUTTONSIZE додаток може встановити розмір кнопки.

Значення параметра wParam має дорівнювати нулю.

Через параметри dxButton і dyButton передається, відповідно, ширина і висота кнопки.

TB_SETCMDID

За допомогою цього повідомлення можна привласнити кнопці із заданим номером командний ідентифікатор.

TB_SETPARENT

За допомогою повідомлення TB_SETPARENT додаток може призначити для органу управління Toolbar батьківське вікно.

Значення параметра lParam має дорівнювати нулю.

TB_SETROWS

Установка кількості рядків кнопок в органі управління Toolbar.

Через параметр cRows передається кількість рядків. Мінімальне значення параметра дорівнює одному рядку, максимальне - кількістю кнопок у вікні Toolbar.

Якщо параметр fLarger дорівнює TRUE, при нестачі місця для розміщення всіх кнопок в cRows рядках буде створена додаткова рядок. Якщо ж параметр fLarger дорівнює FALSE, додатковий рядок не створюється.

TB_SETSTATE

Установка кнопки із заданим ідентифікатором в новий стан.

Список можливих станів кнопки наведено вище в описі повідомлення TB_GETSTATE.

TB_SETTOOLTIPS

За допомогою повідомлення TB_SETTOOLTIPS додаток може призначити для Toolbar орган управління Tool Tip.

Значення параметра lParam має дорівнювати нулю.

Зауважимо, що при створенні Toolbar зі стилем TBSTYLE_TOOLTIPS для нього автоматично створюється орган Tool Tip. тому вам не потрібно посилати вікна Toolbar додаткове повідомлення TB_SETTOOLTIPS. Однак якщо ви посилаєте таке повідомлення, в Tool Tip будуть зареєстровані тільки ті кнопки, які були додані в Toolbar до моменту посилки повідомлення TB_SETTOOLTIPS.