Здравствуйте, swap, Вы писали:
S>Данный код не работает (тултипы не появляются) если есть макрос S>#define _WIN32_WINNT 0x0501 S>который например нужен для atltheme.h :(
У меня в текущем проекте он используется в том числе с кодом для отрисовки тем. Там, правда определён макрос
"#define _WIN32_WINNT 0x0500"
Ты уверен что дело в макросе, есть какие-нибудь другие "симптомы"?
Толькло что попробовал с макросом 0x0501 -- всё работает.
Покажи как ты используешь класс.
S>Данный код не работает (тултипы не появляются) если есть макрос S>#define _WIN32_WINNT 0x0501 S>который например нужен для atltheme.h :(
Здравствуйте, WinterMute, Вы писали:
WM>Толькло что попробовал с макросом 0x0501 -- всё работает. WM>Покажи как ты используешь класс.
Да, дело в нем. Если ставишь 0x0500 все работает, но atltheme.h требует 0x0501.
Использую так:
WTL 7.5, VC 80 SP1, создаю через визард WTL проект с главным дилоговым окном. в CMainDlg объявляю переменнкю UI::Tooltip m_tooltip.
В OnInitDialog делаю
m_tooltip.Create(m_hWnd);
И, например, в CMainDlg::OnLButtonDown делаю
m_tooltip.SetText("bla bla bla");
m_tooltip.ShowAtCursor();
У меня другая версия VS и, видимо, ATL. Возможно дело в этом.
Можешь посмотреть отладчиком, создаётся ли вообще окно,
и что происходит после вызова ShowAtCursor() -- GetLastError()
в смысле.
Да, и для подержки тем, по идее, не нужен _WIN32_WINNT 0x0501,
достаточно вручную прописать
По крайней мере, с моей версией библиотек, больше ничего не потребовалось.
WM>>Толькло что попробовал с макросом 0x0501 -- всё работает. WM>>Покажи как ты используешь класс.
S>Да, дело в нем. Если ставишь 0x0500 все работает, но atltheme.h требует 0x0501.
S>Использую так: S>WTL 7.5, VC 80 SP1, создаю через визард WTL проект с главным дилоговым окном. в CMainDlg объявляю переменнкю UI::Tooltip m_tooltip. S>В OnInitDialog делаю
S>m_tooltip.Create(m_hWnd);
S>И, например, в CMainDlg::OnLButtonDown делаю
S>m_tooltip.SetText("bla bla bla"); S>m_tooltip.ShowAtCursor();
S>в stdafx.h такие макросы:
S>#define WINVER 0x0500 S>#define _WIN32_WINNT 0x0501 S>#define _WIN32_IE 0x0501 S>#define _RICHEDIT_VER 0x0100
Здравствуйте, WinterMute, Вы писали:
WM>У меня другая версия VS и, видимо, ATL. Возможно дело в этом. WM>Можешь посмотреть отладчиком, создаётся ли вообще окно, WM>и что происходит после вызова ShowAtCursor() -- GetLastError() WM>в смысле.
WM>Да, и для подержки тем, по идее, не нужен _WIN32_WINNT 0x0501, WM>достаточно вручную прописать WM>
WM>По крайней мере, с моей версией библиотек, больше ничего не потребовалось.
Окно создается, все ::SendMessage возвращают вроде то что должны (для тех сообщений что должны что-то возвращать), GetLastError после ShowAtCursor возвращает 0.
Вопщем с виду все ОК вроде, но тултип не появляется, меняешь на 0x0500 — появляется
У меня в atltheme.h есть такой код
#if (_WIN32_WINNT < 0x0501)
#error atltheme.h requires _WIN32_WINNT >= 0x0501
#endif // (_WIN32_WINNT < 0x0501)
Здравствуйте, WinterMute, Вы писали:
WM>Посмотри как выполняется SubclassWindow( hWnd ), в Create(). Инициализирован-ли m_hWnd?
Да, там все нормально, видимых в отладчике ошибок нет. Более того, на другой машине с той же версией WTL c VC8 (не SP1) все работает.
Ума не приложу в чем дело
Здравствуйте, WinterMute, Вы писали:
WM>В своё время меня не устроил стандартный CTooltipCtrl -- мне была нужена подсказка которая бы появлялась и пропадала когда ей скажут. Кроме того, нужно было, что бы подсказка была прозрачна для всех сообщений мыши (я делал т.н. inplace tooltip). Этот простой класс делает всё вышеперечисленное...
Я новичек в ВТЛ подскажите пожалуйста как обработать сообщения мыши тултипа... В дебагере смотрел он даже в OnMouseMessage не заходит
Здравствуйте, WinterMute, Вы писали:
WM>В своё время меня не устроил стандартный CTooltipCtrl -- мне была нужена подсказка которая бы появлялась и пропадала когда ей скажут. Кроме того, нужно было, что бы подсказка была прозрачна для всех сообщений мыши (я делал т.н. inplace tooltip). Этот простой класс делает всё вышеперечисленное...
Да и еще кто-нибудь сталкивался с проблемой определения координат иконки в трее? Я там хочу тултип выводить когда окно свернуто...?
P.S. Идею с перемещение курсора мыши на иконку и получения координат через сообщение считаю не спортивной, так как:
а)трей может свернуться, и придется заного водить туда мышь
б)в трей может добавиться еще другая прога и придется заного водить туда мышь
в)а также если запущенны два экземпляра программы, то нужно будет еще различать где какой
Здравствуйте, kaz, Вы писали:
kaz>Здравствуйте, WinterMute, Вы писали:
WM>>В своё время меня не устроил стандартный CTooltipCtrl -- мне была нужена подсказка которая бы появлялась и пропадала когда ей скажут. Кроме того, нужно было, что бы подсказка была прозрачна для всех сообщений мыши (я делал т.н. inplace tooltip). Этот простой класс делает всё вышеперечисленное...
kaz>Я новичек в ВТЛ подскажите пожалуйста как обработать сообщения мыши тултипа... В дебагере смотрел он даже в OnMouseMessage не заходит
Не понятно что именно надо, опиши задачу подробнее. Если ты о том, чтобы показывать подсказку по сообщению мыши, то это нужно делать вручную, вызвав Show().
Здравствуйте, WinterMute, Вы писали:
WM>Здравствуйте, kaz, Вы писали:
kaz>>Здравствуйте, WinterMute, Вы писали:
WM>>>В своё время меня не устроил стандартный CTooltipCtrl -- мне была нужена подсказка которая бы появлялась и пропадала когда ей скажут. Кроме того, нужно было, что бы подсказка была прозрачна для всех сообщений мыши (я делал т.н. inplace tooltip). Этот простой класс делает всё вышеперечисленное...
kaz>>Я новичек в ВТЛ подскажите пожалуйста как обработать сообщения мыши тултипа... В дебагере смотрел он даже в OnMouseMessage не заходит
WM>Не понятно что именно надо, опиши задачу подробнее. Если ты о том, чтобы показывать подсказку по сообщению мыши, то это нужно делать вручную, вызвав Show().
Задача такая: при клике мышой на тултипе скрывать его... А мышиные сообщения не обрабатываются... пробовал субклассить тултип... но тоже без результатов:
Здравствуйте, kaz, Вы писали:
kaz>Да и еще кто-нибудь сталкивался с проблемой определения координат иконки в трее? Я там хочу тултип выводить когда окно свернуто...? kaz>P.S. Идею с перемещение курсора мыши на иконку и получения координат через сообщение считаю не спортивной, так как: kaz>а)трей может свернуться, и придется заного водить туда мышь kaz>б)в трей может добавиться еще другая прога и придется заного водить туда мышь kaz>в)а также если запущенны два экземпляра программы, то нужно будет еще различать где какой
Когда показываете пиктограмму в трее, в Shell_NotifyIcon передаётся структура, содержащая HWND окошка, которая будет принимать сообщение, ID сообщения, ID пиктограммы (чтоб различать несколько от одного окна), текст тултипа. Потом ловите это сообщение в окне, получая ID пиктограммы и WM_чототам, что случилось с пиктограммой, WM_LBUTTONDBLCLK, например. Тултип система сама выведет, кстати.
Здравствуйте, WinterMute, Вы писали:
WM>Здравствуйте, kaz, Вы писали:
kaz>>Здравствуйте, WinterMute, Вы писали:
WM>>>В своё время меня не устроил стандартный CTooltipCtrl -- мне была нужена подсказка которая бы появлялась и пропадала когда ей скажут. Кроме того, нужно было, что бы подсказка была прозрачна для всех сообщений мыши (я делал т.н. inplace tooltip). Этот простой класс делает всё вышеперечисленное...
kaz>>Я новичек в ВТЛ подскажите пожалуйста как обработать сообщения мыши тултипа... В дебагере смотрел он даже в OnMouseMessage не заходит
WM>Не понятно что именно надо, опиши задачу подробнее. Если ты о том, чтобы показывать подсказку по сообщению мыши, то это нужно делать вручную, вызвав Show().
он утебя в OnMouseMessage не заходит, пробовал ставить брекпоинт.
Здравствуйте, Xander Zerge, Вы писали:
XZ>Здравствуйте, kaz, Вы писали:
kaz>>Да и еще кто-нибудь сталкивался с проблемой определения координат иконки в трее? Я там хочу тултип выводить когда окно свернуто...? kaz>>P.S. Идею с перемещение курсора мыши на иконку и получения координат через сообщение считаю не спортивной, так как: kaz>>а)трей может свернуться, и придется заного водить туда мышь kaz>>б)в трей может добавиться еще другая прога и придется заного водить туда мышь kaz>>в)а также если запущенны два экземпляра программы, то нужно будет еще различать где какой
XZ>Когда показываете пиктограмму в трее, в Shell_NotifyIcon передаётся структура, содержащая HWND окошка, которая будет принимать сообщение, ID сообщения, ID пиктограммы (чтоб различать несколько от одного окна), текст тултипа. Потом ловите это сообщение в окне, получая ID пиктограммы и WM_чототам, что случилось с пиктограммой, WM_LBUTTONDBLCLK, например. Тултип система сама выведет, кстати.
Мне надо чтобы тултип в трее выводился не по какому-то событию (WM_MOUSEMOVE, WM_LBUTTONDOWN), а по другим причинам (например, значение переменной вышло за заданный диапазон)
Здравствуйте, kaz, Вы писали:
kaz>Мне надо чтобы тултип в трее выводился не по какому-то событию (WM_MOUSEMOVE, WM_LBUTTONDOWN), а по другим причинам (например, значение переменной вышло за заданный диапазон)
Для того balloon есть. Делается через ту же Shell_NotifyIcon, через NIF_INFO.
WM>>Не понятно что именно надо, опиши задачу подробнее. Если ты о том, чтобы показывать подсказку по сообщению мыши, то это нужно делать вручную, вызвав Show().
kaz>Задача такая: при клике мышой на тултипе скрывать его... А мышиные сообщения не обрабатываются... пробовал субклассить тултип... но тоже без результатов:
Убери стиль TTF_TRANSPARENT в строчке:
m_ToolInfo.uFlags = TTF_TRACK | TTF_TRANSPARENT | TTF_SUBCLASS;
Здравствуйте, WinterMute, Вы писали:
WM>>>Не понятно что именно надо, опиши задачу подробнее. Если ты о том, чтобы показывать подсказку по сообщению мыши, то это нужно делать вручную, вызвав Show().
kaz>>Задача такая: при клике мышой на тултипе скрывать его... А мышиные сообщения не обрабатываются... пробовал субклассить тултип... но тоже без результатов:
WM>Убери стиль TTF_TRANSPARENT в строчке: WM>m_ToolInfo.uFlags = TTF_TRACK | TTF_TRANSPARENT | TTF_SUBCLASS;
WM>-- Тогда должны ловиться мышиные сообщения.
Ок, спасибо за помощь. Только еще один ньюанс... В родительском окне (которое hwndOwner)я ловлю WM_LBUTTONDBLCLK
и при нажатии мышой на тултип приходит сообщение, но при нажатии на клиентскую облать родительского диалога оно не приходит (меня это устраивает), но
так... интересно как же его если что отловить!
Здравствуйте, Xander Zerge, Вы писали:
XZ>Здравствуйте, kaz, Вы писали:
kaz>>Мне надо чтобы тултип в трее выводился не по какому-то событию (WM_MOUSEMOVE, WM_LBUTTONDOWN), а по другим причинам (например, значение переменной вышло за заданный диапазон) XZ>Для того balloon есть. Делается через ту же Shell_NotifyIcon, через NIF_INFO.
Да, я догодался уже, через NIF_MODYFY оно появляется... Но все равно спкасибо за беспокойство!
правда обидно что максимальный размер 255, а у меня возможна такая ситуация когда размер выводимого в тултипе текста 32000*64...
поэтому я вывожу тултип в трее несколько раз, если размер выводимого текста > 256...
Может есть способ это обойти? Т.е. увеличить размер буффера передаваемогоо через NOTIFYICONDATA?