16 / 16 / 10
Регистрация: 24.01.2014
Сообщений: 187
1

Легко расширяемая архитектура приложения

30.11.2014, 23:16. Показов 1124. Ответов 0
Метки нет (Все метки)

Доброго времени суток! Постараюсь как можно подробнее описать то, что я делаю.

Хочу сделать что-то типа библиотеки для элементов интерфейса (под малоизвестную ос, поэтому лучше всего использовать "чистый" C++)

Есть различные функции, типа createWindow(params....), createButton(params...) для создания разных элементов интерфейса
Я оформил все элементы как классы, теперь хочу соединить их в целое.

Есть класс Window, от него всегда будет создаваться единственный объект - объект окна. В этом классе находится метод, который запускает обработку системных событий и событий элементов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Window* win = new Window;
win->title = "Hello, World";
 
Button* btn = new Button;
btn->x = 10;
btn->y = 10;
// Регистрация элементов интерфейса в окне
win->addControl(CONTROL_BUTTON, btn);
 
// Отрисовать окно
win->draw();
// Запустить обработку событий
win->waitForEvent();
win->waitForEvent();
код метода примерно такой:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void Window::waitForEvent() {
    int k_event;
 
    while(k_event=waitForEvent()) {
        switch (waitForEvent()) {
            case EM_WINDOW_REDRAW:
                draw();
            break;
            case EM_KEY_PRESS:
                Byte keyCode;
                getKey(keyCode);
                lastKeyPressCode = keyCode;
 
                this->call(EVENT_KEY_PRESS);
            break;
            case 3:
                Dword buttonId;
                getButtonID(buttonId);
                
                clickButtonId = (int)buttonId;
 
                Button* button = getButton(buttonId);
                if (button) button->call(EVENT_BUTTON_CLICK);
 
                if (buttonId == 1) {
                    this->call(EVENT_WINDOW_CLOSE);
                    exitApp();
                }
 
            break;
        }
    }
}


Проблема в том, как сделать этот метод (и некоторые другие) максимально расширяемыми.. В базовой версии библиотеки есть только стандартные системные элементы - Окно, Кнопка и Надпись

А вот функции для работы с другими элементами (например поле для ввода текста) реализованы в DLL библиотеке.
Я хочу, чтобы можно было в любом месте приложения определить новый класс для любого нового элемента (может быть вообще любым) и добавить его в библиотеку
C++
1
2
3
class MyUnusualControl : public BaseControl {
void draw(); // метод, который рисует элемент (вызывается при перерисовке главного окна)
}
Проблема в том, как добавить элемент в мою библиотеку, чтобы было примерно так:
C++
1
2
3
4
5
6
7
8
9
// моя библиотека
#include "controlslib.h"
 
// Произвольный элемент (может быть подключен, а может вообще не использоваться)
#include "controls\MyUnusualControl.h"
 
Window* win = new Window();
MyUnusualControl* test = new MyUnusualControl;
win->addControl(CONTROL_MY_UNUSUAL, test);
реализовать такое у меня получилось. А вот если элемент более/менее сложный появляются проблемы. Например то же самое поле для ввода текста требует выполнения своих функций в обработчике событий окна (при нажатии клавиши).


Я не знаю, как сделать, чтобы эта функция выполнялась именно при событии нажатия клавиши? Элементы могут быть самые разные (даже могут создавать свой тип системного события) и невозможно предусмотреть, какие функции и в каком месте им нужно будет выполнить.

Подскажите, что можно сделать? или где почитать об архитектуре подобных проектов?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2014, 23:16
Ответы с готовыми решениями:

Архитектура приложения
Добрый день господа. Хотелось бы услышать мнение и советы более опытных людей. Пишу приложение для...

ООП, Архитектура приложения на C++
Доброго дня! Не знаю в тот ли раздел, но буду писать на C++ и в ООП новичок. Неплохо знаю Си,...

Общие для всего проекта определения кодов возврата. Архитектура приложения
В проекте несколько классов. Часть из них наследуется друг от друга, часть является...

В указанном dsn архитектура драйвера и архитектура приложения не соответствуют друг другу
Добрый день. При запуске программы выскакивает вот такая вот ошибка. В чем может быть проблема и...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2014, 23:16
Помогаю со студенческими работами здесь

Ошибка "в указанном dsn архитектура драйвера и архитектура приложения"
Вот такая ошибка при нажатии на кнопку "Проверить соединение" Я прочитал, что это возможно из за...

Социальная сеть (сложная архитектура): аудио+видео+чаты+обмен данными +приложения (месенджеры и приложения)
Социальная сеть(сложная архитектура): аудио+видео+чаты+видео звонки с конференсом+обмен данными...

На чем можно легко писать приложения для ДБ ?
Подскажите, пожалуйста, с помощью каких средств лучше всего писать клиентские приложения для БД....

Архитектура приложения
всем привет. в приложении используется несколько фрагментов (из библиотек Android.Support.V7 и ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru