|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
14.09.2009, 17:17 | #11 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
14.09.2009, 17:33 | #12 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Ну начнём с того, что в си нет динамических массивов. Разве что vector из STL так можно обозвать.
Ну тут зависит от типов контролов. Если что-то вроде кнопки, то их вполне может быть в программе и сотня и больше. Последовательный поиск среди сотни элементов - это уже не айс. Если же это какой-нибудь термометр, которых будет заведомо ну штук десять от силы, то массив тут будет рулить и по скорости и по занимаемой памяти. Цитата:
ЗЫ. Помню раньше терпеть не мог таких занудств, что мол тут точно нельзя сказать что лучше использовать, нужно смотреть на частоту обращения к элементам, активность их модификации... теперь же я начал сам так занудствовать |
|
14.09.2009, 22:32 | #13 |
Пользователь
Регистрация: 27.07.2009
Сообщений: 27
|
все что я задумал я могу сделать через классы C++. В dll я регистрирую оконноый класс (RegisterClass), прописываю функцию создания экземпляра класса, вызываю эту функцию через свою программу, и все работает... Но проблема в том что я получаю указатель на класс, который ограничен своими функциями.
Я могу сделать преобразования типа из класса в HWND, но снова проблема: для создания окна мне прийдется исользовать функцию из dll которая создаст экземпляр класса, а тот в свою очередь создаст окно. Это все просто. А меня интересует создание окна с помощью CreateWindow(); Соответственно при создании окна вызовет сообщение WM_CREATE, там я создаю свои данные (любые и любым способом). Затем, например, в программе я вызову любое сообщение для окна (хендл которого вернула функция CreateWindow() и в обработчике сообщений обрабатываются данные, созданные именно для этого окна. И если я создал пару таких окон, то при обработке сообщений любого из этих окон использовались данные привязанные (созданные) именно для этого окна. |
15.09.2009, 08:33 | #14 | ||||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
У тебя есть окно, которое имеет свой уникальный хендл, и свою отдельную процедуру обработки сообщений, так в чем проблема? Есть класс, с полями, данные в котором однозначно относятся только к одному экземпляру, и в этом же классе Хендл и обработчик созданного им окна - как можно говорить о несоответствии данных в такой ситуации? У тебя все в одном экземпляре хранится. Вообще не вижу проблем, ты из мухи слона делаешь. Цитата:
Цитата:
Цитата:
I'm learning to live...
|
||||
15.09.2009, 09:03 | #15 |
Пользователь
Регистрация: 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, ...). ТЕПЕРЬ ПОНЯТНО !!! |
15.09.2009, 10:00 | #16 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Да понятно, понятно. Ну так оберни все это в класс. Вроде уж говорилось об этом. Создавая экземпляры класса ты четко разграничишь данные, у тебя будет один обработчик, но данные разные.
В общем я бы только так поступил - все обернул в классы.
I'm learning to live...
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос по поводу 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 |