加载中…
个人资料
jh_saya
jh_saya
  • 博客等级:
  • 博客积分:0
  • 博客访问:29,060
  • 关注人气:7
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

GDI编程1(画笔/画刷/文本/位图)

(2012-03-14 01:36:57)
标签:

主程序文件

头文件

资源文件

应用项目

起始点

分类: GDI/GDI+/DX图像学

新建:Min32应用项目

项目名:Game

stdafx.h 标头文件,引用整个项目所需的头文件.

Game.cpp 主程序文件,包含整个项目的主程序WinMain.

Game.rc 资源文件,定义了整个项目所使用的资源.

 

构成主程序Game.cpp中几个重要的函数:

WinMain 程序起始点

InitInstance 建立及显示窗口的初始化函数

CreateWindow 注册窗口类别

WndProc 处理程序消息

--------------------------------------------------------------------------------------------------

GDI(Graphics Device Interface)图形设备接口,负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出.

--------------------------------------------------------------------------------------------------

DC(Device Context)设备内容,在一个图形输出设备上绘图时,必须获得一个设备内容(DC)的句柄.将句柄传回给程序时,Windows就给了您使用设备的权限.然后您在GDI函数中将这个句柄作为一个参数,向Windows标识您想在其上进行绘图的设备.

  1. case WM_PAINT:
  2.     hdc = BeginPaint(hWnd, &ps);
  3.     // ...
  4.     EndPaint(hWnd, &ps);
  5.     break;

WM_PAINT(窗口重绘消息)时,

调用BeginPaint()函数开始窗口重绘动作(并返回一个DC的句柄),

调用EndPaint()函数结束绘图动作.

 

在处理WM_PAINT消息之外的地方,取得DC句柄的函数如下:

  1. HDC GetDC(HWND hWnd);  // 取得DC句柄(参数是窗口的句柄)

调用GetDC()函数取得DC句柄后,当不使用时必须将它释放,否则其他应用程序无法使用,释放函数如下:

  1. int ReleaseDC(HWND hWnd, HDC hdc);  // 释放DC(释放成功返回"1",否则返回"0")

--------------------------------------------------------------------------------------------------

画笔与画刷(Pen & Brush)

创建一个画笔画一条线例子:

 

创建画笔的函数如下:

  1. HPEN CreatePen(int iStyle, int cWidth, COLORREF color);

iStyle:指定画笔样式,有如下样式:

    PS_SOLID

  画笔画出的是实线

  PS_DASH

  画笔画出的是虚线(cWidth必须是1)

  PS_DOT

  画笔画出的是点线(cWidth必须是1)

  PS_DASHDOT

  画笔画出的是点划线(cWidth必须是1)

  PS_DASHDOTDOT

  画笔画出的是点-点-划线(cWidth必须是1)

  PS_NULL

  画笔不能画图

  PS_INSIDEFRAME

  画笔在由椭圆,矩形,圆角矩形,饼图以及弦等生成的封闭对象框中画图.如指定的准确RGB颜色不存在,就进行抖动处理.

创建具有指定颜色的逻辑画刷的函数如下:

  1. HBRUSH CreateSolidBrush(COLORREF crColor);

创建具有指定阴影模式和颜色的逻辑画刷的函数如下:

  1. HBRUSH CreateHatchBrush(int fnStyle, COLORREF clrref);

选择对象到指定DC中,该新对象替换先前的相同类型的对象.函数如下:

  1. HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj);

hgdiobj:被选择的对象的句柄,该指定对象必须由如下的函数创建:

    位图:CreateBitmap, CreateBitmapIndirect, CreateCompatible Bitmap, CreateDIBitmap, CreateDIBsection.

  画刷:CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush.

  字体:CreateFont, CreateFontIndirect.

  笔:CreatePen, CreatePenIndirect.

  区域:CombineRgn, CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreateRectRgn, CreateRectRgnIndirect.

 

将当前绘图位置移动到某个具体的点(同时也可获得之前位置的坐标LPPOINT).函数如下:

  1. BOOL MoveToEx(HDC hdc, int x, int y, LPPOINT lpPoint);

