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

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




  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值