Детальний приклад використання wxDev-C++ (частина 3 з 3)
Автор Dan Koga (Читати оригінал статті "Extended wxDev-C++ Tutorial" на сайті http://wxdsgn.sourceforge.net)
Переклав Пилипчук О.П.
Читати першу частинуЧитати другу частинуПанель інструментів
В цьому уроці ми додамо панель інструментів з кнопкаи для операцій Cut (вирізати), Copy (копіювати) та Paste (вставити).
Щоб додати панель інструментів:
1. Переконайтесь, що виділена форма. Оберіть Toolbar в Control Filter.
2. Клацніть ToolBar в списку елементів керування, а потім - у вікні програми.
3. Змініть властивість IDName на ID_TOOLBAR.
4. Змініть властивість Name на m_pToolbar.
Скопіюйте перелічені файли з C:\Dev-Cpp\wx\samples\toolbar\bitmaps до каталогу з вашим проектом TidyText:
- cut.bmp
- copy.bmp
- paste.bmp
Ці малюнки будуть використані для кнопок.
Щоб додати кнопку на панель інструментів:
1. Клацніть ToolButton у списку елементів керування, а потім - на панелі інструментів.
2. Оберіть властивість Active Bitmap, а потім клацніть кнопку з трьома крапками.
2. Використайте Picture Editor щоб завантажити малюнок cut.bmp.
2. Змініть такі властивості:
- IDName на ID_TB_CUT.
- IDValue на таке ж значення, як у ID_EDIT_CUT.
Якщо для інструментальної кнопки використане таке ж значення, як у відповідного елемента меню, буде викликатись той самий обробник події. Не потрібно додавати для кнопки окремого запису в таблицю подій.
- Label на Cut.
- ToolTip на Cut Ctrl+X
Підказка: Щоб під кнопкою відображався підпис (Label), змініть wxTB_TEXT Toolbar Style на True.
Повторіть пеопередні кроки, щоб додати кнопки Copy та Paste.
Не турбуйтесь, що кнопки виглядають "обрубаними": коли ви відкомпілюєте й запустите програму, вони матимуть нормальний вигляд.
Відкомпілюйте та запустіть програму, перевірте дію кнопок редагування. Перегляньте файли з програмним кодом, щоб побачити, який код wx-Devcpp додав для підтримки панелі інструментів та кнопок.
Буфер обміну
Щоб отримати доступ до буфера обміну, скористаємось двома wxWidgets-класами: wxClipboard та wxTextDataObject. Середовище підтримує глобальний примірник класу Буфер обміну - wxTheClipboard. Ми передаватимемо у wxTheClipboard об'єкт типу wxTextDataObject, який отримуватиме текст з буфера обміну або міститиме текст для вміщення до буфера.
Перш за все, нам потрібен елемент підменю та інструментальна кнопка для вибору команди очищення тексту в буфері обміну. Додамо елемент до меню Edit. Ви можете обрати власний малюнок для кнопки на панелі інструментів або використати цей .
Зміна меню Edit:
1. Відкрийте редактор меню та виберіть меню Edit.
2. Виберіть Create Submenu (Створити підменю).
3. Виберіть Seperator у розкривному списку Type (Тип).
4. Виберіть Apply.
5. Виберіть Create Submenu.
6. Заповніть поля наведеними даними:
- Caption: C&lean Clipboard\tCtrl+T.
- ID Name: ID_EDIT_CLEAN_CLIPBOARD.
- Hint: Clean clipboard contents.
- Bitmaps: клацніть Browse та завантажте зображення зірки.
- OnMenu handler: OnCleanClipboard.
- OnUpdateUI handler: OnUpdateUICleanClipboard
7. Клацніть Apply, потім OK.
Зверніть увагу, що ми додали малюнок до елемента підменю.
Додайте кнопку на панель інструментів:
1. Виберіть Toolbar у Control Filter.
2. Виберіть Separator у списку елементів керування, потім клацніть панель інструментів.
3. Виберіть ToolButton у списку елементів керування, потім клацніть панель інструментів.
4. Завантажте зображення зірки для кнопки.
5. Змініть такі властивості:
- IDName: ID_TB_CLEAN_CLIPBOARD
- IDValue: таке ж знгачення, як для підменю Clean Clipboard.
- Label: Clean
- ToolTip: Clean clipboard
Необхідно додати програмний код до файлу TidTextFrm.cpp.
#include <wx/clipbrd.h>
#include <wx/dataobj.h>
#include <wx/string.h>
Переконайтесь, що рядки додані за межами блоку директив include
згенерованих wx-Devcpp.
Додайте такий рядок до OnUpdateUICleanClipboard:
event.Enable(wxTheClipboard->IsSupported(wxDF_TEXT));
Додайте такі рядки до OnCleanClipboard:
if (wxTheClipboard->Open())
{
// Отримати текст з буфера обміну
wxTextDataObject textData;
wxTheClipboard->GetData(textData);
wxTheClipboard->Close();
// Очистити текст
wxString text(textData.GetText());
text.Replace(">", "");
// Показати очищений текст у текстовому полі та помістити його
// в буфер обміну.
m_pEditControl->SetValue(text);
m_pEditControl->Copy();
}
Відкомпілюйте та запустіть програму. Помістіть довільний текст до буфера обміну та очистіть його.
Діалогове вікно
У цьому останньому уроці ми побудуємо просте діалогове вікно, яке дозволить користувачеві ввести символи для видалення з тексту, що в буфері обміну.
Щоб створити нове діалогове вікно:
1. Виберіть File | New | New wxDialog.
2. У діалоговому вікні New wxWidgets Form виберіть Yes, щоб додати його до проекту.
3. У діалоговому вікні Create New wxWidgets Dialog:
- Class Name: OptionsDlg
- File name: OptionsDlg
- Title: Options Dialog
- Default Style: Uncheck Min Button
4.Виберіть Create.
Зауваження: У вікні редагування wx-Devcpp форма містить кнопки системного меню, згортання, розгортання та закривання, незалежно від обраного стилю.
- Змініть властивість IDName на ID_OPTIONS_DLG
Додайте елементи керування до вікна Options Dialog:
1. Виберіть Controls у Control Filter.
2. Додайте елемент керування StaticText у лівому верхньому куті.
3. Змініть властивість Label на Remove characters:.
4. Нижче додайте елемент керування Edit.
5. Змініть властивість Font на Arial 10 пунктів.
6. Видаліть значення властивості Text.
7. Додайте елемент керування Button під текстовим полем.
8. Змініть властивість &Default на True, властивість IDName на wxID_OK, властивість IDValue на 5100, властивість Label на OK
Зауваження: wxID_OK - стандартний ідентифікатор, що надається wxWidgets. Його значення встановлене рівним 5100.
9. Додайте елемент Button поряд з кнопкою OK.
10. Змініть властивість IDName на wxID_CANCEL, властивість IDValue на 5101 та властивість Label на Cancel.
Після цього форма Options Dialog виглядатиме приблизно так:
Необхідно додати пункт меню та код для відображення діалогу.
Додання підтримки діалогу:
1. Додайте підменю Options до меню Edit та створіть обробник події OnEditOptions.
2. Введіть у функцію-обробник такий код:
OptionsDlg optionsdlg(this);
optionsdlg.WxEdit1->SetValue(m_RemoveChars);
if (optionsdlg.ShowModal() == wxID_OK)
m_RemoveChars = optionsdlg.WxEdit1->GetValue();
3. Додайте до класу TidyTextFrm змінну-член m_RemoveChars типу wxString.
4. Ініціалізуйте її значенням ">".
Нарешті, потрібно модифікувати обробник події OnCleanClipboard, щоб видалявся кожен з символів m_RemoveChars, а не цілий рядок. В OnCleanClipboard замініть рядок
text.Replace(">", "");
таким кодом
if (!m_RemoveChars.IsEmpty())
{
wxString str;
for (size_t index = 0; index < m_RemoveChars.Len(); index++)
{
str = m_RemoveChars[index];
text.Replace(str.c_str(), "");
}
}
Відкомпілюйте та запустіть програму.
Сподіваюсь, цей приклад допоміг зробити перші кроки в опануванні wx-Devcpp та wxWidgets.
Интернет реклама