用当前画笔画一条线,从当前位置连到一个指定的点.函数如下:

  1. BOOL LineTo(HDC hdc, int x, int y);

画一个距型(长方形),用当前的画笔画矩形轮廓,用当前画刷进行填充.函数如下:

  1. BOOL Rectangle(HDC hdc, int left, int top, int right, int bottom);

--------------------------------------------------------------------------------------------------

文本(Text)

例子:

  1. void Textshow(HDC hdc, LPARAM lParam)
  2. {
  3.     int x = LOWORD(lParam);  // LOWORD函数取鼠标x坐标值(低位字节)
  4.     int y = HIWORD(lParam);  // HIWORD函数取鼠标y坐标值(高位字节)
  5.     SetTextColor(hdc, RGB(255, 0, 0));
  6.     TextOut(hdc, x, y, TEXT("鼠标位置"), 4);
  7. }

COLORREF SetTextColor(HDC hdc, COLORREF color);  // 设置指定设备环境(HDC)的字体颜色

用当前选择的字体,背景颜色和正文颜色将一个字符串写到指定位置的函数如下:

  1. BOOL TextOut(
  2.   HDC hdc,           // 设备描述表句柄
  3.   int nXStart,       // 字符串的开始位置 x坐标
  4.   int nYStart,       // 字符串的开始位置 y坐标
  5.   LPCTSTR lpString,  // 字符串
  6.   int cbString       // 字符串中字符的个数
  7. );

--------------------------------------------------------------------------------------------------

多边形(Polygon)

用当前画笔画多边形,用当前的画刷填充封闭多边形.函数如下:

Polygon       // 绘制封闭多边形

PolyLine      // 绘制多边线条

PolylineTo    // 以当前画笔所在位置绘制多边线条

PolyPolygon   // 绘制多个封闭多边形

PolyPolyline  // 绘制多个多边线条

  1. BOOL Polygon(
  2.     HDC hdc,
  3.     CONST POINT *lpPoints,  // POINT点结构数组的指针,数组每个元素是一个点坐标(x,y)
  4.     int nCount              // 多边形点数,此值必须大于等于2
  5. );

--------------------------------------------------------------------------------------------------

封闭圆形

用当前画笔画椭圆,用当前的画刷填充椭圆.函数如下:

  1. BOOL Ellipse(HDC hdc, int left, int top, int right, int bottom);

圆角矩形函数:

  1. BOOL RoundRect(HDC hdc, int left, int top, int right, int bottom, int width, int height);

扇形函数:

  1. BOOL Pie(HDC hdc,int left,int top,int right,int bottom, int xr1, int yr1, int xr2, int yr2);

弓形函数:

  1. BOOL Chord(HDC hdc, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);

--------------------------------------------------------------------------------------------------

位图(Bitmap)

将位图文件加载到绘制窗口中的4个步骤:

  1. 从文件中加载位图对象.
  2. 建立一个与窗口DC兼容的内存DC.
  3. 内存DC使用步骤1所建立的位图对象.
  4. 将内存DC的内容粘贴到窗口DC中,完成显像的操作.

加载位图函数如下:

  1. HANDLE LoadImage(
  2.     HINSTANCE hInst, // 包含位图所在实体,加载位图在硬盘或资源文件则设为"NULL"
  3.     LPCTSTR name,    // 加载位图所在路径与文件名或者资源名称
  4.     UINT type,       // 加载位图的类型
  5.     int cx,          // 位图加载的宽度,单位为像素
  6.     int cy,          // 位图加载的高度,单位为像素
  7.     UINT fuLoad      // 加载方式,若从文件加载,则设为"LR_LOADFROMFILE"
  8. );

type:

    IMAGE_BITMAP :装载位图,扩展名为".bmp"

    IMAGE_CURSOR :装载光标,扩展名为".cur"

    IMAGE_ICON   :装载图标,扩展名为".ico"

建立与窗口DC兼容的内存DC函数如下:

  1. HDC CreateCompatibleDC(HDC hdc);

