#include<iostream.h>
const int MAX_N=5;
const int MAX_M=30;
int N, M;
int H, Wmax, Hmax;
int owins[MAX_N][4];
int cwins[MAX_N][6];
int ans[MAX_M];
int x, y, lx, ly;
int notDclickTitle;
int main()
{
int i, j, k, h;
while(cin>>N){
//读入窗口信息.
cin>>H>>Wmax>>Hmax;
for(i=0;i<N;i++){
for(j=0;j<4;j++){
cin>>owins[i][j];
cwins[i][j]=owins[i][j];
}
cwins[i][4]=i;
cwins[i][5]=0;
}
//初始化上一次单击鼠标时鼠标指针位置坐标为(-1,-1),
//是否一定不是双击窗口标题栏标记为1.
lx=ly=-1;
notDclickTitle=1;
int ind=0;
cin>>M;
for(i=0;i<M;i++){
cin>>x>>y;
if(notDclickTitle==0&&x==lx&&y==ly){//双击窗口标题栏
//记录结果.
ans[ind]=ans[ind-1];
ind++;
//更新窗口状态.
if(cwins[N-1][5]==0){//尚未最大化,将其最大化.
cwins[N-1][0]=0;
cwins[N-1][1]=Hmax;
cwins[N-1][2]=Wmax;
cwins[N-1][3]=0;
cwins[N-1][5]=1;
}
else{//已是最大化,恢复为原来的大小和为位置.
for(j=0;j<4;j++){
cwins[N-1][j]=owins[ans[ind-1]][j];
}
cwins[N-1][5]=0;
}
notDclickTitle=1;
}
else{//不是双击标题栏
for(j=N-1;j>-1;j--){
if(cwins[j][0]<=x&&x<=cwins[j][2]&&cwins[j][3]<=y&&y<=cwins[j][1]){//单击当前第j个窗口
//记录结果
ans[ind++]=cwins[j][4];
//将第j个窗口移至最上面,其上面各窗口依次后移
int temp[6];
for(k=0;k<6;k++){
temp[k]=cwins[j][k];
}
for(h=j+1;h<N;h++){
for(k=0;k<6;k++){
cwins[h-1][k]=cwins[h][k];
}
}
for(k=0;k<6;k++){
cwins[N-1][k]=temp[k];
}
break;
}
}
if(j==-1){
//未单击任何窗口
ans[ind++]=-1;
notDclickTitle=1;
}
else{
if(cwins[N-1][0]<=x&&x<=cwins[N-1][2]&&cwins[N-1][1]-H<=y&&y<=cwins[N-1][1]){
notDclickTitle=0;
}
else{
notDclickTitle=1;
}
}
}
lx=x;
ly=y;
}
//输出结果
if(M!=0){
cout<<ans[0];
for(i=1;i<M;i++){
cout<<' '<<ans[i];
}
cout<<endl;
}
else{
cout<<endl;
}
}
return 0;
}
zoj 2508.A Less Simple Task in Windows
最新推荐文章于 2012-11-28 21:19:05 发布