mfc中通过触发List Box 控件来显示图片

帮小学弟写的一个mfc的小程序,比较简单。


1.触发List Bo控件的左键单击事件

void Ctest_pictureDlg::OnLbnDblclkList1()
{
	// TODO:  在此添加控件通知处理程序代码

	int nIndex = m_listBox.GetCurSel();

	CString BmpName;

	CString PicInfo;
		
	switch (nIndex)
	{
	case 0:
		BmpName = "0.bmp";
		PicInfo = "第0石英";
		break;
	case 1:
		BmpName = "1.bmp";
		PicInfo = "第1石英";
		break;
	case 2:
		BmpName = "2.bmp";
		PicInfo = "第2石英";
		break;
	case 3:
		BmpName = "3.bmp";
		PicInfo = "第3石英";
		break;
	case 4:
		BmpName = "4.bmp";
		PicInfo = "第4石英";
		break;
	case 5:
		BmpName = "5.bmp";
		PicInfo = "第5石英";
		break;
	default:
		break;
	}

	ShowPicture(BmpName);

	ShowPictureInfo(PicInfo);
}

2.读取图片的方法比较特别,可以适应static控件的大小。

参考:http://blog.csdn.net/eastmount/article/details/26404733

void Ctest_pictureDlg::ShowPicture(CString BmpName)
{
	//定义变量存储图片信息  
	BITMAPINFO *pBmpInfo;       //记录图像细节  
	BYTE *pBmpData;             //图像数据  
	BITMAPFILEHEADER bmpHeader; //文件头  
	BITMAPINFOHEADER bmpInfo;   //信息头  
	CFile bmpFile;              //记录打开文件  

	//以只读的方式打开文件 读取bmp图片各部分 bmp文件头 信息 数据  
	if (!bmpFile.Open(BmpName, CFile::modeRead | CFile::typeBinary))
	{
		MessageBox( _T("Picture not found!") , _T("Error") ,NULL );
		return;
	}

	if (bmpFile.Read(&bmpHeader, sizeof(BITMAPFILEHEADER)) != sizeof(BITMAPFILEHEADER))
		return;
	if (bmpFile.Read(&bmpInfo, sizeof(BITMAPINFOHEADER)) != sizeof(BITMAPINFOHEADER))
		return;
	pBmpInfo = (BITMAPINFO *)new char[sizeof(BITMAPINFOHEADER)];
	//为图像数据申请空间  
	memcpy(pBmpInfo, &bmpInfo, sizeof(BITMAPINFOHEADER));
	DWORD dataBytes = bmpHeader.bfSize - bmpHeader.bfOffBits;
	pBmpData = (BYTE*)new char[dataBytes];
	bmpFile.Read(pBmpData, dataBytes);
	bmpFile.Close();

	//显示图像  
	CWnd *pWnd = GetDlgItem(IDC_STATIC_Pic); //获得pictrue控件窗口的句柄  
	CRect rect;
	pWnd->GetClientRect(&rect); //获得pictrue控件所在的矩形区域  
	CDC *pDC = pWnd->GetDC(); //获得pictrue控件的DC  
	pDC->SetStretchBltMode(COLORONCOLOR);
	StretchDIBits(pDC->GetSafeHdc(), 0, 0, rect.Width(), rect.Height(), 0, 0,
		bmpInfo.biWidth, bmpInfo.biHeight, pBmpData, pBmpInfo, DIB_RGB_COLORS, SRCCOPY);
}

3.字体控制代码

参考:http://www.cppblog.com/mzty/archive/2006/11/13/15131.html

http://msdn.microsoft.com/en-us/library/windows/desktop/dd183499%28v=vs.85%29.aspx

void Ctest_pictureDlg::OnLbnDblclkListFont()
{
	// TODO:  在此添加控件通知处理程序代码

	int nIndex = m_fontList.GetCurSel();

	CString FontType;

	switch (nIndex)
	{
	case 0:
		FontType = _T("Arial");
			break;
	case 1:
		FontType = _T("黑体");
			break;
	case 2:
		FontType = _T("宋体");
		break;
	case 3:
		FontType = _T("微软雅黑");
		break;
	case 4:
		FontType = _T("仿宋");
		break;
	case 5:
		FontType = _T("楷体");
		break;
	default:
		break;
	}

	MySetFont(FontType);
}

void Ctest_pictureDlg::MySetFont(CString FontType)
{
	CFont * f;
	f = new CFont;
	f->CreateFont(16, // nHeight 
		0, // nWidth 
		0, // nEscapement 
		0, // nOrientation 
		FW_BOLD, // nWeight 
		FALSE, // bItalic 
		FALSE, // bUnderline 
		0, // cStrikeOut 
		DEFAULT_CHARSET,//CHINESEBIG5_CHARSET,//ANSI_CHARSET, // nCharSet 
		OUT_DEFAULT_PRECIS, // nOutPrecision 
		CLIP_DEFAULT_PRECIS, // nClipPrecision 
		DEFAULT_QUALITY, // nQuality 
		DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily 
		FontType.GetBuffer(FontType.GetLength() )); // lpszFac 

	GetDlgItem(IDC_STATIC_PICINFO)->SetFont(f);

	m_listBox.SetFont(f);
	m_fontList.SetFont(f);

}


List Box控件操作参考:http://blog.sina.com.cn/s/blog_6ca43ae701019h8k.html

http://blog.csdn.net/joseph_happy/article/details/598267

static控件参考:

http://www.cnblogs.com/pfa2008/archive/2010/01/25/1655947.html

http://www.cnblogs.com/pfa2008/archive/2010/01/25/1655947.html




猜你喜欢

转载自blog.csdn.net/bobopeng/article/details/40835833
Box