Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2009, 17:17   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
удалять контрол из начала/середины массива не есть хорошо.
Ну не знаю... Сколько работал с динмассивами никогда тормозов от них не видел, к тому же удалять не обязательно можно просто обNILить, и поставить на такой случай проверку.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.09.2009, 17:33   #12
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну не знаю... Сколько работал с динмассивами
Ну начнём с того, что в си нет динамических массивов. Разве что vector из STL так можно обозвать.
Цитата:
Сообщение от Stilet Посмотреть сообщение
никогда тормозов от них не видел
Ну тут зависит от типов контролов. Если что-то вроде кнопки, то их вполне может быть в программе и сотня и больше. Последовательный поиск среди сотни элементов - это уже не айс. Если же это какой-нибудь термометр, которых будет заведомо ну штук десять от силы, то массив тут будет рулить и по скорости и по занимаемой памяти.
Цитата:
Сообщение от Stilet Посмотреть сообщение
к тому же удалять не обязательно можно просто обNILить, и поставить на такой случай проверку.
Лишняя проверка в последовательном поиске окончательно убьёт его скорость. К тому же, при активном добавлении/удалении контролов, массив будет "дырявый" как сыр и разрастётся до большого размерчика.

ЗЫ. Помню раньше терпеть не мог таких занудств, что мол тут точно нельзя сказать что лучше использовать, нужно смотреть на частоту обращения к элементам, активность их модификации... теперь же я начал сам так занудствовать
pu4koff вне форума Ответить с цитированием
Старый 14.09.2009, 22:32   #13
HWork
Пользователь
 
Регистрация: 27.07.2009
Сообщений: 27
По умолчанию

все что я задумал я могу сделать через классы C++. В dll я регистрирую оконноый класс (RegisterClass), прописываю функцию создания экземпляра класса, вызываю эту функцию через свою программу, и все работает... Но проблема в том что я получаю указатель на класс, который ограничен своими функциями.
Я могу сделать преобразования типа из класса в HWND, но снова проблема: для создания окна мне прийдется исользовать функцию из dll которая создаст экземпляр класса, а тот в свою очередь создаст окно. Это все просто. А меня интересует создание окна с помощью CreateWindow(); Соответственно при создании окна вызовет сообщение WM_CREATE, там я создаю свои данные (любые и любым способом). Затем, например, в программе я вызову любое сообщение для окна (хендл которого вернула функция CreateWindow() и в обработчике сообщений обрабатываются данные, созданные именно для этого окна. И если я создал пару таких окон, то при обработке сообщений любого из этих окон использовались данные привязанные (созданные) именно для этого окна.
HWork вне форума Ответить с цитированием
Старый 15.09.2009, 08:33   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
то при обработке сообщений любого из этих окон использовались данные привязанные (созданные) именно для этого окна.
Похоже мы друг друга не понять.
У тебя есть окно, которое имеет свой уникальный хендл, и свою отдельную процедуру обработки сообщений, так в чем проблема? Есть класс, с полями, данные в котором однозначно относятся только к одному экземпляру, и в этом же классе Хендл и обработчик созданного им окна - как можно говорить о несоответствии данных в такой ситуации? У тебя все в одном экземпляре хранится.

Вообще не вижу проблем, ты из мухи слона делаешь.

Цитата:
в си нет динамических массивов
Я имел ввиду те которые создаются в памяти через new.
Цитата:
Лишняя проверка в последовательном поиске окончательно убьёт его скорость.
Не сильно. Зато надежность не потеряет.
Цитата:
массив будет "дырявый" как сыр и разрастётся до большого размерчика.
Не так уж и сложно анализировать что если процент дырок более 50, то убрать мусор - сжать массив.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.09.2009, 09:03   #15
HWork
Пользователь
 
Регистрация: 27.07.2009
Сообщений: 27
По умолчанию

Распишу подробнее:

Dll-ка:

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

MyStruct* b=NULL;

DllMain(HANDLE hModule, DWORD dwNotify, LPVOID lpReserved)
{
if(dwNotify==DLL_PROCESS_ATTACH)
{
//регистрирую класс CS_GLOBALCLASS
//имя класса = "MyWindowClass"
//обработчик сообщений = MsgProc;
}
}

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

Так же в этой dll находится функция обработки сообщений окна этого класса.

//*********************************** ****************
LRESULT CALLBACK MsgProc(HWND hwnd,UINT iMsg,WPARAM,LPARAM)
{
switch(iMsg)
{
case WM_CREATE:
{
//НАПРИМЕР, ЧТО-ТО В ЭТОМ РОДЕ:
MyStruct* a=new MyStruct;
b=new MyStruct;
}
break;
}
}

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

Где то в программе:

HWND hWnd=CreateWindow("MyWindowClass".. .........);

Соответственно при создании окна вызовется сообщение WM_CREATE,
где и инициализируются какие-то данные.
Все работает пока созданно одно окно, но если я создаю второе окно этого же класса: все по тойже схеме WM_CREATE -> создание данных.
Но в чем проблема: обработчик сообщений один на всех, данные (указатель "b") тоже один на всех. Ну так вот: как сделать чтобы указатель "b" был для каждого окна свой, и при вызове сообщения WM_DESTROY вызывалась delete b именно для "b" этого окна.
И при этом не создавать динмассивы, не использовать SetWindowLong(.., GWL_USERDATA, ...).

ТЕПЕРЬ ПОНЯТНО !!!
HWork вне форума Ответить с цитированием
Старый 15.09.2009, 10:00   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да понятно, понятно. Ну так оберни все это в класс. Вроде уж говорилось об этом. Создавая экземпляры класса ты четко разграничишь данные, у тебя будет один обработчик, но данные разные.

В общем я бы только так поступил - все обернул в классы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по поводу Windows Vista ROD Безопасность, Шифрование 1 19.08.2009 18:16
Вопрос по Windows Forms tavrocotaps Общие вопросы .NET 0 11.06.2009 16:43
Вопрос насчет курсоров и печати изображения Romich Общие вопросы Delphi 10 11.06.2009 02:05
Вопрос по windows media player. multik Софт 0 02.11.2008 13:03
Насчет формы!!! KlErik Общие вопросы Delphi 4 26.05.2007 10:59