VC6.0加载清晰的背景图片

        一般的,VC6.0若想更改窗体背景,需要先将bmp格式的背景图片导入到工程中,然后再设置为背景图片,但是这样有个限制,VC6.0不能导入超过256位的图片。如果要加载清晰的图片,就需要从本地磁盘中加载位图文件。下面将介绍如何设置超过256位的图片。

        首先我们以建立一个名为AddPic_001的工程为例。然后在CAddPic_001Dlg类声明中,定义一个CBitmap对象,CBitmap m_bmpBackground。然后在下面添加一个函数声明virtualbool LoadBmpPic(const CString strBmpPath, CBitmap &bmp)。

        在OnPaint()函数中添加代码:

void CAddPic_0101Dlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
	//	CDialog::OnPaint();
		CPaintDC dc(this);    //对话框的dc//CPaintDC是从CDC派生出来的。在构造时自动调用CWnd::BeginPaint,析构时调用CWnd::EndPaint。通常CPaintDC用来响应WM_PAINT消息。一般应用在OnPaint函数
		CDC dcMem;
		dcMem.CreateCompatibleDC(&dc);   //创建与对话框dc兼容的内存dc

		CRect rect;
		GetClientRect(&rect);//该函数获取窗口客户区的坐标。

		BITMAP bitMap;
		m_bmpBackground.GetBitmap(&bitMap);//好像是设置背景图

		CBitmap *pbmpOld=dcMem.SelectObject(&m_bmpBackground);  //将背景位图选入内存dc中

		dc.SetStretchBltMode(HALFTONE);//这句保证放缩后不失真
		dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);   //将内存dc中的位图拉伸显示在对话框的dc中
	//	dc.BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);
	}
}
        在OnInitDialog()函数中载入图片资源 LoadBmpPic("D:\\12.bmp",m_bmpBackground)。LoadBmpPic函数第一个参数是bmp图片所在的绝对路径。

        下面是LoadBmpPic函数的原型:

bool CAddPic_0101Dlg::LoadBmpPic(const CString strBmpPath, CBitmap &bmp)
{
 HBITMAP   bitmap;
 try
 {
	bmp.Detach();
	bitmap = (HBITMAP)::LoadImage(NULL,strBmpPath, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE|LR_DEFAULTSIZE);
	if (bmp.Attach(bitmap))
		return true;
 }
 catch(...)
 {
	 return false;
 }
 return true;
}
在win7下,只能加载bmp格式的图片。xp下可以加载jpg格式的。

原文地址:https://www.cnblogs.com/freeabyss/p/3187071.html