一般的,VC6.0若想更改窗体背景,需要先将bmp格式的背景图片导入到工程中,然后再设置为背景图片,但是这样有个限制,VC6.0不能导入超过256位的图片。如果要加载清晰的图片,就需要从本地磁盘中加载位图文件。下面将介绍如何设置超过256位的图片。
首先我们以建立一个名为AddPic_001的工程为例。然后在CAddPic_001Dlg类声明中,定义一个CBitmap对象,CBitmap m_bmpBackground。然后在下面添加一个函数声明virtualbool LoadBmpPic(const CString strBmpPath, CBitmap &bmp)。
在OnPaint()函数中添加代码:
在OnInitDialog()函数中载入图片资源 LoadBmpPic("D:\\12.bmp",m_bmpBackground)。LoadBmpPic函数第一个参数是bmp图片所在的绝对路径。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); } }
下面是LoadBmpPic函数的原型:
在win7下,只能加载bmp格式的图片。xp下可以加载jpg格式的。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; }
转载于:https://www.cnblogs.com/freeabyss/archive/2013/01/01/3187071.html