Массив элементов управления
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
Конечно возможно. Для этого тебе нужно создать класс наследуемый от нужного контрола (той же кнопки), описать в нем те обрабочики которые хочешь, а затем создать массив из указателей на этот класс. Ну а дальше как обычно берешь нужный указатель - 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++, то и учись думать и делать всё по-другому.