跟窗口DC一样使用后也必须进行释放操作,释放内存DC函数如下:

  1. HDC DeleteDC(HDC hdc);   // 释放的hdc为内存DC不是窗口DC

选用位图对象

  1. HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj);

贴图:

  1. BOOL BitBlt(
  2. HDC hdc,        // 目标DC
  3. int x,          // 目标DC X 坐标
  4. int y,          // 目标DC Y 坐标
  5. int cx,         // 贴到目标DC的宽度
  6. int cy,         // 贴到目标DC的高度
  7. HDC hdcSrc,     // 来源DC
  8. int x1,         // 来源DC X 坐标
  9. int y1,         // 来源DC Y 坐标
  10. DWORD rop       // 贴图方式
  11. );

rop:

    BLACKNESS:表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域(对缺省的物理调色板而言,该颜色为黑色).

  DSTINVERT:表示使目标矩形区域颜色取反。

  MERGECOPY:表示使用布尔型的AND(与)操作符将源矩形区域的颜色与特定模式组合一起.

  MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并.

  NOTSRCCOPY:将源矩形区域颜色取反,于拷贝到目标矩形区域.

  NOTSRCERASE:使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反.

  PATCOPY:将特定的模式拷贝到目标位图上.

  PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并.然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并.

  PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并.

  SRCAND:通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并.

  SRCCOPY:将源矩形区域直接拷贝到目标矩形区域.

  SRCERASE:通过使用AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并.

  SRCINVERT:通过使用布尔型的XOR(异或)操作符将源和目标矩形区域的颜色合并.

  SRCPAINT:通过使用布尔型的OR(或)操作符将源和目标矩形区域的颜色合并.

  WHITENESS:使用与物理调色板中索引1有关的颜色填充目标矩形区域.(对于缺省物理调色板来说,这个颜色就是白色).

显示一张图片例子:

  1. void bmp(HDC hdc)
  2. {
  3.     HDC mdc;                        // 声明内存DC与位图对象
  4.     HBITMAP hbmp;
  5.     mdc = CreateCompatibleDC(hdc);  // 创建DC与位图
  6.     hbmp = (HBITMAP)LoadImage(NULL, TEXT("bj.bmp"), IMAGE_BITMAP, 640, 480, LR_LOADFROMFILE);
  7.     SelectObject(mdc, hbmp);        // 选择位图对象到内存DC中
  8.     BitBlt(hdc, 0, 0, 640, 480, mdc, 0, 0, SRCCOPY);  // 内存DC的位图在窗口DC显示
  9.     DeleteDC(mdc);                  // 释放内存DC与位图对象
  10.     DeleteObject(hbmp);
  11. }

--------------------------------------------------------------------------------------------------

透明效果

位图是由一个四方矩形来存储的,但很多物体并不是四方矩形的,例如显示四方矩形人物位图时一般人物实体以外的地方就需要透明处理.可以由"贴图方式"来完成这项工作.

位图RGB(255,255,255)颜色二进制为全"1"(白色).

位图RGB(  0,  0,  0)颜色二进制为全"0"(黑色).

建立一张实体部分为黑色,透明部分为白色的屏蔽图 ,以"与"(SRCAND)运算跟背景图合并显示.

屏蔽图白色部分与背景图"与"运算后背景图不变,黑色部分与背景图"与"运算后背景图变为黑色.

然后建立一张透明部分为黑色的人物图,以"或"(SRCPAINT)运算跟背景图合并显示.

人物图黑色部分与背景图"或"运算后背景图不变,实体部分与背景图"或"运算后背景图变为实体.

