鼠标相关
用鼠标垫做手腕活动,预防鼠标手。 #生活技巧# #健康生活小窍门# #运动技巧# #办公室运动建议#
检测鼠标是否存在的函数(返回值为true表示已经安装,返回值为0表示没有安装):
bMouse = GetSystemMetrics(SM_MOUSEPRESENT);
确定鼠标键的个数(返回值为0表示为安装鼠标,返回为非0表示相应的键值):
dwButtons = GetSystemMetrics(SM_CMOUSEBUTTONS);
鼠标消息可分为客户区鼠标消息与非客户区鼠标消息,对于一个典型的窗口而言,可用于输出文档的区域被称之为窗口的客户区。
而标题栏,菜单栏,滚动条,工具栏,和边框等所占据的窗口区域被称之为非客户区域。
一般非客户区域的鼠标消息我们交予操作系统来处理,我们只需要将重点放在客户区域的鼠标消息处理上
客户区域的鼠标消息处理函数原型:
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
nFlags:表示鼠标按钮的状态以及鼠标事件发生时键盘上的按键状态,具体取值如下:
MK_LBUTTON
MK_RBUTTON
MK_MBUTTON
MK_SHIFT
MK_CONTROL
如果想知道某个键是否被按下,可以取以上值与nFlags按位做逻辑与运算,所得
结果若为非零值,则表示该键被按下,事例代码如下:
if (nFlags & MK_SHIFT)
{
AfxMessageBox("键盘上的shift键被按下");
}
else if (nFlags & MK_LBUTTON)
{
AfxMessageBox("鼠标左键被按下");
}
else if (nFlags & MK_RBUTTON)
{
AfxMessageBox("鼠标右键被按下");
}
else if (nFlags & MK_MBUTTON)
{
AfxMessageBox("鼠标中间被按下");
}
else if (nFlags & MK_CONTROL)
{
AfxMessageBox("键盘上的Control键被按下");
}
else
{
AfxMessageBox("鼠标处于释放状态");
}
point:表示鼠标光标热点的位置即设备坐标,是CPoint结构,成员x包含光标的水平坐标哪,
成员y包含坐标的垂直坐标,如果有需要可以将这些设备坐标转换为逻辑坐标
简单示例如下:
void CTestView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
char szText[MAX_PATH] = {0};
sprintf(szText, "横坐标:%d 纵坐标:%d",point.x,point.y);
AfxMessageBox(szText);
CView::OnLButtonDblClk(nFlags, point);
}
效果图:
响应鼠标跟随消息WM_MOUSEMOVE
void CTestView::OnMouseMove(UINT nFlags, CPoint point)
{
CClientDC* pDC = new CClientDC(this);
CRect theRect(point.x - 30, point.y - 20, point.x + 30,point.y + 20);
pDC->Rectangle(theRect);
CView::OnMouseMove(nFlags, point);
}
效果图:
设置鼠标的样式:
IDC_ARROW
IDC_WAIT
IDC_CROSS
IDC_IBEAM
IDC_UPARROW
IDC_SIZEWE
IDC_SIZENS
void CTestView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
HCURSOR hCursor = AfxGetApp()->LoadCursor(IDC_CURSOR1);
SetCursor(hCursor);
CView::OnLButtonDblClk(nFlags, point);
}
网址:鼠标相关 https://www.yuejiaxmz.com/news/view/933139
相关内容
电脑鼠标怎么修Pygame鼠标事件详解
电脑鼠标的使用方法
属鼠和属兔的合不合 属鼠的和什么属相最配、相克
鼠标该怎么拿才正确
鼠标的正确使用与日常维护
【鼠标键盘回收 服务/价格信息】
小皮筋拯救 “鼠标手”
鼠标滚轮终于不乱跳了,自己动手更换鼠标滚轮编码器 雷柏7100=================
鼠标自动移动软件: 鼠标自动移动软件:提升工作效率的神器