case WM_SIZE:
cxBlock=LOWORD(lParam)/DIVISIONS;
cyBlock=HIWORD(lParam)/DIVISIONS;
return 0;
//以下代码,我觉得没有用到,于是注释
/*case WM_SETFOCUS:
ShowCursor(TRUE);
return 0;
case WM_KILLFOCUS:
ShowCursor(FALSE);
return 0;*/
//下面是键盘操作触发消息
case WM_KEYDOWN:
//获取点坐标
GetCursorPos(&point);
//屏幕坐标转窗口坐标
ScreenToClient(hwnd,&point);
//这个地方看了好长时间才明白过来的。
//为了保证得到的x,y在0与DIVISIONS-1之间。
x=max(0,min(DIVISIONS-1,point.x/cxBlock));
y=max(0,min(DIVISIONS-1,point.y/cyBlock));
switch(wParam)
{
//PageUp
case VK_UP:
y--;
break;
//PageDown
case VK_DOWN:
y++;
break;
//Left
case VK_LEFT:
x--;
break;
//Right
case VK_RIGHT:
x++;
break;
//Home
case VK_HOME:
x=y=0;
break;
//End
case VK_END:
x=y=DIVISIONS-1;
break;
//回车或空格
case VK_RETURN:
case VK_SPACE:
//发送WM_LBUTTONDOWN
SendMessage(hwnd,WM_LBUTTONDOWN,MK_LBUTTON,MAKELONG(x*cxBlock,y*cyBlock));
break;
}
//上面x,y经过相应的变化,重新计算
//比如在最左侧时,x为0,x--后,经过下面的计算,x=9,光标就移到最右边了。
//真心学习了.....
x=(x+DIVISIONS)%DIVISIONS;
y=(y+DIVISIONS)%DIVISIONS;
point.x=x*cxBlock+cxBlock/2;
point.y=y*cyBlock+cyBlock/2;
//转换为屏幕坐标,然后设置光标
ClientToScreen(hwnd,&point);
SetCursorPos(point.x,point.y);
return 0;
代码是CHECKER2中部分,与CHECKER1相比,加入了键盘控制,个人认识可以学习的就是上面我加入注释的这一些了,一些常规操作的实现方法感觉还是不错的。