Today’s Little Program locates the × button in the corner of the window and, just to show that it found it, displays a balloon tip pointing at it.
Let’s start with the program from last week, the one that displays a balloon tip, then make these changes:
BOOL GetCloseButtonCenter(HWND hwnd, POINT *ppt) { TITLEBARINFOEX info = { sizeof(info) }; if (!SendMessage(hwnd, WM_GETTITLEBARINFOEX, 0, (LPARAM)&info)) return FALSE; if (info.rgstate[5] & (STATE_SYSTEM_INVISIBLE | STATE_SYSTEM_OFFSCREEN | STATE_SYSTEM_UNAVAILABLE)) return FALSE; ppt->x = info.rgrect[5].left + (info.rgrect[5].right - info.rgrect[5].left) / 2; ppt->y = info.rgrect[5].top + (info.rgrect[5].bottom - info.rgrect[5].top) / 2; return TRUE; } case TEXT(' '): if (GetCloseButtonCenter(hwnd, &pt)) { SendMessage(g_hwndTT, TTM_TRACKPOSITION, 0, MAKELPARAM(pt.x, pt.y));
Instead of positioning the balloon at the cursor position,
we put it at the center of the Close button.
We use the
WM_GETTITLEBARINFOEX
message
to obtain information about the window title bar,
specifically checking information about the Close button.
After verifying that it is visible and on-screen and enabled,
we calculate its center point and return success.
The WM_GETTITLEBARINFOEX
message
is new for Windows Vista.
Next time, we’ll cook up a method that works on Windows 2000
and Windows XP.
0 comments