Итак, проблемы продолжаются...
Свернуть в трэй мы смогли, теперь разворачиваем
Гугл мне дал сотню страничек с одним и тем же примером, который меня не очень то устраивает, так как документации я к этим примерам не нашел.
Мой товарищ Хакер помог мне в решении проблемы, и решение пошло в русло sub-clsssing-а. Я если честно никогда этим именно на VB не занимался, поэтому попотеть пришлось.
Итак, помолясь с MSDN-ом мы начали курить документацию по Shell_NotifyIcon, откуда попали к NOTIFYICONDATA Structure, где собственно и прописывается информация, которая меня интересует - как же вернуть прежний вид приложения.
Самое важное поле для меня было uCallbackMessage, в него мы запишем сообщение-маркер, благодаря которому мы узнаем что хотим показать окно.
Ок, MSDN пишет, что мол
the wParam parameter of the message contains the identifier of the taskbar icon in which the event occurred
Ну id у меня hwnd окна, значит wparam посланного сообщения будет содержать hwnd окна.
Ну я как последний дятел в sub-class-ге сразу решил в sub-window-proc обрабатывать сообщения, переданные мышью, а уже после отлова сообщения смотреть wParam. Вот дятел чесслово.
На самом деле все сообщения будут отправляться окну, и конечно же они могут быть не только сообщения мыши. Могут быть вообще нестандартное сообщение, а юзерские. Соответственно я взял WM_USER с неважно каким смещением.
Потом меня тыкнули в строчку в MSDN
The lParam parameter holds the mouse or keyboard message associated with the event
Т.е. сообщение будет в lParam.
Итак
1. Спускаем приложение в трэй
2. Запускаем свою самодельную WindowProc
3. Обрабатываем сообщение WM_USER + ... (после чего обязательно вызываем родную WindowProc; если сообщение не WM_USER, тоже вызываем обычный WindowProc)
4. Если отловили WM_USER, просматриваем lParam на предмет содержания в нем сообщения, которое нам так необходимо, в моем случае WM_LBUTTONDOWN
5. Показываем окно
6. Вызываем родную WinProc
Клик на иконке отработан, а вот с показам окна проблема.
Тут хочется вспомнить украинских комедийных артистов, которые сказали "И что я только с ним не делала..."
Я и ShowWindow юзал, и сообщение SHOW слал, и стиль окна SetWindowLong-ом менял, и по совету Хакера SetWindowPlacement даже мучал.
Но вот не хочет появляться и все тут.
Самым удачным вариантом был конечно SetWindowPlacement, я хотя бы мог восстановить по структуре WINDOWPLACEMENT прежние координаты и стили окна до сворачивания, и окно как бы появлялось на панели задач, но я его не вижу. В W7 есть мини-просмотр окна, но там только значёк приложения. Т.е. окно просто тупо не прорисовывается.
Кто подскажет почему?
Пишите жизнь на чистовик.....переписать не удастся.....