您的位置:首页 > 其它

MFC 以图像大小打开并显示图像,鼠标左击显示像素坐标

2017-07-10 15:54 369 查看
一、创建MFC对话框,类名CDialogDlg,添加按钮IDC_BUTTON1,OnBnClickedButton1()函数如下:

CShow *dlg;
dlg = new CShow;
dlg->Create(IDD_SHOW_DLG); //创建非模态对话框
dlg->ShowWindow(SW_SHOW); //显示对话框


添加两个编辑框IDC_EDIT1、IDC_EDIT2。

二、资源视图里添加一个DIALOG对话框并为其添加一个类,类名为CShow。

添加一个PICTURE控件IDC_SHOWPIC。

在Show.h内添加public成员:

CImage image;


重写OnInitDialog()函数,如下:

// TODO:  在此添加额外的初始化
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
_T("Image files(*.png; *.jpg)|*.png;*.jpg|All files(*.*)|*.*||"), NULL);
dlg.m_ofn.lpstrTitle = _T("Open Image");
if( dlg.DoModal() != IDOK )
return FALSE;
CString Filepath = dlg.GetPathName();//打开并选择图像,获得选择图像的路径

image.Load(Filepath);//加载图片
CRect rect1(0,0,image.GetWidth(),image.GetHeight());
CRect rect2,rect3;
this->GetWindowRect(&rect2);
ScreenToClient(&rect2);
this->GetClientRect(&rect3);
rect1.left=rect2.left-rect3.left;
rect1.top=rect2.top-rect3.top;
rect1.right=rect2.right-rect3.right+rect1.right;
rect1.bottom=rect2.bottom-rect3.bottom+rect1.bottom;//获得非客户区的大小
//设置窗口大小(非客户区大小加上图像大小)和位置
SetWindowPos(NULL,0,0,rect1.Width(),rect1.Height(),SWP_NOZORDER|SWP_NOMOVE);
CenterWindow();//窗口居中
GetDlgItem(IDC_SHOWPIC)->MoveWindow(0,0,image.GetWidth(),image.GetHeight());//以图像大小设置picture控件大小


添加WM_PAINT消息,OnPaint()函数如下:

CRect rect2;
GetDlgItem(IDC_SHOWPIC)->GetClientRect(&rect2);//获得picture控件的位置信息
CDC *pDc = GetDlgItem(IDC_SHOWPIC)->GetDC();//获得pictrue控件的Dc
image.Draw(pDc->m_hDC,rect2);//把image画到picture控件上
ReleaseDC(pDc);//释放Dc


添加WM_LBUTTONDOWN消息,OnLButtonDown(UINT nFlags, CPoint point)函数如下:

CRect rect;
GetDlgItem(IDC_SHOWPIC)->GetClientRect(rect);//获取Picture控件的位置信息,存入rect中
if (rect.PtInRect(point))//判断point是否在rect内部
{
CDialogDlg *parent = (CDialogDlg*)GetParent();//获得父窗口指针
parent->SetDlgItemInt(IDC_EDIT1,point.x);
parent->SetDlgItemInt(IDC_EDIT2,point.y);//在编辑框显示鼠标位置信息
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: