注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

慵懒的乌龟

——若有,且珍惜~

 
 
 

日志

 
 

MFC添加背景图——StretchBlt使用心得  

2011-12-15 16:33:04|  分类: 技术类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
      最近应导师要求,做一个演示系统,需要有个较beautiful的界面,所以想着给MFC添加一个背景位图,但是被StretchBlt这个函数恶心了一下,做上去的位图总是会出现失真的情况,百思不得其解,后来网上搜罗了一下,发现StretchBlt这个函数的用法:
StretchDIBits(pDC->GetSafeHdc(),
  rect.left, 
  rect.top,
        rect.Width(),     //显示窗口宽度
  rect.Height(),     //显示窗口高度
  0,
  0,
  Width,     //图像宽度
  Height,     //图像高度
  m_pImageBuffer,   //图像缓冲区
  m_pBmpInfo,    //BMP图像描述信息
  DIB_RGB_COLORS,
  SRCCOPY
  );  
       这里涉及两组高宽:rect.width(),rect.height()和Width,Height弄的人糊里糊涂,我们仔细看下,其实rect.width(),rect.height()是分别代表你要在MFC中显示的目标矩形的宽和高,而Width,Height是你图像本身的宽和高。rect.left和rect.right不用说,是目标矩形起始的坐标。弄清这个基本就知道图像背景会被放到MFC矩形框中的什么地方,而显示的宽和高是多少了。这里如果你要现实的宽和高和图像本身的宽和高一致的话,那么就不会出现失真的情况了,当然你可以选择在MFC中放大或缩小显示,但是放大或缩小时,不要改变原图像的宽高比例,不然就很可能失真了,至少会出现别扭的拉伸。这些点确认后就可以随心所欲显示位图背景了!这里我给出我程序中的代码:
void C********Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// 使图标在工作区矩形中居中
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;

// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//CDialog::OnPaint();//这里必须注释
CPaintDC   dc(this);   
CRect   rect;   
GetClientRect(&rect);   
CDC   dcMem;   
dcMem.CreateCompatibleDC(&dc);   
CBitmap   bmpBackground;   
bmpBackground.LoadBitmap(IDB_BITMAP);   //IDB_BITMAP是背景位图对应的ID  
BITMAP   bitmap;   
bmpBackground.GetBitmap(&bitmap);
CBitmap   *pbmpOld=dcMem.SelectObject(&bmpBackground);  
dc.StretchBlt(15,20,bitmap.bmWidth,bitmap.bmHeight,&dcMem,0,0,
bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);//这里我让显示区域矩形宽高和图像宽高一致

}
}
  评论这张
 
阅读(2652)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017