1,

编译error的话一般是却

#include <comdef.h>
#include <Windows.h>

Windows.h内会包含Windows.h,但是因为在stdafx.h中会智能创建WIN32_LEAN_AND_MEAN宏,会屏蔽comdef.h,这样就会导致声明缺失问题。

删除WIN32_LEAN_AND_MEAN宏或者手动添加包含comdef.h头文件就可以了。

2,

  1. #include <comdef.h>
  2. #include <Windows.h>
  3.  
  4. #include "GDIPlusB.h"
  5. #include <gdiplus.h>
  6. using namespace Gdiplus;
  7. #pragma comment(lib,"gdiplus.lib")
  8.  
  9. void CGDIPlusB::InitInstance()
  10. {
      //GDI+的初始化
  11. Gdiplus::GdiplusStartupInput gdiplusStartupInput;
  12. Gdiplus::GdiplusStartup(&m_gdiplusToken , &gdiplusStartupInput, NULL);
  13. }
  14. void CGDIPlusB::UnInstance()
  15. {
      //关闭GDI+
  16. Gdiplus::GdiplusShutdown(m_gdiplusToken);
  17. }

3,

  1. void CGDIPlusB::DrawAlphaPen( HDC* phdc )
  2. {
  3. COLORREF crBackClr = RGB( ,,);
  4. COLORREF crDark = RGB( , , );
  5. COLORREF crBright = RGB( ,,);
  6. Color GdiClrD,GdiClrB;//用于产生渐变效果;
  7. GdiClrD.SetFromCOLORREF(crDark);
  8. GdiClrB.SetFromCOLORREF(crBright);
  9.  
  10. int r,g,b,r1,g1,b1;//分别得到明色和暗色的R G B值
  11. r = GdiClrD.GetRed();
  12. g = GdiClrD.GetGreen();
  13. b = GdiClrD.GetBlue();
  14.  
  15. r1 = GdiClrB.GetRed();
  16. g1 = GdiClrB.GetGreen();
  17. b1 = GdiClrB.GetBlue();
  18.  
  19. int alpha = ;
  20.  
  21. //产生渐变的透明画刷
  22. Color GdiClrDark(alpha,r,g,b) ;
  23. Color GdiClrBright(alpha,r1,g1,b1) ;
  24.  
  25. Gdiplus::Point pt_begin , pt_end ;
  26. SetRect( &m_rc , , , + , + ) ;
  27. pt_begin.X = m_rc.left ;
  28. pt_begin.Y = m_rc.top ;
  29.  
  30. pt_end.X = m_rc.right ;
  31. pt_end.Y = m_rc.bottom ;
  32.  
  33. LinearGradientBrush linGrBrush( pt_begin , pt_end , GdiClrDark,GdiClrBright );
  34. Pen pen0(&linGrBrush, );
  35.  
  36. Graphics graphics( *phdc );
  37. graphics.DrawLine( &pen0 , pt_begin , pt_end ) ;
  38. graphics.ReleaseHDC( *phdc ) ;
  39.  
  40. }
  41. void CGDIPlusB::DrawImage( HDC* phdc )
  42. {
  43. TCHAR img[MAX_PATH];
  44. _stprintf( img,_T("E:\\liuhanGit\\liuhan_memUI\\memUI\\memUI_SKIN\\p6.png")) ;
  45. Image image( img );
  46. Graphics graphics( *phdc );
  47. graphics.DrawImage( &image, , );
  48. graphics.ReleaseHDC( *phdc ) ;
  49.  
  50. }
  51. void CGDIPlusB::DrawGradientBrush( HDC* phdc )
  52. {
  53. COLORREF crBackClr = RGB( ,,);
  54. COLORREF crDark = RGB( , , );
  55. COLORREF crBright = RGB( ,,);
  56. Color GdiClrD,GdiClrB;//用于产生渐变效果;
  57. GdiClrD.SetFromCOLORREF(crDark);
  58. GdiClrB.SetFromCOLORREF(crBright);
  59.  
  60. int r,g,b,r1,g1,b1;//分别得到明色和暗色的R G B值
  61. r = GdiClrD.GetRed();
  62. g = GdiClrD.GetGreen();
  63. b = GdiClrD.GetBlue();
  64.  
  65. r1 = GdiClrB.GetRed();
  66. g1 = GdiClrB.GetGreen();
  67. b1 = GdiClrB.GetBlue();
  68.  
  69. int alpha = ;
  70.  
  71. //产生渐变的透明画刷
  72. Color GdiClrDark(alpha,r,g,b) ;
  73. Color GdiClrBright(alpha,r1,g1,b1) ;
  74.  
  75. Gdiplus::Point pt_begin , pt_end ;
  76. SetRect( &m_rc , , , + , + ) ;
  77. pt_begin.X = m_rc.left ;
  78. pt_begin.Y = m_rc.top ;
  79.  
  80. pt_end.X = m_rc.right ;
  81. pt_end.Y = m_rc.bottom ;
  82.  
  83. Brush* bsh0 = new LinearGradientBrush( pt_begin , pt_end , GdiClrDark,GdiClrBright ) ;
  84. Graphics graphics( *phdc );
  85. graphics.FillRectangle( bsh0 , m_rc.left , m_rc.top , m_rc.right - m_rc.left , m_rc.bottom - m_rc.top ) ;
  86. delete bsh0 ;
  87. graphics.ReleaseHDC( *phdc ) ;
  88. }
  89.  
  90. void CGDIPlusB::DrawGradientBrush2( HDC* phdc )
  91. {
  92. Gdiplus::Point pt_begin , pt_end ;
  93. SetRect( &m_rc , , , + , + ) ;
  94. pt_begin.X = m_rc.left ;
  95. pt_begin.Y = m_rc.top ;
  96.  
  97. pt_end.X = m_rc.right ;
  98. pt_end.Y = m_rc.bottom ;
  99.  
  100. LinearGradientBrush linGrBrush( pt_begin , pt_end ,Color(,,,),Color(,,,));
  101. Color colors[] = {
  102. Color(, , , ), // red
  103. Color(, , , ), //yellow
  104. Color(, , , ), // blue
  105. Color(, , , )}; // green
  106. REAL positions[] = {
  107. 0.0f,
  108. 0.33f,
  109. 0.66f,
  110. 1.0f};
  111. linGrBrush.SetInterpolationColors(colors, positions,);
  112.  
  113. Graphics graphics( *phdc );
  114. graphics.FillRectangle( &linGrBrush , m_rc.left , m_rc.top , m_rc.right - m_rc.left , m_rc.bottom - m_rc.top ) ;
  115. graphics.ReleaseHDC( *phdc ) ;
  116. }

