Создание приложений на классах

High-level languages programming questions
  • Идея хорошая, надо и нам в С-- такие штуки сделать.
    Из хаоса в космос
  • Это в каком компиляторе сделано - Microsoft Visual Studio или что-то другое?
  • Microsoft Visual C++ 2010 Express Edition
    Чудеса случаются! Это вам любой программист скажет! :)
  • Никто не подскажет, как в одном массиве хранить указатели на объекты разных классов? Во всех примерах, которые я находил используется std::vector.
    Чудеса случаются! Это вам любой программист скажет! :)
  • Делай абстрактный класс и наследуй от него.
  • Подскажите, что делать в такой ситуации:
    есть адрес указателя на функцию, как по нему вызвать функцию?

    Code: Select all

    void Event::call(int action) {
    	if (actions[action] == NULL) return;
    	int i;
    	void (*hnd)();// Указатель
    
    	for (i=1;i<5;i++) {
    		hnd = actions[action]->handlers.Peek(i); // actions[action]->handlers - стек
     		// В hnd заносится адрес указателя на функцию
    		if (hnd != NULL) hnd(); // Программа закрывается на этом месте, если эту строку убрать - то не закрывается
        }
    }
    
    я использовал класс стека отсюда http://cppstudio.com/post/5155/
    Пробовал по всякому, не работает
    Если получится, будет как мне кажется красивый и удобный способ устанавливать обработчики для событий элементов:

    Code: Select all

    // Обработка клика по кнопке
    void buttonclick() {
    	win->buttons[win->clickButtonId]->color = COLOR_YELLOW;
    	win->update();
    }
    
    // Ещё действие при клике
    void buttonclick2() {
    	win->labels[0]->color = COLOR_BLUE;
    	win->labels[0]->text = "Click!!!";
    }
    
    Button* btn = new Button;
    btn->addHandler(EVENT_BUTTON_CLICK, buttonclick);
    btn->addHandler(EVENT_BUTTON_CLICK, buttonclick2);
    
    // Ещё примеры
    Window* win = new Window();
    win->addHandler(EVENT_DRAW, testhandler);
    
    // Событие вызывается так (будут выполнены все обработчики):
    win->call(EVENT_DRAW); 
    
    Чудеса случаются! Это вам любой программист скажет! :)
  • Leency wrote:Идея хорошая
    Идея очевидная :) А делать надо один раз - сам API системы, вместо библиотек оберток-прокладок под десяток языков.
  • Nikolai1 wrote:есть адрес указателя на функцию
    Это как, указатель на указатель? :)
    Да, сравнивать с NULL совершенно излишне. Вместо

    Code: Select all

    if (some_expr!=0)
    if (some_expr==0)
    
    достаточно

    Code: Select all

    if (some_expr)
    if (!some_expr)
    
    Last edited by irkant on Tue Nov 11, 2014 12:46 pm, edited 1 time in total.
  • Убрал стек и сделал хранение обработчиков через массив указателей на функции.
    Для тестирования работы сделал простенькую программку, в которой можно управлять кнопкой.
    Управление:
    W - вверх
    S - вниз
    D - вправо
    A - влево
    Клик по кнопке вернёт её в начальное положение

    Code: Select all

    // Обработка клика по кнопке
    void buttonclick() {
    	win->buttons[0]->x = 20;
    	win->buttons[0]->y = 20;
    
    	win->update();
    }
    
    void window_key_press() {
    	switch (win->lastKeyPressCode) {
    		//..........................
    	}
    
    	char a = static_cast<char>(win->lastKeyPressCode);
    	win->labels[0]->text = &a;
    	win->update();
    }
    
    // ........
    btn->addHandler(EVENT_BUTTON_CLICK, buttonclick);
    win->addHandler(EVENT_KEY_PRESS, window_key_press);
    // ..............
    
    Attachments
    test0.0.2.zip (5.74 KiB)
    Downloaded 489 times
    Чудеса случаются! Это вам любой программист скажет! :)
  • Теперь хочу добавить другие элементы интерфейса - поле для ввода текста, флажки и т.д.. Буду пытаться понять принцип подключения box_lib из приложения table :lol:
    А ещё нужно как-то поправить хранение этих элементов в классе, для каждого типа элемента (кнопка, надпись) сейчас создан отдельный массив указателей и переменная (хранит номер последнего элемента в массиве)

    Как думаете, что ещё можно добавить?

    Если смогу, то как мне кажется, можно будет использовать мои классы как библиотеку для облегчения разработки.
    Чудеса случаются! Это вам любой программист скажет! :)
  • Без кучи готовых библиотек (которые есть под Windows) трудно нормально программировать :(
    Чудеса случаются! Это вам любой программист скажет! :)
  • Nikolai1 wrote:Без кучи готовых библиотек (которые есть под Windows) трудно нормально программировать :(
    Нормальных, это каких?
    to infinity and beyond
  • Нормальных, это каких?
    Например хотелось бы использовать контейнеры vector и map. Они есть под Kolibri?

    P. S. Как я писал ранее, в C++ я новичок, изучаю около месяца (и то не каждый день) в свободное время. Может для моих целей можно использовать что-нибудь другое
    Чудеса случаются! Это вам любой программист скажет! :)
  • Nikolai1 wrote:P. S. Как я писал ранее, в C++ я новичок, изучаю около месяца (и то не каждый день) в свободное время. Может для моих целей можно использовать что-нибудь другое
    Можно. Лучший язык программирования в Колибри для новичков это Assembler++.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Who is online

    Users browsing this forum: No registered users and 1 guest