Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Массив элементов управления

493
23 января 2002 года
Taras
24 / / 20.09.2000
Сразу извиняюсь, что упоминаю про Visual Basic – это необходимо, для объяснения сути проблемы. Раньше работал на VB, сейчас приходиться изучать
MSVC.

В VB, в диалоговых окнах, существовала возможность создания массива элементов, т.е. к примеру, перетаскиваю кнопку на форму, копирую ее
в буфер обмена, выделяю диалоговое окно и вставляю эту же кнопку
в форму. В результате в VB задавал вопрос о том, что эта новая кнопка
будет элементом массива или же необходимо создать новую кнопку.

Если новая кнопка будет элементом массива, то ей присваивалось имя
первой кнопки (например, Button1), а свойство Index – увеличивалось на единицу (т.е. в нашем варианте Index = 1). Обработчик событий у этих двух кнопок был общий. Во всех обработчика событий присутствовал новый параметр – Index, из которого и можно было узнать, какая именно кнопка создала событие.

Удобство заключалось в том, что на базе одной первой кнопки можно, было
динамически (во время выполнения программы), создать любое количество
кнопок и к ним уже был готовый обработчик событий.

ВОПРОС Существует ли в Visual C++ возможность создания массива элементов управления и можно ли динамически создав элемент управления
(Button, Image, Caption и т.п.) иметь под него готовый обработчик событий
в коде программы?

Если кто-то желает увидеть ранее написанную программу на VB могу сбросить
дистрибутив, весит – 6.19 Mb или Help к ней. (Цель программы Создание электрических мнемосхем и работа с ними.) [EMAIL]tarnet@pisem.net[/EMAIL]
Аноним
Можно ,сувществует
CButton* pBtn;
pBtn = new CButton()
pBtn->Create() - это динамически

CObArray - массив
удачи
VitSoft
http//www.development.efficientit.com
493
26 января 2002 года
Taras
24 / / 20.09.2000
Добрые люди на форуме "Форум программистов" уже также дали ответ:

Конечно возможно. Для этого тебе нужно создать класс наследуемый от нужного контрола (той же кнопки), описать в нем те обрабочики которые хочешь, а затем создать массив из указателей на этот класс. Ну а дальше как обычно берешь нужный указатель - new ..., Create ..., ну и работаешь далее.


class CMyButton: public CButton
{
public:
int Index;
afx_msg void OnLButtonDblClk(UINT, CPoint);
afx_msg void OnRButtonDblClk(UINT, CPoint);
private:
DECLARE_MESSAGE_MAP();
};

И записывай в этот Index индекс.

Можно в конструкторе:

class CMyButton: public CButton
{
int m_Index;
CMyButton(); //это чтобы никто не вызвал конструктор без аргумента.
public:
int GetIndex() {return m_Index;};
CMyButton(int NIndex) {m_Index=NIndex; CButton::CButton()};
afx_msg void OnLButtonDblClk(UINT, CPoint);
afx_msg void OnRButtonDblClk(UINT, CPoint);
private:
DECLARE_MESSAGE_MAP();
};


1. Кнопка при нажатии на неё шлёт parent'у notification - BN_CLICKED и передаёт свой id и HWND. Если ты пишешь свой класс кнопки, то можешь обработать его прямо в ней - см. notify reflection.

2. Ты всем кнопкам повесил один id - IDC_MYBUTTON, попробуй повесить разные, лучше по порядку. И используй ON_COMMAND_RANGE. Тогда в обработчик будет подаваться id, по нему и определишь кнопку. В-принципе, можно назначать одинаковые id, но лучше этого не делать. Может возникнуть куча проблем, например с GetDlgItem или enable-disable.

3. Не пытайся перевести что-то из VB в VC++. Ничего общего между ними нет. Раз начал юзать VC++, то и учись думать и делать всё по-другому.



Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог