视图类内 在CListCtrl控件中双击缩略图弹出大图

1新建一个对话框,用来显示图片

在头文件ShowPicDialog.h中添加

public:
	afx_msg void OnPaint();
	virtual BOOL OnInitDialog();
public:
	TCHAR* path;//要显示图片的路径
	CImage m_pimgage;


在ShowPicDialog.cpp中添加

void ShowPicDialog::OnPaint()
{
	CRect rc;
	GetClientRect(rc);
	CPaintDC dc(this); // device context for painting
	dc.SetStretchBltMode(HALFTONE);
	HDC hDC = dc.GetSafeHdc();
	m_pimgage.Draw(hDC, rc);
}


BOOL ShowPicDialog::OnInitDialog()
{
	m_pimgage.Load(path);//获取图像对象
	int img_width = m_pimgage.GetWidth();
	int img_height = m_pimgage.GetHeight();
	double width_height_rate = (double)img_width/(double)img_height;
	int max_width_height = max(img_height,img_width);
	if(max_width_height > 800){
		if(img_height> img_width)
		{		
			img_width  = (int)(img_width*800/(double)img_height); 
			img_height = 800;
		}
		else
		{
			img_height = (int)(img_height*800/(double)img_width);
			img_width = 800;
		}
	}

	SetWindowPos(NULL, 100, 100, img_width, img_height, SWP_SHOWWINDOW);
	return TRUE;
}


 

2 添加双击响应函数(视图类头文件为ListDemoView.h)

在ListDemoView.h中添加

afx_msg void OnItemClickListctrl(NMHDR* pNMHDR, LRESULT* pResult);//处理双击问题


在ListDemoView.cpp中添加

BEGIN_MESSAGE_MAP(CListDemoView, CView)
	......
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_DIVISION,   OnItemClickListctrl)//处理item双击问题
END_MESSAGE_MAP()
.......
void CListDemoView::OnItemClickListctrl(NMHDR* pNMHDR, LRESULT* pResult) //处理item双击事件
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	if(pNMListView->uChanged==LVIF_STATE)
	{
		if(pNMListView->uNewState & LVIS_SELECTED)
		{
			int nItem=pNMListView->iItem;//获取点中的项目编号
			CString imagepath_t;
			imagepath_t = pathset[nItem].c_str();//所有的图片绝对路径存放在vector<string>pathset中,此处为找到相应路径 
			TCHAR* imagepath = new TCHAR[50];
			imagepath = imagepath_t.GetBuffer(imagepath_t.GetLength());//cstring convert to tchar*
			imagepath_t.ReleaseBuffer();

			ShowPicDialog Spic;//新建用来显示图片的对话框对象
			Spic.path = imagepath;
                 		Spic.DoModal();
	        }
	}

}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值