GDI+的更多相关文章

  1. 超全面的.NET GDI+图形图像编程教程

    本篇主题内容是.NET GDI+图形图像编程系列的教程,不要被这个滚动条吓到,为了查找方便,我没有分开写,上面加了目录了,而且很多都是源码和图片~ (*^_^*) 本人也为了学习深刻,另一方面也是为了 ...

  2. (转载)GDI+双缓冲

    双缓冲在GDI+里可以有效的提高描画效率.改善显示的质量. 下面的代码是一个最简单的双缓冲的模板.可以根据需要,做简单的修改即可. Bitmap CacheImage( [Width], [Heigh ...

  3. (转载)解决GDI闪烁

    一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁. 先来谈谈闪烁产生的原因 原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的 ...

  4. 通过GDI+绘制 验证码

    只为了记录下自己的学习历程,方便日后查看 现在开始言归正传,以下为其完整代码附上 using System; using System.Collections.Generic; using Syste ...

  5. 【VC++技术杂谈007】使用GDI+进行图片格式转换

    本文主要介绍如何使用GDI+对图片进行格式转换,可以转换的图片格式为bmp.jpg.png. 1.加载GDI+库 GDI+是GDI图形库的一个增强版本,提供了一系列Visual C++ API.为了使 ...

  6. C# GDI绘制矩形框,鼠标左键拖动可移动矩形框,滚轮放大缩小矩形框

    最近工作需要,要做一个矩形框,并且 用鼠标左键拖动矩形框移动其位置.网上查了一些感觉他们做的挺复杂的.我自己研究一天,做了一个比较简单的,发表出来供大家参考一下.如觉得简单,可路过,谢谢.哈哈. 先大 ...

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

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

  8. GDI+ 笔记

    1.GDI+模板 #include<windows.h> #include<GdiPlus.h> #include <time.h> #include <ma ...

  9. C# GDI+发生一般性错误(A generic error occurred in GDI+))

    解决思路: 1. 因为 .net GDI+ 是对底层 的封装. 所以可以尝试用 Marshal.GetLastWin32Error();函数获得底层错误代码. try{ image.Save(file ...

  10. GDI与GDI+ 贴图性能对比

    在做绘图相关工作,由于对显示绘制结果实时性有要求,筛选了GDI , 与GDI+ 贴图性能. 这里假设在内存中已绘制完成一张图片,现需求显示在控件上,同时,总是更新全部区域. GDI+ 实现 priva ...

随机推荐

  1. Codeforces Gym 100286B Blind Walk DFS

    Problem B. Blind WalkTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/cont ...

  2. [置顶] VC++界面编程之--自定义CEdit(编辑框)皮肤

    自定义编辑框是登陆界面经常用到的效果,所以我也模仿站酷网的素材做了个. 要想继承CCustomDraw来完全自绘CEdit控件,是不太可行的方案,因为一旦你完全重绘,那么你需要额外做以下几件事: 1. ...

  3. X64 Win7(win2008)连接SqlServer2005慢的解决办法

    问题描述:数据库版本:SQL SERVER 2005数据库安装环境: Win 2003 X64 客户端环境:Win 2008 x64连接工具:ODBC或ado.net测试连接时间:4-6秒 客户端环境 ...

  4. Github上最全的APICloud开源前端框架效果盘点(转)

    1.微信网站几分钟变身“原生 App” 微信推出了微信JS-SDK,使微信公共号可以直接调用微信原生的接口,具备部分原生应用的能力.微信JS-SDK的推出,将大大提高微信公共号的 用户体验,但是如果存 ...

  5. aspose.cells 模版

    aspose.cells 模版  http://www.cnblogs.com/whitewolf/archive/2011/03/21/Aspose_Cells_Template1.html

  6. 基础笔记(一)Java 集合

    集合日常用到的有List,Set,Map等等. List List常用的有2种,包括ArrayList与LinkedList.这两种List的主要区别在于底层的数据结构的差别.ArrayList是基于 ...

  7. 项目源码--Android应用商店源码

      下载源码   技术要点: 1.互联网应用 客户端框架 2.综合应用开发所 有技术 3.安装应用的管理 4. HTTP网络通信技 术 5.下载安装.评论 框架 6.使用.版本升级 等统计方案 7.源 ...

  8. Java_Spring MVC_Servlet

    Spring MVC 例子 http://www.cnblogs.com/liukemng/p/3724379.html 详解: http://jinnianshilongnian.iteye.com ...

  9. C++_归并排序

    //合并有序数组 //合并例子 void MemeryArray(int a[], int n, int b[],int m, int c[]) { int i,j,k; i=j=k=0; while ...

  10. MPEG简介 + 如何计算CBR 和VBR的MP3的播放时间

    1. 声明本文所写内容,多数整理自互联网,版权归原作者所有笔者知识有限,文中难免有误,欢迎批评指正,admin (at) crifan.com觉得此文对你有帮助,想要发邮件来感谢的,也欢迎哈,^_^欢 ...