IntersectRect-Windows API

IntersectRect函数计算两个源矩形的交集,并将交集矩形的坐标放到目标矩形中,如果源矩形没有交集,那么一个空的矩形(坐标都是0)被设置。

BOOL IntersectRect(

  LPRECT lprcDst,        // intersection buffer

  CONST RECT *lprcSrc1,  // first rectangle

  CONST RECT *lprcSrc2   // second rectangle

);

参数:

lprcDst:[输出]指行一个RECT结构来接收两个矩形的交集。

lprcSrc1:[输入]第一个源矩形

lprcSrc2:[输入]第二个源矩形

返回值:

如果矩形存在交集,返回值是非0,否则是0

备注:

因为使用矩形的目的不同,矩形函数没有很清楚的度量单位。通常,所有矩形的坐标和大小都是用逻辑值来表示。映射模式和矩形函数决定了最终的度量单位。
可以使用Windows API中的Shell_NotifyIconGetRect函数来查询系统托盘中的图标数量。 具体步骤如下: 1. 枚举系统托盘中的所有图标,获取每个图标的位置信息。 2. 使用Shell_NotifyIconGetRect函数获取托盘区域的大小和位置。 3. 遍历每个图标的位置信息,如果该图标的位置在托盘区域内,则将计数器加一。 示例代码如下: ```c++ #include <windows.h> #include <shellapi.h> int GetTrayIconCount() { int count = 0; HWND trayWnd = FindWindow("Shell_TrayWnd", NULL); if (trayWnd == NULL) { return count; } HWND trayNotifyWnd = FindWindowEx(trayWnd, NULL, "TrayNotifyWnd", NULL); if (trayNotifyWnd == NULL) { return count; } RECT trayRect; Shell_NotifyIconGetRect(&GUID_NULL, &trayRect); HWND childWnd = FindWindowEx(trayNotifyWnd, NULL, "SysPager", NULL); if (childWnd != NULL) { childWnd = FindWindowEx(childWnd, NULL, "ToolbarWindow32", NULL); } else { childWnd = FindWindowEx(trayNotifyWnd, NULL, "ToolbarWindow32", NULL); } if (childWnd == NULL) { return count; } int buttonCount = SendMessage(childWnd, TB_BUTTONCOUNT, 0, 0); for (int i = 0; i < buttonCount; i++) { RECT buttonRect; SendMessage(childWnd, TB_GETITEMRECT, i, (LPARAM)&buttonRect); if (IntersectRect(&buttonRect, &buttonRect, &trayRect)) { count++; } } return count; } ``` 该函数首先获取系统托盘窗口的句柄,然后通过FindWindowEx函数获取托盘区域的句柄。接着使用Shell_NotifyIconGetRect函数获取托盘区域的大小和位置,并通过FindWindowEx函数获取托盘区域中的ToolbarWindow32控件。最后,遍历ToolbarWindow32控件中的所有按钮,并判断按钮的位置是否在托盘区域内,如果是,则将计数器加一。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值