// 逻辑1:先从资源中读取背景资源,然后将绘图对象与DC绑定,通过绘图对象绘出背景
// 逻辑2:先从资源中读取背景资源,新建一个MEMDC,将绘图对象与MEMDC绑定,并且
// 通过绘图对象在内存中绘制图形, 最后将MEMDC中的数据复制给绘图DC绘图

Gdiplus::Image* m_pPngBg;

  1. BOOL G_ImageFromIDResource( UINT nID, LPCTSTR sTR,Gdiplus::Image *&pImg )
  2. {
  3. HINSTANCE hInst = AfxGetResourceHandle();
  4. HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),sTR); // type
  5. if (!hRsrc)
  6. return FALSE;
  7. // load resource into memory
  8. DWORD len = SizeofResource(hInst, hRsrc);
  9. BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
  10. if (!lpRsrc)
  11. return FALSE;
  12. // Allocate global memory on which to create stream
  13. HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
  14. BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
  15. memcpy(pmem,lpRsrc,len);
  16. GlobalUnlock(m_hMem);
  17. IStream* pstm;
  18. CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
  19. // load from stream
  20. pImg=Gdiplus::Image::FromStream(pstm);
  21. // free/release stuff
  22. pstm->Release();
  23. FreeResource(lpRsrc);
  24. GlobalFree(m_hMem);
  25. return TRUE;
  26. }

方法一:方便
G_ImageFromIDResource(IDB_PNG_MONEYSEL_SELECTED, _T("PNG"), m_pPngBg);
Gdiplus::Graphics graphics(pDC->m_hDC);
graphics.DrawImage(m_pPngBg, 0, 0,m_rcClient.Width(),m_rcClient.Height());

方法二:推荐

CRect rect;
GetWindowRect(&rect);

CDC memDC;
memDC.CreateCompatibleDC(pDC);

int nWidth=m_pPngBg->GetWidth();
int nHeight=m_pPngBg->GetHeight();

CBitmap bitMemMap;
bitMemMap.CreateCompatibleBitmap(pDC,nWidth,nHeight);
memDC.SelectObject(&bitMemMap);

Gdiplus::Graphics graphics(memDC.m_hDC); // Create a GDI+ graphics object
graphics.DrawImage(m_pPngBg, 0, 0,nWidth,nHeight);

pDC->BitBlt(0,0, rect.Width(),rect.Height(),&memDC, 0, 0,SRCCOPY);

bitMemMap.DeleteObject();
memDC.DeleteDC();

图形绘制处理逻辑VC的更多相关文章

  1. VC图形绘制双缓存的代码复用性讨论

    在前文中已经讨论了如何实现界面绘制双缓存的问题,前文网址如下: http://www.2cto.com/kf/201111/112429.html 双缓存的主要思路是:先把图形绘制到内存DC中,然后再 ...

  2. 图形绘制 Canvas Paint Path 详解

    图形绘制简介        Android中使用图形处理引擎,2D部分是android SDK内部自己提供,3D部分是用Open GL ES 1.0.大部分2D使用的api都在android.grap ...

  3. javascript制作公式编辑器,函数编辑器和图形绘制

    自己是电子信息方向的,因此总是需要处理大量的电路实验.电路数据和电路仿真处理,每次处理数据时候还需要同样的数据很多遍, 又需要关于电路的频率响应和时域响应情况,所以一直有做一个这样公式编辑器的打算了. ...

  4. MFC画图总结-DIB图形绘制

    參考文档: http://blog.csdn.net/hnust_xiehonghao/article/details/37652927 http://blog.sina.com.cn/s/blog_ ...

  5. QT 基本图形绘制

    QT 基本图形绘制 1.告诉绘制引擎一些东西 QPainter::Antialiasing 在可能的情况下,反锯齿       QPainter::TextAntialiasing 在可能的情况下,文 ...

  6. 一个由正则表达式引发的血案 vs2017使用rdlc实现批量打印 vs2017使用rdlc [asp.net core 源码分析] 01 - Session SignalR sql for xml path用法 MemCahe C# 操作Excel图形——绘制、读取、隐藏、删除图形 IOC,DIP,DI,IoC容器

    1. 血案由来 近期我在为Lazada卖家中心做一个自助注册的项目,其中的shop name校验规则较为复杂,要求:1. 英文字母大小写2. 数字3. 越南文4. 一些特殊字符,如“&”,“- ...

  7. 【Windows编程】系列第五篇:GDI图形绘制

    上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图.Windows的GDI函数包含数 ...

  8. 13个JavaScript图表(JS图表)图形绘制插件【转】

    现在网络上又有越来越多的免费的(JS 图表)JavaScript图表图形绘制插件.我之前给一家网站做过复杂的图形,我们用的是 highchart.在那段时间,没有很多可供选择的插件.但现在不同了,很容 ...

  9. 推荐12个最好的 JavaScript 图形绘制库

    众多周知,图形和图表要比文本更具表现力和说服力.图表是数据图形化的表示,通过形象的图表来展示数据,比如条形图,折线图,饼图等等.可视化图表可以帮助开发者更容易理解复杂的数据,提高生产的效率和 Web  ...

随机推荐

  1. Linux下Utuntu使用

    以前一直用Centos,在下面安装了Vmware Tools和Eclipse C++基本能使用,也遇到过一些问题.突然心血来潮,试试Utuntu,所以在实验室电脑虚拟机上装一下,安装过程很熟练了,参考 ...

  2. 读取配置文件包含properties和xml文件

    读取properties配置文件 /** * 读取配置文件 * @author ll-t150 */ public class Utils { private static Properties pr ...

  3. 先行发生原则(Happens-before)

    先行发生原则(Happens-Before)是判断数据是否存在竞争.线程是否安全的主要依据. 先行发生是Java内存,模型中定义的两项操作之间的偏序关系,如果操作A先行发生于操作B,那么操作A产生的影 ...

  4. DFRobot万物互联大赛第二轮

    前言 最近放在阳台的花草被啥东西给吃了,然后厨房挂在墙上的小虾米也不知道咋的被抓破吃光了(我怀疑是隔隔壁两条泰迪),所以打算做个简单的项目,教训一下偷吃贼.时间比较仓促,内容比较多,能力有比较有限,好 ...

  5. props default 数组(Array)/对象(Object)的默认值应当由一个工厂函数返回

    1.场景: Object: <!-- 步骤 --> <template> <div> <div class="m-cell"> &l ...

  6. openssl之BIO系列之22---Cipher类型的BIO

    Cipher类型BIO ---依据openssl doc\crypto\bio_f_cipher.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.net , ...

  7. centos7 安装rocketmq(quick start)

    Quick Start This quick start guide is a detailed instruction of setting up RocketMQ messaging system ...

  8. SAS中的自动变量

    Sas自动变量:由数据步语句自动创建的. _n_ :观测序号: _error_:错误信息变量; _numeric_ :所有数值变量: _character_:所有字符变量; _all_:所有变量; f ...

  9. 可以添加自定义的Select控件

    1.控件dom <select name="WebSiteTarget" id="WebSiteTarget" class="w1" ...

  10. Spring Data JPA 事务锁

    1.概述 在本快速教程中,我们将讨论在Spring Data JPA中为自定义查询方法和预定义存储库的CRUD方法启用事务锁, 我们还将查看不同的锁类型并设置事务锁超时. 2.锁类型 JPA定义了两种 ...