// 计算结果是25个子窗口的ID,即idFocus
hwnd, (HMENU) (y << 8 | x),
// 现在要把idFocus拆开得到 x,y
x = idFocus & 0xFF ;
y = idFocus >> 8 ;
#include <stdio.h>
int main(int argc, char *argv[])
{
int i,j;
int id[5][5];//子窗口的ID
for(i=0;i<5;i++)
for(j=0;j<5;j++)id[i][j]= j<<8|i; //j左移动8bit 再与i 或运算
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
printf("%d\t",id[i][j]);
if(j==4)printf("\n");
}
printf("--------------------------------------\n");
int x,y;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
x = id[i][j] & 0xFF;// 看不懂......1111 1111
y = id[i][j]>>8;
printf("%d,%d\t",x,y);
if(j==4)printf("\n");
}
printf("Hello, world!\n");
return 0;
}
把id[i][j] 用十六进制输出 :printf("%0X\t",id[i][j]);

本文介绍了一种通过位操作来组合和分解子窗口ID的方法。利用左移和按位或操作将x和y坐标组合成一个整数作为子窗口ID,并通过按位与和右移操作将该ID分解回原始坐标。示例代码展示了如何实现这一过程。
1071

被折叠的 条评论
为什么被折叠?



