zoukankan      html  css  js  c++  java
  • 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格式的。

  • 相关阅读:
    树莓派也跑Docker和.NET Core
    使用iSCSI协议挂载网络磁盘,电脑瞬间扩大一个T的容量!
    Azure DevOps Server (TFS)免费吗?
    明确架构目标
    MMN实用架构过程概览
    设计恰如其分的架构
    对象的自治和行为的扩展与适配
    Message Chains与Fluent Interface
    如何减少代码的量
    《软件框架设计的艺术》书评
  • 原文地址:https://www.cnblogs.com/freeabyss/p/3187071.html
Copyright © 2011-2022 走看看