Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Подсказки отслеживания остаются видимыми, пока они не будут явно закрыты приложением, и могут динамически изменять положение на экране. Они поддерживаются 4.70 и более поздними общими элементами управления.
Чтобы создать подсказку отслеживания, добавьте флаг TTF_TRACK в элемент uFlags структуры TOOLINFO при отправке сообщения TTM_ADDTOOL.
Приложение должно вручную активировать (показать) и отключить (скрыть) подсказку отслеживания, отправив сообщение TTM_TRACKACTIVATE . Хотя подсказка отслеживания активна, приложение должно указать расположение подсказки, отправив TTM_TRACKPOSITION сообщения в элемент управления подсказки. Так как приложение обрабатывает такие задачи, как размещение подсказки, подсказки отслеживания не используют флаг TTF_SUBCLASS или сообщение TTM_RELAYEVENT .
Сообщение TTM_TRACKPOSITION приводит к отображению окна с помощью одного из двух стилей размещения:
- По умолчанию подсказка отображается рядом с соответствующим инструментом в позиции, выбранной элементом управления. Выбранное расположение относительно координат, которые вы предоставляете с помощью этого сообщения.
- Если включить значение TTF_ABSOLUTE в элемент структуры TOOLINFO, подсказка отображается в расположении пикселя, указанном в сообщении. В этом случае элемент управления не пытается изменить расположение окна подсказки с указанных координат.
Это важно знать
Технологии
Необходимые компоненты
- C/C++
- Программирование пользовательского интерфейса Windows
Instructions
Реализация подсказок на месте
Элемент uFlags структуры TOOLINFO, используемой в примере, включает флаг TTF_ABSOLUTE. Без этого флага элемент управления подсказки выбирает место отображения подсказки и его положение относительно диалогового окна может внезапно измениться при перемещении указателя мыши.
Примечание.
g_toolItem — это глобальная структура TOOLINFO .
В следующем примере показано, как создать элемент управления подсказкой отслеживания. В этом примере указывается вся клиентская область основного окна в качестве средства.
HWND CreateTrackingToolTip(int toolID, HWND hDlg, WCHAR* pText)
{
// Create a tooltip.
HWND hwndTT = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL,
WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
hDlg, NULL, g_hInst,NULL);
if (!hwndTT)
{
return NULL;
}
// Set up the tool information. In this case, the "tool" is the entire parent window.
g_toolItem.cbSize = sizeof(TOOLINFO);
g_toolItem.uFlags = TTF_IDISHWND | TTF_TRACK | TTF_ABSOLUTE;
g_toolItem.hwnd = hDlg;
g_toolItem.hinst = g_hInst;
g_toolItem.lpszText = pText;
g_toolItem.uId = (UINT_PTR)hDlg;
GetClientRect (hDlg, &g_toolItem.rect);
// Associate the tooltip with the tool window.
SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &g_toolItem);
return hwndTT;
}
Реализация процедуры окна
Если указатель мыши находится в клиентской области, подсказка активна и отображает координаты курсора, как показано на следующем рисунке.
![]()
В следующем примере кода используется процедура окна для диалогового окна, отображающего подсказку отслеживания, созданную в предыдущем примере. Глобальная логическая переменная g_TrackingMouse используется для определения необходимости повторной активации подсказки и сброса отслеживания мыши, чтобы приложение уведомлялось, когда указатель мыши покидает клиентская область диалогового окна.
//g_hwndTrackingTT is a global HWND variable
case WM_INITDIALOG:
InitCommonControls();
g_hwndTrackingTT = CreateTrackingToolTip(IDC_BUTTON1, hDlg, L"");
return TRUE;
case WM_MOUSELEAVE: // The mouse pointer has left our window. Deactivate the tooltip.
SendMessage(g_hwndTrackingTT, TTM_TRACKACTIVATE, (WPARAM)FALSE, (LPARAM)&g_toolItem);
g_TrackingMouse = FALSE;
return FALSE;
case WM_MOUSEMOVE:
static int oldX, oldY;
int newX, newY;
if (!g_TrackingMouse) // The mouse has just entered the window.
{ // Request notification when the mouse leaves.
TRACKMOUSEEVENT tme = { sizeof(TRACKMOUSEEVENT) };
tme.hwndTrack = hDlg;
tme.dwFlags = TME_LEAVE;
TrackMouseEvent(&tme);
// Activate the tooltip.
SendMessage(g_hwndTrackingTT, TTM_TRACKACTIVATE, (WPARAM)TRUE, (LPARAM)&g_toolItem);
g_TrackingMouse = TRUE;
}
newX = GET_X_LPARAM(lParam);
newY = GET_Y_LPARAM(lParam);
// Make sure the mouse has actually moved. The presence of the tooltip
// causes Windows to send the message continuously.
if ((newX != oldX) || (newY != oldY))
{
oldX = newX;
oldY = newY;
// Update the text.
WCHAR coords[12];
swprintf_s(coords, ARRAYSIZE(coords), L"%d, %d", newX, newY);
g_toolItem.lpszText = coords;
SendMessage(g_hwndTrackingTT, TTM_SETTOOLINFO, 0, (LPARAM)&g_toolItem);
// Position the tooltip. The coordinates are adjusted so that the tooltip does not overlap the mouse pointer.
POINT pt = { newX, newY };
ClientToScreen(hDlg, &pt);
SendMessage(g_hwndTrackingTT, TTM_TRACKPOSITION, 0, (LPARAM)MAKELONG(pt.x + 10, pt.y - 20));
}
return FALSE;
См. также