例子:

  1. void bmp2(HDC hdc)
  2. {
  3.     HDC mdc;                        // 声明内存DC与位图对象
  4.     HBITMAP hbmp;
  5.     HBITMAP hbmp1,hbmp2;
  6.     mdc = CreateCompatibleDC(hdc);  // 创建DC与位图
  7.     hbmp = (HBITMAP)LoadImage(NULL, TEXT("bj.bmp"), IMAGE_BITMAP, 640, 480, LR_LOADFROMFILE);
  8.     hbmp1 = (HBITMAP)LoadImage(NULL, TEXT("屏蔽.bmp"), IMAGE_BITMAP, 5, 10, LR_LOADFROMFILE);
  9.     hbmp2 = (HBITMAP)LoadImage(NULL, TEXT("人物.bmp"), IMAGE_BITMAP, 5, 10, LR_LOADFROMFILE);
  10.     SelectObject(mdc, hbmp);        // 选择位图对象到内存DC中
  11.     BitBlt(hdc, 0, 0, 640, 480, mdc, 0, 0, SRCCOPY);  // 内存DC的位图在窗口DC显示
  12.     SelectObject(mdc, hbmp1);
  13.     BitBlt(hdc, 0, 0, 5, 10, mdc, 0, 0, SRCAND);      // "与"运算合并图片
  14.     SelectObject(mdc, hbmp2);
  15.     BitBlt(hdc, 0, 0, 5, 10, mdc, 0, 0, SRCPAINT);    // "或"运算合并图片
  16.     DeleteDC(mdc);                  // 释放内存DC与位图对象
  17.     DeleteObject(hbmp);
  18.     DeleteObject(hbmp1);
  19.     DeleteObject(hbmp2);
  20. }

15种合成方式图片阅览地址: 

http://photo.blog.sina.com.cn/photo/7c773cc5gbb85623f84ae#pic

--------------------------------------------------------------------------------------------------

半透明效果

半透明效果就是前景图与背景图像素颜色的混合.

一张位图是由许多像素组成的,每一个像素中都包含红(R),绿(G),蓝(B)三原色的色彩值,由这三种原色值来决定该像素的色彩.

前景图与背景图彼此对应像素的颜色依某一比例来进行调配,这个比例就叫做"不透明度".

加载位图后,先取得位图结构.函数如下:

  1. int GetObject(
  2. HANDLE h,    // GDI对象
  3. int c,       // 结构大小
  4. LPVOID pv    // 结构变量
  5. );

 例子:

  1. HBITMAP hbmp2;
  2. BITMAP bmp2;      // 要取得的对象为位图,所以定义一个BITMAP结构体
  3. hbmp2 = (HBITMAP)LoadImage(NULL, TEXT("人物.bmp"), IMAGE_BITMAP, 5, 10, LR_LOADFROMFILE);
  4. GetObject(hbmp2, sizeof(BITMAP), &bmp2);  // 从位图对象取得位图结构数据给位图结构体

取得位图的结构后,建立一个暂存数组准备存储位图中所有像素的颜色值.这个暂存数组的大小是由BITMAP结构体中的数据成员bmHeight与bmWidthBytes信息来决定的,因此必须利用指针来动态建立.例子如下:

  1. unsigned char *px = new unsigned char [bmp2.bmHeight * bmp2.bmWidthBytes];

unsigned char类型大小是1Byte,所以这个数组每个元素大小为1Byte(8bits).以一张24bits色彩的位图来说,每个像素是以24bits来表示颜色的,其中红(R),绿(G),蓝(B)三原色各占8bits,1个像素占3个数组元素.

建立暂存数组后,把位图所有颜色值存储到数组中,函数如下:

  1. LONG GetBitmapBits(
  2. HBITMAP hbit,   // 位图对象
  3. LONG cb,        // 要取得的Byte数
  4. LPVOID lpvBits  // 存储的数组指针
  5. );

 例子:

  1. GetBitmapBits(hbmp2, bmp2.bmHeight * bmp2.bmWidthBytes, px);

然后根据不透明度设定半透明区域内每个像素的颜色,在最后的范例中详细说明.

