您的位置:首页 > 其它

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

2013-01-01 16:54 183 查看

一般的,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格式的。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: