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

Ваш аккаунт

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

Последние темы форума

Показать новые сообщения »

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

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

Подскажите, как создавать статический массив!

81K
11 июня 2012 года
victor_komsomolsk
8 / / 11.06.2012
Подскажите пожалуйста. У меня есть диалоговое окно, на нём выпадающие списки - ComboBox . Каждый список описывается своим Case в оконной процедуре. Значения передаю в динамический массив (double massiv = new double[21]). А затем, при нажатии кнопки обработать (тоже описывается своим Case) мне нужен заполненный массив значений, но массив уже изменил адрес! Я понимаю, что он динамический, но как тогда делать такой, чтобы он был неразрывным, и имел постоянное место в памяти? Огромное спасиБог за ответ!
  • Ничего не понял. от CassandraDied, 11 июня 2012 года
65K
11 июня 2012 года
verholom
48 / / 29.08.2011
ну, к примеру, сделайте глобальную переменную для каждого списка

Хотя есть вариант получше: выделять память под массив и сохранять адрес в свойствах окна списка. Вот пример:


 
Код:
//Получили память под 21 элемент массива
    double *hMem=(double *)GlobalAlloc(LPTR,sizeof(double)*21);

//Сохраним его в свойствах окна
    SetProp(hWndList,L"#HMEM#",(HANDLE)hMem);

//Тут получим адрес массива из свойств окна
    double *hM=(double *)GetProp(hWndList,L"#HMEM#");
Обращение - как обычно при разименовании


Если вы пишете на .NET - то у каждого контрола есть свойство Tag - туда и присваивайте при загрузке новосозданный массив. Вот пример (С++/CLI):

Код:
//создаем переменную для массива
cli::array<System::Double> ^arr;

//Создаем массив и сразу же присваиваем его свойству Tag списка
this->comboBox1->Tag=gcnew cli::array<System::Double>(21);

//Для удобства получаем ссылку на него
arr=(cli::array<System::Double> ^)this->comboBox1->Tag;

//Заполняем в цикле весь массив (попутно внося значения в список)
for(System::UInt32 i=0;i<21;i++){
 arr[i]=System::Convert::ToDouble(i);
 this->comboBox1->Items->Add(arr[i].ToString());
}
//В принципе, все

//************************************

//Произошло чудо и мы щелкнули кнопку на форме
//Получим ссылку на массив, который создали при загрузке (прочитаем из свойства Tag списка)
cli::array<System::Double> ^arr=(cli::array<System::Double> ^)this->comboBox1->Tag;

//В строку будем собирать все значения массива - чтобы потом показать их миру
System::String ^strMsg=L"";

//Идем в цикле по массиву
for(System::UInt32 i=0;i<21;i++){
 //И сохраняем в строке очередное значение
 strMsg+=System::Convert::ToString(arr[i])+L"\n";
}

//Покажем их все
System::Windows::Forms::MessageBox::Show(strMsg);
Если Вы пишете на С# - переделайте под себя, ибо с ним не знаком.
81K
12 июня 2012 года
victor_komsomolsk
8 / / 11.06.2012
Дружище спасибо, работает. Я правда работаю на WInApi с Net пока не работал, но всё равно помогло)

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

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