最后根据数组内容重设位图颜色,函数如下:

  1. LONG SetBitmapBits(
  2. HBITMAP hbm,        // 位图对象
  3. DWORD cb,           // 颜色数组大小
  4. CONST VOID *pvBits  // 数组指针
  5. );

 例子:

  1. SetBitmapBits(hbmp2, bmp2.bmHeight * bmp2.bmWidthBytes, px2);

 半透明效果范例:

  1. void bmp2(HDC hdc)
  2. {
  3.     HDC mdc;                       // 内存DC
  4.     HBITMAP hbmp,hbmp2;            // 位图对象
  5.     BITMAP bmp,bmp2;               // 位图结构
  6.     unsigned char *px,*px2;        // 暂存数组
  7.     mdc = CreateCompatibleDC(hdc);
  8.     hbmp = (HBITMAP)LoadImage(NULL, TEXT("bj.bmp"), IMAGE_BITMAP, 640, 480, LR_LOADFROMFILE);
  9.     GetObject(hbmp, sizeof(BITMAP), &bmp);
  10.     if(bmp.bmBitsPixel != 32 && bmp.bmBitsPixel != 24)
  11.     {
  12.         MessageBox(NULL, TEXT("此程序只能在32bit或24bit显示模式中运行"), TEXT("警告"), 0);
  13.         return;
  14.     }
  15.     px = new unsigned char [bmp.bmHeight * bmp.bmWidthBytes];
  16.     GetBitmapBits(hbmp, bmp.bmHeight * bmp.bmWidthBytes, px);
  17.     hbmp2 = (HBITMAP)LoadImage(NULL, TEXT("人物.bmp"), IMAGE_BITMAP, 5, 10, LR_LOADFROMFILE);
  18.     GetObject(hbmp2, sizeof(BITMAP), &bmp2);
  19.     px2 = new unsigned char [bmp2.bmHeight * bmp2.bmWidthBytes];
  20.     GetBitmapBits(hbmp2, bmp2.bmHeight * bmp2.bmWidthBytes, px2);
  21.  
  22.     int xstart = 200, ystart = 100;        // 左上角点
  23.     int xend = xstart + (bmp2.bmWidth);    // 右下角点
  24.     int yend = ystart + (bmp2.bmHeight);
  25.     int pbyte = bmp.bmBitsPixel / 8;       // 位图单个像素占用的字节数
  26.     int x,y,i;                             // 循环处理变量
  27.     int rgb_byte;                          // 颜色序号
  28.     for(y=ystart;y<yend;y++)               // 处理背景图暂存数组像素颜色
  29.     {
  30.         for(x=xstart;x<xend;x++)
  31.         {
  32.             rgb_byte = y * bmp.bmWidthBytes + x * pbyte;
  33.             px[rgb_byte] *= 0.7;
  34.             px[rgb_byte+1] *= 0.7;
  35.             px[rgb_byte+2] *= 0.7;
  36.         }
  37.     }
  38.     for(y=0;y<(bmp2.bmHeight);y++)         // 处理前景图暂存数组像素颜色
  39.     {
  40.         for(x=0;x<(bmp2.bmWidth);x++)
  41.         {
  42.             rgb_byte = y * bmp2.bmWidthBytes + x * pbyte;
  43.             i = (ystart + y) * bmp.bmWidthBytes + (xstart + x) * pbyte;
  44.             px2[rgb_byte] = px2[rgb_byte] * 0.3 + px[i];
  45.             px2[rgb_byte+1] = px2[rgb_byte+1] * 0.3 + px[i+1];
  46.             px2[rgb_byte+2] = px2[rgb_byte+2] * 0.3 + px[i+2];
  47.         }
  48.     }
  49.     SetBitmapBits(hbmp2, bmp2.bmHeight * bmp2.bmWidthBytes, px2);
  50.    
  51.     SelectObject(mdc, hbmp);
  52.     BitBlt(hdc, 0, 0, 640, 480, mdc, 0, 0, SRCCOPY);
  53.     SelectObject(mdc, hbmp2);
  54.     BitBlt(hdc, 200, 100, 5, 10, mdc, 0, 0, SRCCOPY);
  55.    
  56.     DeleteDC(mdc);                 // 释放
  57.     DeleteObject(hbmp);
  58.     DeleteObject(hbmp2);
  59.     delete [] px;
  60.     delete [] px2;
  61. }

--------------------------------------------------------------------------------------------------

透明半透明效果

半透明效果把人物图全部显示为半透明,但我们要求人物实体外的部分完全透明,可以多使用一个内存DC与位图对象,先在内存DC完成透明,再取出这个DC上的位图内容进行半透明处理.

