Здравствуйте, 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