int NineSelByPoint(int PointX, int PointY)
{
if ((PointX>42)&&(PointX<108)&&(PointY<66))
return 0;
if ((PointX>108)&&(PointX<174)&&(PointY<66))
return 1;
if ((PointX>174)&&(PointY<66))
return 2;
if ((PointX>42)&&(PointX<108)&&(PointY>66)&&(PointY<132))
return 3;
if ((PointX>108)&&(PointX<174)&&(PointY>66)&&(PointY<132))
return 4;
if ((PointX>174)&&(PointY>66)&&(PointY<132))
return 5;
if ((PointX>42)&&(PointX<108)&&(PointY>132)&&(PointY<198))
return 6;
if ((PointX>108)&&(PointX<174)&&(PointY>132)&&(PointY<198))
return 7;
if ((PointX>174)&&(PointY>132)&&(PointY<198))
return 8;
return -1;
}上面是我写的鼠标单击判断九宫格点击位置的函数,传入的是鼠标的坐标。每个宫格长宽都是66像素,九宫格距离左边边框是42像素。
由于还要movemouse,因此每次move都得调用此函数。
我总感觉这段代码效率不是很高,也说不上哪里的问题,求高手帮忙优化一下,学习学习。
{
if ((PointX>42)&&(PointX<108)&&(PointY<66))
return 0;
if ((PointX>108)&&(PointX<174)&&(PointY<66))
return 1;
if ((PointX>174)&&(PointY<66))
return 2;
if ((PointX>42)&&(PointX<108)&&(PointY>66)&&(PointY<132))
return 3;
if ((PointX>108)&&(PointX<174)&&(PointY>66)&&(PointY<132))
return 4;
if ((PointX>174)&&(PointY>66)&&(PointY<132))
return 5;
if ((PointX>42)&&(PointX<108)&&(PointY>132)&&(PointY<198))
return 6;
if ((PointX>108)&&(PointX<174)&&(PointY>132)&&(PointY<198))
return 7;
if ((PointX>174)&&(PointY>132)&&(PointY<198))
return 8;
return -1;
}上面是我写的鼠标单击判断九宫格点击位置的函数,传入的是鼠标的坐标。每个宫格长宽都是66像素,九宫格距离左边边框是42像素。
由于还要movemouse,因此每次move都得调用此函数。
我总感觉这段代码效率不是很高,也说不上哪里的问题,求高手帮忙优化一下,学习学习。
解决方案 »
- 一个关于如何使用wininet的问题
- 帮我详细解释一下这个高斯算法,谢谢!急
- 关于CListCtrl排序的问题!
- datagrid能结合下拉列表吗
- 我已经转换为宽字符了,为何find还返回4?
- 让菜单变灰和工具栏变灰
- 主窗口处理WM_NOTIFY消息时,OnCmdMsg的第二个参数为什么是MAKELONG(nCode,WM_NOTIFY)?
- 解答Automation的高手进来!答对者有分!
- 关于多视图的打印问题,困扰了我好几天了,请各位指教!
- 在dll中使用AfxGetResourceHandle()语句失败
- 手工添加MFC控件的问题
- 请高手帮我看看使用CFileDialog不能读取第一个文件的问题
不过如果只是判断单击那就把此函数的调用放在onlbuttondown函数中吧(WM_LBUTTONDOWN事件)。
你可以把这个关系做成一个数组,就是一个表,
传入x,y,查表得到点击的格子,
思路是这样
int nRow = PointY / 66;
if(nCol > 0 && nCol < 3 && nRow > 0 && nRow < 3)
return nRow * 3 + nCol;
else
return -1;
return -1;
int x = -1, y = 0;
if (PointY<66)//Y坐标在九宫格第一行
y = 0;
else
PointY>132?y=6:y=3;//Y坐标在九宫格第二,三行
if (PointX>174)//X坐标在九宫格第三列
x = 2;
else
PointX<108?x = 0:x = 1;//X坐标在九宫格第一列
return x+y;