Обертка над WinAPI() - Как сделать красиво? (не MFC)
От: argent  
Дата: 22.11.05 23:27
Оценка:
Всем доброго времени суток.

Пишу класс, который работает с сокетами. Для ассинхронных сокетов необходимо окно, которому потом система шлет сообщения. То есть —

LRESULT CALLBACK wndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   switch (message)
   {
      //что то делаем с этими сообщениями, необходим доступ к MySocketClass
      //нужно дернуть какой то метод, и именно у нужного экземпляра, того, который создавал окно
   }
}


class MySocketClass
{
   //...
   void Met1()
   {
      //...
      WSAAsyncSelect (m_sock,hwnd,WM_MY_EVENT, FD_READ|FD_CLOSE);
      //...
   }
   //...   
};


Вопрос в том, как передать в wndProc экземпляр MySocketClass?
Сейчас через глобальные переменные, работает хорошо, но смотрится ОЧЕНЬ КРИВО...
Может есть какие то мысли на сей счет? Так хочется красоты...

Заранее благодарен.
Жить будем плохо, но не долго...
Re: Обертка над WinAPI() - Как сделать красиво? (не MFC)
От: Erop Россия  
Дата: 23.11.05 00:07
Оценка: +1
Здравствуйте, argent, Вы писали:

A>Вопрос в том, как передать в wndProc экземпляр MySocketClass?

A>Сейчас через глобальные переменные, работает хорошо, но смотрится ОЧЕНЬ КРИВО...
A>Может есть какие то мысли на сей счет? Так хочется красоты...

Через SetWndLong?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Обертка над WinAPI() - Как сделать красиво? (не MFC)
От: argent  
Дата: 23.11.05 00:27
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, argent, Вы писали:


A>>Вопрос в том, как передать в wndProc экземпляр MySocketClass?

A>>Сейчас через глобальные переменные, работает хорошо, но смотрится ОЧЕНЬ КРИВО...
A>>Может есть какие то мысли на сей счет? Так хочется красоты...

E>Через SetWndLong? :shuffle

В MSDN такого найти не могу, а google дает ссылки только на японские сайты... Можно немного подробнее? Это что, WinAPI?
Жить будем плохо, но не долго...
Re[3]: Обертка над WinAPI() - Как сделать красиво? (не MFC)
От: sergey_shandar США http://getboost.codeplex.com/
Дата: 23.11.05 00:56
Оценка:
Здравствуйте, argent, Вы писали:

E>>Через SetWndLong? :shuffle

A>В MSDN такого найти не могу, а google дает ссылки только на японские сайты... Можно немного подробнее? Это что, WinAPI?

SetWindowLongPtr.
getboost.codeplex.com
citylizard.codeplex.com
Re[4]: Обертка над WinAPI() - Как сделать красиво? (не MFC)
От: argent  
Дата: 23.11.05 01:17
Оценка:
Здравствуйте, sergey_shandar, Вы писали:

_>Здравствуйте, argent, Вы писали:


E>>>Через SetWndLong? :shuffle

A>>В MSDN такого найти не могу, а google дает ссылки только на японские сайты... Можно немного подробнее? Это что, WinAPI?

_>SetWindowLongPtr.

спасибо, вроде бы работает, будем копать.
Жить будем плохо, но не долго...
Re[4]: Обертка над WinAPI() - Как сделать красиво? (не MFC)
От: Аноним  
Дата: 23.11.05 10:57
Оценка:
Здравствуйте, sergey_shandar, Вы писали:

_>Здравствуйте, argent, Вы писали:


E>>>Через SetWndLong? :shuffle

A>>В MSDN такого найти не могу, а google дает ссылки только на японские сайты... Можно немного подробнее? Это что, WinAPI?

_>SetWindowLongPtr.

БОЛЬШОЕ СПАСИБО, все работает совсем хорошо...
Re[5]: Обертка над WinAPI() - Как сделать красиво? (не MFC)
От: Аноним  
Дата: 23.11.05 12:59
Оценка:
Здравствуйте, Аноним, Вы писали:

_>>SetWindowLongPtr.

А>БОЛЬШОЕ СПАСИБО, все работает совсем хорошо...

Чего ж тут красивого? Адекватная реализация диспетчеризации сообщений объекту требует чистой воды хакерства. Поэтому лучше использовать класс из любой GUI библиотеки (например atl::CWindow).
Re[6]: Обертка над WinAPI() - Как сделать красиво? (не MFC)
От: Erop Россия  
Дата: 23.11.05 16:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Чего ж тут красивого? Адекватная реализация диспетчеризации сообщений объекту требует чистой воды хакерства. Поэтому лучше использовать класс из любой GUI библиотеки (например atl::CWindow).


А чем через SetWindowLongPtr полохо? Тем что не понятно когда C++ объект разрушать? Ну так по WM_DESTROY скажем можно или по ещё более позднему WM_NCDESTROY, да и всё.

А при разрушении переводить тот самый Long в значение, которое обозначает, что уже всё, тут мы побывали

Казалось бы совсем простой подход, ну или класец на эту тему написать, но тоже ко-о-о-о-о-оротенький
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.