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

xiaoxiao2021-02-28  146

一、创建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);//在编辑框显示鼠标位置信息 }

转载请注明原文地址: https://www.6miu.com/read-29071.html

最新回复(0)