MFC 图片控件图片加载以及鼠标移动事件和鼠标点击事件

首先展示一下效果!当鼠标移动到图片上绿色圆圈中时,鼠标由箭头变成手的形状!当鼠标点击某个圆圈时。该圆圈背景变成白色!

MFC 图片控件图片加载以及鼠标移动事件和鼠标点击事件_第1张图片MFC 图片控件图片加载以及鼠标移动事件和鼠标点击事件_第2张图片 


代码:

void CMenuBodyPosition::LoadImageFile(int iIndex)
{
 // 动态加载图片到Picture控件
 CBitmap bitmap;
 if (iIndex==1)
  bitmap.LoadBitmap(IDB_BITMAP_BODY1);  //加载图片,IDB_BITMAP_Testing为你要加入图片的ID
 else if (iIndex==2)
  bitmap.LoadBitmap(IDB_BITMAP_BODY2); 

 return;



void CMenuBodyPosition::OnMouseMove(UINT nFlags, CPoint point)
{
 if ((point.x>=592 && point.x<=689) && (point.y>=243 && point.y<=296))
  SetCursor(LoadCursor(NULL,IDC_HAND));
 else if ((point.x>=546 && point.x<=599) && (point.y>=314 && point.y<=411))
  SetCursor(LoadCursor(NULL,IDC_HAND));

 CDialog::OnMouseMove(nFlags, point);


void CMenuBodyPosition::OnLButtonDown(UINT nFlags, CPoint point)
{
 if ((point.x>=592 && point.x<=689) && (point.y>=243 && point.y<=296))
  LoadImageFile(1);
 else if ((point.x>=546 && point.x<=599) && (point.y>=314 && point.y<=411))
  LoadImageFile(2);

CDialog::OnLButtonDown(nFlags, point);


}


BOOL CMenuBodyPosition::PreTranslateMessage(MSG* pMsg)
{

 if (pMsg->message==WM_LBUTTONDOWN && GetDlgItem(IDC_PICTURE_BODY)->GetSafeHwnd()==pMsg->hwnd)
 {
  //在此传递点击部位在对话框中的坐标
  OnLButtonDown(MK_LBUTTON,pMsg->pt);
 }
 if(WM_MOUSEMOVE   ==   pMsg-> message)
 {
  if(pMsg-> hwnd   ==   GetDlgItem(IDC_PICTURE_BODY)-> GetSafeHwnd())
  {
   OnMouseMove(NULL,pMsg->pt);
  }
 }
 return CDialog::PreTranslateMessage(pMsg);
}



这里说明一下:

OnMouseMove(nFAges,point);

OnLButtonDown(nFages,point);

point:鼠标的X,Y坐标:该坐标为 鼠标距离截获该消息的窗口左上角的位置 是一个相对位置而不是在屏幕像素上的绝对位置。

nFlags
指示各种虚拟按键是否按下 ,此参数可以是任何下列值的组合:
MK_CONTROL当CTRL键按下时。
MK_LBUTTON当鼠标左键按下时。
MK_MBUTTON当鼠标中键按下时。
MK_RBUTTON当鼠标右键按下时.
MK_SHIFT当SHIFT按下时。











你可能感兴趣的:(VC_MFC)