《Windows程序设计》之鼠标2

	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相比,加入了键盘控制,个人认识可以学习的就是上面我加入注释的这一些了,一些常规操作的实现方法感觉还是不错的。

你可能感兴趣的:(《Windows程序设计》之鼠标2)