首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

请教一下,小弟我的鼠标左键弹起的消息为什么不能响应啊

2012-04-27 
请问一下,我的鼠标左键弹起的消息为什么不能响应啊?各位大神好,我用PreTranslateMessage(MSG* pMsg)写了个

请问一下,我的鼠标左键弹起的消息为什么不能响应啊?
各位大神好,我用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、鼠标弹起

热点排行