读书人

请教一下小弟我的鼠标左键弹起的消息

发布时间: 2012-04-27 11:57:44 作者: rapoo

请问一下,我的鼠标左键弹起的消息为什么不能响应啊?
各位大神好,我用PreTranslateMessage(MSG* pMsg)写了个消息处理函数,但是为什么鼠标弹起的消息不能响应呢?
就是鼠标弹起后,没有去执行鼠标弹起的处理函数,代码如下:
BOOL CNewStatic::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
CPoint point;
point.x=LOWORD(pMsg->lParam);
point.y=HIWORD(pMsg->lParam);
if(pMsg->message==WM_LBUTTONDOWN)
{
KEYDOWN=TRUE;
cvCopy(org,img);//为了备份现有文件
sprintf(temp,"(%d,%d)",point.x,point.y);
pre_pt = cvPoint(point.x,point.y);
cvPutText(img,temp, pre_pt, &font, cvScalar(0,0, 0, 255));
cvCircle( img, pre_pt, 3,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );
RRDrawPicToHDC(img);
cvCopy(img,tmp);
Sleep(100);
}
else if(pMsg->message==WM_MOUSEMOVE)
{

if(KEYDOWN==TRUE)
{
cvCopy(tmp,img);
sprintf(temp,"(%d,%d)",point.x,point.y);
cur_pt = cvPoint(point.x,point.y);
cvPutText(img,temp, cur_pt, &font, cvScalar(0,0, 0, 255));
cvRectangle(img, pre_pt, cur_pt, cvScalar(0,255,0,0), 1, 8, 0 );
RRDrawPicToHDC(img);
}
if(KEYDOWN==FALSE)
{
cvCopy(tmp,img);
sprintf(temp,"(%d,%d)",point.x,point.y);
cur_pt = cvPoint(point.x,point.y);
cvPutText(img,temp, cur_pt, &font, cvScalar(0,0, 0, 255));
////RRDrawPicToHDC(img);
}

}
else if(pMsg->message==WM_LBUTTONUP)
{
KEYDOWN=FALSE;
cvCopy(tmp,img);
sprintf(temp,"(%d,%d)",point.x,point.y);
cur_pt = cvPoint(point.x,point.y);
cvPutText(img,temp, cur_pt, &font, cvScalar(0,0, 0, 255));
cvCircle( img, cur_pt, 3,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );
cvRectangle( img, pre_pt, cur_pt, cvScalar(0,255,0,0), 1, 8, 0 );
RRDrawPicToHDC(img);
cvCopy(tmp,img);
int width=abs(pre_pt.x-cur_pt.x);
int height=abs(pre_pt.y-cur_pt.y);
aaa=width;//截取的图像宽度
bbb=height;//截取的图像高度
if(width==0 || height==0)
{
return 0;

}
dst=cvCreateImage(cvSize(width,height),org->depth,org->nChannels);
CvRect rect;
if(pre_pt.x<cur_pt.x && pre_pt.y<cur_pt.y)
{
rect=cvRect(pre_pt.x,pre_pt.y,width,height);
}
else if(pre_pt.x>cur_pt.x && pre_pt.y<cur_pt.y)
{
rect=cvRect(cur_pt.x,pre_pt.y,width,height);
}
else if(pre_pt.x>cur_pt.x && pre_pt.y>cur_pt.y)
{
rect=cvRect(cur_pt.x,cur_pt.y,width,height);
}
else if(pre_pt.x<cur_pt.x && pre_pt.y>cur_pt.y)
{
rect=cvRect(pre_pt.x,cur_pt.y,width,height);
}
cvSetImageROI(org,rect);
cvCopy(org,dst);
cvNamedWindow("sunlu",CV_WINDOW_AUTOSIZE);
cvShowImage("sunlu",dst);
cvResetImageROI(org);
cvSaveImage("D:\\第一次截取的图像.bmp",dst);
}
return CStatic::PreTranslateMessage(pMsg);


}


但是当我删掉鼠标移动消息之后就可以响应鼠标左键弹起消息,请问是什么原因啊》

[解决办法]
你直接添加WM_LBUTTONDOWN,WM_MOUSEMOVE这几个消息,然后在里面处理就可以了
[解决办法]
你在鼠标移动函数中逐一注释掉部分代码 看看是那句代码影响了鼠标弹起事件
[解决办法]

探讨

不好意思,请问一下鼠标左键按下时移动属于鼠标移动还是左键按下啊。还有这四种状态怎么判断啊1、鼠标未按下时移动2、鼠标按下时移动、3鼠标按下4、鼠标弹起

读书人网 >VC/MFC

热点推荐