ToolTips и GroupBox
От: Sevig Россия  
Дата: 16.12.02 13:21
Оценка:
Господа, подскажите, как сделать чтобы выводились тултипы для кнопочек, находящихся в GroupBox.
Для всех остальных элементов диалога подсказки выводятся нормально.

Спасибо.
Re: ToolTips и GroupBox
От: creatio Украина  
Дата: 31.03.03 06:48
Оценка:
Здравствуйте, Sevig, Вы писали:

Я долбался с этим вариантом несколько дней. Похоже на баг мелкософта.
У меня вообще не на одном контроле в группе не светилось ничего.

Решение №1.
Установить группе ID=-1 (другими словами 0xFFFFFFFF он же IDC_STATIC) — всё светится, но заголовок поменять не получится.

Решение №2.
Дело в том, что светимость хинта также зависит от Z-order в котором нарисованы контролы в группе (связано с "особенностями" работы функции поиcка FindWindow/FindWindowEx WIN32API). Если посмотреть шпионом на группу, то видим, что это на самом деле кнопка! То есть, если контролы нарисованы поверх группы (читай кнопки), то нифига не светится, если же наоборот... — yess!

Решение №2.1.
Если же у Вас (как и некогда в моём случае), более 1000 диалогов, которые Вам абсолютно не хочется перерисовывать... то (я ничего лучшего пока не придумал) меняем Z-order на этапе выполнения.

Вот так это выглядит для MFC.

void MyDialog::OnInitialUpdate()
{
//...

EnableToolTips();
SetGroupsZorder();
}

void MyDialog::SetGroupsZorder()
{
HWND hwButton = 0;
std::queue<HWND> qGrBoxes; //or any container that has push/pop/front operations, could be used

//Enumerates all Button controls and checks if they are GroupBoxes
while((hwButton = FindWindowEx (m_hWnd, hwButton,"Button",NULL)))
if(hwButton && ((GetWindowLong(hwButton, GWL_STYLE)&BS_GROUPBOX) == BS_GROUPBOX))
qGrBoxes.push(hwButton); //Store HWNDs


//SetWindowPos operation interfers with FindWindowEx so it was placed in separate loop
while(!qGrBoxes.empty()) { //Set Zorder to All groups
::SetWindowPos(qGrBoxes.front(), HWND_BOTTOM,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
qGrBoxes.pop();
}
}

Данное решение не является элегантным (это однозначно).
Это есть затычка на дырку мелкософта, которая, похоже была исправлена в новой версии MFC поставляемой вместе с MS VS.NET и VC7.0
Если кто нашёл более элегантное решение — плиз сообщите, заранее благодарен.

creatio@mail.ru
Why do you call Visual Studio 'your bunny'?...
(c) one american colleague
Re[2]: ToolTips и GroupBox
От: creatio Украина  
Дата: 02.04.03 09:18
Оценка:
Уже нашёл более элегантное решение — не пользоваться встроенным в CWnd контролом, т.е. не использовать EnableToolTips() всё писать ручками, надо признать кода е много оплучается. а весь код риводится на этом форуме.
Why do you call Visual Studio 'your bunny'?...
(c) one american colleague
Re[3]: ToolTips и GroupBox
От: Sevig Россия  
Дата: 03.04.03 05:41
Оценка:
Здравствуйте, creatio, Вы писали:

C> Уже нашёл более элегантное решение — не пользоваться встроенным в CWnd контролом, т.е. не использовать EnableToolTips() всё писать ручками, надо признать кода е много оплучается. а весь код риводится на этом форуме.


Спасибо за помощь.

Приятно когда настоящие прифи помогают в решении проблем...

Re[3]: ToolTips и GroupBox
От: Sevig Россия  
Дата: 03.04.03 06:22
Оценка:
Здравствуйте, creatio, Вы писали:

C> Уже нашёл более элегантное решение — не пользоваться встроенным в CWnd контролом, т.е. не использовать EnableToolTips() всё писать ручками, надо признать кода е много оплучается. а весь код риводится на этом форуме.


А сам код где то лежит ? Не смог найти
Re: ToolTips и GroupBox
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 03.04.03 06:27
Оценка:
Здравствуйте, Sevig, Вы писали:

S>Господа, подскажите, как сделать чтобы выводились тултипы для кнопочек, находящихся в GroupBox.

S>Для всех остальных элементов диалога подсказки выводятся нормально.

господа, вы меня заинтриговали не могу понять в чем проблема, сделать как на рисунке



или что?
Как подло отменяют электрички! (В. Вишневский)
Re[2]: ToolTips и GroupBox
От: Кирпа В.А. Украина  
Дата: 03.04.03 06:52
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

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


Я тоже не пойму что у них не получается и какой там баг они обнаружили

Внутри груп-боксов у меня тултипы выводятся
!0xDEAD
Re[2]: ToolTips и GroupBox
От: creatio Украина  
Дата: 03.04.03 07:58
Оценка:
OE>или что?
Баги мелкомягких выскакивают в следующих ситуациях:

1. У группы ID != -1 (IDC_STATIC), и группа имеет Z-order TOPMOST (кажется, помню, точно что от Z-order зависит), при условии использования встроенной поддержки тултипов в CWnd (EnableToolTips() etc...).
Но этот баг удалось обойти используя Статью "Исчерпывающее руководство по написанию всплывающих подсказок" — т.е. написать поддержку ручками с использованием класса CToolTipCtrl.

2. Контрол задизэйблен (общепризнанный баг CToolTipCtrl)
Удалось обойти см. соответствующую тему, Tooltips и disabled контролы (или что-то очень похожее).

3. Контрол задизэйблен и находится в группе.
С этим я не возился (начальство перекинуло на другие работы, дескать, и так сойдёт). Для решения проблемы нужно слегка повозиться с решением проблемы из п.2
Why do you call Visual Studio 'your bunny'?...
(c) one american colleague
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.