Окно в трее
От: Mack Россия  
Дата: 25.11.03 18:06
Оценка:
Как вставить окно в трей, не в виде иконки, а так, как это делают chameleon clock и другие подобные программы? Если не сложно, то, пожалуйста поподробнее, и желательно небольшой примерчик. Спасибо.

25.11.03 21:34: Перенесено модератором из 'C/C++' — ПК
Re: Окно в трее
От: Рома Мик Россия http://romamik.com
Дата: 25.11.03 23:05
Оценка:
Здравствуйте, Mack, Вы писали:

M>Как вставить окно в трей, не в виде иконки, а так, как это делают chameleon clock и другие подобные программы? Если не сложно, то, пожалуйста поподробнее, и желательно небольшой примерчик. Спасибо.

Это окно в трее — самый обычный тулбар. Посмотри spy'ем как его найти програмно. По идее что-то вроде: окно с классом Shell_TrayWnd, его дочернее, а потом уже тулбар, т.е. с классом ToolbarWindow32. Используй функции EnumWindows, EnumChildWindows и GetClassName, чтобы найти это окно.
Как добавлять нестандартные контролы в тулбар написано в msdn в разделе ToolBar Controls->Using ToolBar Controls->Embedding Nonbutton Controls in Toolbars. Возможно сработает эта ссылка.
... << RSDN@Home 1.1.0 stable >>
Re[2]: Окно в трее
От: Mack Россия  
Дата: 27.11.03 18:14
Оценка:
Здравствуйте, Рома Мик, Вы писали:

РМ>Это окно в трее — самый обычный тулбар. Посмотри spy'ем как его найти програмно. По идее что-то вроде: окно с классом Shell_TrayWnd, его дочернее, а потом уже тулбар, т.е. с классом ToolbarWindow32. Используй функции EnumWindows, EnumChildWindows и GetClassName, чтобы найти это окно.

РМ>Как добавлять нестандартные контролы в тулбар написано в msdn в разделе ToolBar Controls->Using ToolBar Controls->Embedding Nonbutton Controls in Toolbars. Возможно сработает эта ссылка.

Спасибо, разобрался, сделав окно дочерним в часах, теперь проблема: как увеличить размеры часов (стандартных), и сделать это корректно (чтобы другие иконки, находящиеся в трее "подвинулись" влево) мои попытки ни к чему хорошему не привели. Спасибо
Re[3]: Окно в трее
От: Рома Мик Россия http://romamik.com
Дата: 27.11.03 21:23
Оценка:
Здравствуйте, Mack, Вы писали:

M>Спасибо, разобрался, сделав окно дочерним в часах,

А зачем? Делай родителем окна тулбар. Место на тулбаре под окно выдели как как сепаратор, послав сообщение TB_ADDBUTTONS, передав TBBUTTON с iBitmap = нужной ширине и fsStyle = BTNS_SEP. Потом получи c помощью TB_GETRECT место, где создавать окно на тулбаре, и создавай.
... << RSDN@Home 1.1.0 stable >>
Re[4]: Окно в трее
От: Аноним  
Дата: 28.11.03 16:52
Оценка:
Здравствуйте, Рома Мик, Вы писали:

РМ>Здравствуйте, Mack, Вы писали:


M>>Спасибо, разобрался, сделав окно дочерним в часах,

РМ>А зачем? Делай родителем окна тулбар. Место на тулбаре под окно выдели как как сепаратор, послав сообщение TB_ADDBUTTONS, передав TBBUTTON с iBitmap = нужной ширине и fsStyle = BTNS_SEP. Потом получи c помощью TB_GETRECT место, где создавать окно на тулбаре, и создавай.

Делаю часы, поэтому и хотел вставить их поверх стандартных, вероятно можно сделать как Вы предлагали, а стандартные часы закрыть. Пытался, но тулбар на мои сообщения вообще не отвечает. Хорошо бы пример кода посмотреть
Re[5]: Окно в трее
От: Рома Мик Россия http://romamik.com
Дата: 01.12.03 20:47
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Делаю часы, поэтому и хотел вставить их поверх стандартных,

Плохая идея.

А>вероятно можно сделать как Вы предлагали, а стандартные часы закрыть.

Можно, так и делают.

А>Пытался, но тулбар на мои сообщения вообще не отвечает.

Это скорее всего оттого, что ты передаешь адреса структур в адресном пространстве своего процесса, а надо — в процессе-хозяине окна, скорее всего explorer'е. Есть два пути.
Первый: Использовать VirtualAllocEx и WriteProcessMemory, чтобы непосредственно писать в память процесса. Определить handle процесса можно с помощью функций GetWindowThreadProcessId и OpenProcess.
Второй: заставить explorer загрузить нашу dll. Наиболее простым способом представляется установить хук WH_GETMESSAGE на поток интересующего нас тулбара. Получить threadId с помощью функции GetWindowThreadId и установить хук с помощью SetWindowHookEx. После этого создать уже из explorer'а свое невидимое окно и сним обмениваться сообщениями, а оно будет пересылать их тулбару.
... << RSDN@Home 1.1.0 stable >>
Re[6]: Окно в трее
От: Рома Мик Россия http://romamik.com
Дата: 01.12.03 21:03
Оценка:
Здравствуйте, Рома Мик, Вы писали:

РМ>Первый

И учитывая, что VirtualAllocEx есть только под NT, — не лучший.
... << RSDN@Home 1.1.0 stable >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.