(为了方便范例,把人物和屏蔽图结合在一起,(0,0)~(5,10)为人物图,(0,10)~(5,20)为屏蔽图)

范例如下:

  1. void bmp3(HDC hdc)
  2. {
  3.     HDC mdc,mdc2;                  // 内存DC
  4.     HBITMAP hbmp,hbmp2,hbmp3;      // 位图对象
  5.     BITMAP bmp,bmp2;               // 位图结构
  6.     unsigned char *px,*px2;        // 暂存数组
  7.     mdc = CreateCompatibleDC(hdc);
  8.     mdc2 = CreateCompatibleDC(hdc);
  9.  
  10.     hbmp = (HBITMAP)LoadImage(NULL, TEXT("bj.bmp"), IMAGE_BITMAP, 640, 480, LR_LOADFROMFILE);
  11.     hbmp2 = (HBITMAP)LoadImage(NULL, TEXT("人物.bmp"), IMAGE_BITMAP, 5, 20, LR_LOADFROMFILE);
  12.     hbmp3 = CreateCompatibleBitmap(hdc, 5, 10);  // 此函数创建一个空位图
  13.     SelectObject(mdc, hbmp3);
  14.     SelectObject(mdc2, hbmp);
  15.     BitBlt(mdc, 0, 0, 5, 10, mdc2, 200, 100, SRCCOPY);
  16.     SelectObject(mdc2, hbmp2);
  17.     BitBlt(mdc, 0, 0, 5, 10, mdc2, 0, 10, SRCAND);
  18.     BitBlt(mdc, 0, 0, 5, 10, mdc2, 0, 0, SRCPAINT);
  19.     GetObject(hbmp, sizeof(BITMAP), &bmp);
  20.     px = new unsigned char [bmp.bmHeight * bmp.bmWidthBytes];
  21.     GetBitmapBits(hbmp, bmp.bmHeight * bmp.bmWidthBytes, px);
  22.     GetObject(hbmp3, sizeof(BITMAP), &bmp2);
  23.     px2 = new unsigned char [bmp2.bmHeight * bmp2.bmWidthBytes];
  24.     GetBitmapBits(hbmp3, bmp2.bmHeight * bmp2.bmWidthBytes, px2);
  25.     int xstart = 200, ystart = 100;        // 前景图显示位置
  26.     int pbyte = bmp.bmBitsPixel / 8;       // 位图单个像素占用的字节数
  27.     int x,y,i;                             // 循环处理变量
  28.     int rgb_byte;                          // 颜色序号
  29.     for(y=0;y<(bmp2.bmHeight);y++)         // 处理前景图暂存数组像素颜色
  30.     {
  31.         for(x=0;x<(bmp2.bmWidth);x++)
  32.         {
  33.             rgb_byte = y * bmp2.bmWidthBytes + x * pbyte;
  34.             i = (ystart + y) * bmp.bmWidthBytes + (xstart + x) * pbyte;
  35.             px2[rgb_byte] = px2[rgb_byte] * 0.3 + px[i] * 0.7;
  36.             px2[rgb_byte+1] = px2[rgb_byte+1] * 0.3 + px[i+1] * 0.7;
  37.             px2[rgb_byte+2] = px2[rgb_byte+2] * 0.3 + px[i+2] * 0.7;
  38.         }
  39.     }
  40.     SetBitmapBits(hbmp2, bmp2.bmHeight * bmp2.bmWidthBytes, px2);
  41.    
  42.     SelectObject(mdc, hbmp);
  43.     BitBlt(hdc, 0, 0, 640, 480, mdc, 0, 0, SRCCOPY);
  44.     SelectObject(mdc, hbmp2);
  45.     BitBlt(hdc, 200, 100, 5, 10, mdc, 0, 0, SRCCOPY);
  46.    
  47.     DeleteDC(mdc);                 // 释放
  48.     DeleteDC(mdc2);
  49.     DeleteObject(hbmp);
  50.     DeleteObject(hbmp2);
  51.     DeleteObject(hbmp3);
  52.     delete [] px;
  53.     delete [] px2;
  54. }

--------------------------------------------------------------------------------------------------

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有