基于对话框显示,动态显示jpg.bmp等图片,并获取鼠标移动的坐标值及rgb值

来源:互联网 发布:windows开发语言 编辑:程序博客网 时间:2024/04/30 19:19
1.添加一个picture控件,关联变量m_picture.定义一个全局变量,CString m_path.

2.添加一个打开jpg图片的按钮,并响应其按钮事件

执行代码如下:

void CimageloadDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CFileDialog cfd(true,_T(".jpg"),NULL,OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,_T("Executable   Files   (*.jpg)|*.jpg|All   Files   (*.*)|*.*||"),this);     //选项图片的约定
if(cfd.DoModal()!=IDOK)        //判断是否获得图片

return;
}
m_path = cfd.GetPathName();    //获得图片路径
UpdateData(false);             //更新路径公共变量

ShowPicture();                 //调用显示图片函数
//OnOK();
}




添加函数显示图片的函数


void CimageloadDlg::ShowPicture(void)


{
if(m_path=="")        //判断图片路径是否存在
{
return;
}
//AfxMessageBox(_T("读取到图片路径"));
CRect rect;
m_picture.GetClientRect(&rect);     //m_picture为Picture Control控件变量,获得控件的区域对象


CImage image;       //使用图片类
image.Load(m_path);   //装载路径下图片信息到图片类
CDC* pDC = m_picture.GetWindowDC();    //获得显示控件的DC
     pDC->SetStretchBltMode(STRETCH_HALFTONE);
image.Draw( pDC -> m_hDC,rect);      //图片类的图片绘制Draw函数
ReleaseDC(pDC);
}


在OnPaint添加显示图片的函数,当窗口发生重绘时,图片也重绘显示

void CimageloadDlg::OnPaint()
{ ShowPicture(); 
}


接下来实现鼠标移动,在控件上显示其坐标点及rgb值的功能
void CimageloadDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CString str1;
CRect rect_ctr;  
(GetDlgItem(IDC_SHOW))->GetWindowRect(&rect_ctr); //获取Picture控件相对屏幕左上角的坐标,  

ScreenToClient(rect_ctr);//获取Picture控件相对对话框客户区左上角的坐标  
point.x -=  rect_ctr.left;//point获取的是鼠标相对对话框客户区左上角的坐标,减去rect_ctr.left和  
point.y -=  rect_ctr.top;//rect_ctr.top后,即为鼠标相对Picture控件左上角的坐标


CString str;
CString strColor;
CDC * hDC = GetDC();
COLORREF rgb;


rgb=hDC->GetPixel( point);   
int pixelR=GetRValue(rgb);
int pixelG=GetGValue(rgb);
int pixelB=GetBValue(rgb);
CString strX,strY,strR,strG,strB;
strR.Format("R=%d ",pixelR);
strG.Format("G=%d ",pixelG);
strB.Format("B=%d ",pixelB);


str+=strR;
str+=strG;
str+=strB;
//UpdateData(FALSE);
//(this->GetDlgItem(IDC_SHOW)) ->SetDlgItemText(IDC_EDIT1,pointshow);
rgbshow=str;


if(m_path!="")
{
if ( point.x>(rect_ctr.right-rect_ctr.left) || point.y>(rect_ctr.bottom-rect_ctr.top )  
|| point.x<0 || point.y<0 )  
{
// str1.Format("x=%d ,i=%d",point.x,i); 
pointshow.Empty();
rgbshow.Empty();
          SetDlgItemText(IDC_EDIT1,pointshow);
(this->GetDlgItem(IDC_EDIT2)) ->SetWindowText(rgbshow);


}


else 
{
str1.Format("x=%d  ,y=%d",point.x,point.y); 
pointshow=str1;
SetDlgItemText(IDC_EDIT1,pointshow);





//SetDlgItemText(IDC_EDIT2,rgbshow);
UpdateData(FALSE);
(this->GetDlgItem(IDC_EDIT2)) ->SetWindowText(rgbshow);
}
}

0 0