SelectObject和DeleteObject函数用法

合集下载

js delete用法

js delete用法

js的delete用法详解
JavaScript中的delete关键字用于删除对象的属性或数组的元素。

以下是delete用法的一些详细解释:
1.删除对象属性
使用delete关键字可以删除对象的属性。

例如:
在上面的例子中,我们创建了一个名为obj的对象,并使用delete关键字删除了它的name属性。

2.删除数组元素
delete也可以用于删除数组的元素。

但是,与对象属性不同,数组元素被删除后,其索引将自动调整,以填补删除元素留下的空位。

例如:
在上面的例子中,我们创建了一个名为arr的数组,并使用delete关键字删除了索引为2的元素。

被删除的元素位置被替换为undefined。

需要注意的是,delete操作不会立即减小数组的长度。

即使删除了数组的元素,数组的长度仍然保持不变,直到该索引位置的元素被替换为其他值或重新分配新的索引。

3.删除全局变量和函数
使用delete关键字可以删除全局变量和函数。

例如:
在上面的例子中,我们创建了一个全局变量x和一个函数myFunc,并使用delete 关键字删除了它们。

需要注意的是,删除全局变量和函数并不会立即从内存中释放它们所占用的空间,而是将其标记为垃圾回收,以便将来进行内存清理。

需要注意的是,虽然delete可以用于删除对象的属性或数组的元素,但在实际开发中,我们应该尽量避免使用它来删除对象的属性或数组的元素,因为这可能会导致一些不可预见的问题。

相反,我们应该使用其他方法来操作对象的属性和数组的元素,例如使用对象字面量语法或数组方法来添加或删除属性或元素。

常用的GDI绘图函数(免费)

常用的GDI绘图函数(免费)
CreateDIBPatternBrushPt 用一幅与设备无关的位图创建一个刷子,以便指定刷子样式(图案)
CreateHatchBrush 创建带有阴影图案的一个刷子(阴影图案见注解)
CreatePatternBrush 用指定了刷子图案的一幅位图创建一个刷子
GetObjectType 判断由指定句柄引用的GDI对象的类型
SelectObject 每个设备场景都可能有选入其中的图形对象。其中包括位图、刷子、字体、画笔以及区域等等。一次选入设备场景的只能有一个对象。选定的对象会在设备场景的绘图操作中使用。例如,当前选定的画笔决定了在设备场景中描绘的线段颜色及样式
ExtCreatePen 创建一个扩展画笔(装饰或几何)
GetStockObject 取得一个固有对象(Stock)。这是可由任何应用程序使用的windows标准对象之一
例1∶创建一个红色实线画笔,画笔宽度为3个像素点
背景模式∶阴影刷子、虚线画笔和文本都有一个背景。对于阴影刷,它是指阴影线之间的区域,对于虚线画笔,则指点和虚线之间的区域。而对于文本,它是指每个字符单元的背景。背景模式决定了WINDOWS如何处理这些背景区。它可以是不透明的,也可以是透明的。若是不透明的,则背景区设置为背景色;否则如果是透明的,则背景区域保持原状。
如果是的话,随便整好了。
OK,以下展示了使用GDI对象的API函数。
函 数 说 明
DeleteObject 用这个函数删除GDI对象,比如画笔、刷子、字体、位图、区域以及调色板等等。对象使用的所有系统资源都会被释放
GetBkMode 针对指定的设备场景,取得当前的背景填充模式
GetCurrentPositionEx 在指定的设备场景中取得当前的画笔位置

CDC类的主要绘图成员函数

CDC类的主要绘图成员函数

CDC类的主要绘图成员函数CDC类中常用绘图函数1)绘制像素函数原型:COLORREF SetPixel(int x,int y,COLORREF crColor );设置某像素点的RGB值2)获取像素颜色函数原型:COLORREF GetPixel(int x,int y)const;返回值:指定像素的RGB值。

参数说明:得到指定像素的RGB颜色值一、画笔函数画笔是用来绘制直线、曲线或图形的边界线,是绘图工具类之一画笔通常具有线型、宽度和颜色三种属性画笔的线型通常有实线、虚线、点线、点划线、双点划线、不可见线和内框架线7种,这些线型都是以PS_为前缀的预定义标识符默认的画笔是一个像素单位的黑色实线要想更换画笔,可以在创建新画笔对象后,将其选入设备上下文,就可使用新画笔进行绘图。

1)创建画笔函数原型:BOOL CreatePen(int nPenStyle,int nWidth,COLORREF crColor);返回值:非零。

参数说明:第一个参数nPenStyle是画笔的风格代码第二个参数nWidth是画笔的宽度第三个参数crColor是画笔的颜色。

PS_SOLID;实线;宽度任意指定PS_DASH;虚线;宽度1(不可任意指定)PS_DOT;点线;宽度1(不可任意指定)PS_DASHDOT;点划线;宽度1(不可任意指定)PS_DASHDOTDOT;双点画线;宽度1(不可任意指定)PS_NULL;不可见线;宽度1(不可任意指定)PS_INSIDEFRAME;内框架线;宽度任意指定2)选择画笔函数原型:Cpen *SelectObject(Cpen *pPen);返回值:被替代画笔的指针。

参数说明:参数pPen是Cpen类的被选中的新画笔对象指针。

本函数把原画笔换成新画笔,同时返回指向原画笔的指针。

3)删除画笔函数原型:BOOL DeleteObject( );返回值:非零。

参数说明:画笔使用完毕,把已成自由状态的画笔从系统内存中清除。

wps中deleteobject函数

wps中deleteobject函数

wps中deleteobject函数在WPS中,DeleteObject函数用于删除工作簿中的对象,包括图表、图片、自选图形和OLE对象等。

使用DeleteObject函数可以方便地删除不需要的对象,从而精简工作簿、提高工作效率。

下面是关于WPS中DeleteObject函数的详解,共计1200字以上。

一、DeleteObject函数的语法和参数解释:DeleteObject(对象名称)其中,对象名称是要删除的对象的名称。

对象名称可以是一个字符串,也可以是一个对象变量。

二、DeleteObject函数的使用方法:1.删除图表:在WPS的工作表中,我们可以创建各种不同类型的图表,如折线图、柱状图、饼图等。

如果要删除一些图表,可以使用DeleteObject函数。

例如,要删除图表1,可以使用以下代码:DeleteObject("图表 1")2.删除图片:在WPS的工作簿中,我们可以插入图片来进行展示和说明。

如果要删除一些图片,可以使用DeleteObject函数。

例如,要删除名为图片1的图片,可以使用以下代码:DeleteObject("图片 1")3.删除自选图形:在WPS的工作簿中,我们可以插入各种自选图形来进行装饰和标识。

如果要删除一些自选图形,可以使用DeleteObject函数。

例如,要删除名为自选图形1的自选图形,可以使用以下代码:DeleteObject("自选图形 1")4.删除OLE对象:DeleteObject("OLE对象 1")三、DeleteObject函数的使用示例:以删除图表为例,假设我们在WPS的工作表中有一个名为“图表1”的图表,并且我们想删除这个图表。

可以使用以下代码:Sub DeleteChartDeleteObject("图表 1")End Sub在上述示例中,首先定义了一个名为DeleteChart的子过程,然后在子过程中调用DeleteObject函数,将要删除的对象名称设置为"图表 1"。

getobject deleteobject -回复

getobject deleteobject -回复

getobject deleteobject -回复“getobject deleteobject" 是一个非常基础的程序命令,它在许多编程语言中都有使用到。

本文将深入探讨这些命令的含义、用法和实际应用场景,帮助读者更好地理解并学会如何运用它们。

首先,我们来分别解释一下"getobject" 和"deleteobject" 这两个命令。

1. "getobject" 命令"getobject" 是一个用于获取(或提取)对象的命令。

在编程中,对象是指一种数据类型,它可以包含多个属性和方法。

通过使用"getobject" 命令,程序可以从内存中检索出特定的对象,并将其保存到一个变量中以供后续操作使用。

"getobject" 命令的一般语法如下:getobject <object_name> [from <source>]其中,"<object_name>" 表示要获取的对象的名称,而"[from<source>]" 可选部分表示对象所在的来源(如数据库、文件等)。

下面是一个具体的例子,来演示"getobject" 命令的应用:pythoncustomer = getobject "John Smith" from database# 获取名为"John Smith" 的顾客对象,并保存到名为"customer" 的变量中在这个例子中,程序通过"getobject" 命令从数据库中获取了一个名为"John Smith" 的顾客对象,并将其保存到了"customer" 变量中。

显示程序实验_实验报告

显示程序实验_实验报告

一、实验目的1. 了解显示程序的基本原理和实现方法。

2. 掌握使用C语言编写显示程序的基本步骤。

3. 熟悉计算机显示系统的组成和功能。

4. 培养实际编程能力,提高动手操作能力。

二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 显示器:普通显示器三、实验原理显示程序是指将计算机中的数据以图形或文字形式展示在显示器上的程序。

在计算机系统中,显示程序主要涉及以下原理:1. 图形显示原理:通过将图像数据转换成显示器可以识别的信号,驱动显示器显示图像。

2. 文字显示原理:通过字符编码将文字信息转换成显示器可以识别的信号,驱动显示器显示文字。

四、实验步骤1. 创建一个新的C语言项目,命名为“显示程序实验”。

2. 在项目文件夹中创建一个名为“display.c”的源文件。

3. 在“display.c”文件中编写以下代码:```c#include <stdio.h>#include <windows.h>int main() {// 创建一个窗口HWND hwnd = CreateWindow("static", "显示程序实验",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, NULL, NULL);ShowWindow(hwnd, SW_SHOW);// 创建一个设备上下文HDC hdc = GetDC(hwnd);// 创建一个画笔HPEN hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));// 选择画笔SelectObject(hdc, hPen);// 绘制矩形Rectangle(hdc, 100, 100, 300, 300);// 绘制文字TextOut(hdc, 50, 50, "Hello, World!", strlen("Hello, World!")); // 释放画笔DeleteObject(hPen);// 释放设备上下文ReleaseDC(hwnd, hdc);// 等待用户关闭窗口MSG msg;while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;}```4. 编译并运行程序,观察显示效果。

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

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

【Windows编程】系列第五篇:GDI图形绘制上两篇我们学习了以及,知道如何⽤常见Win32输出⽂本字符串,这⼀篇我们来学习Windows编程中另⼀个⾮常重要的部分GDI图形绘图。

Windows的GDI函数包含数百个API可供我们使⽤,本篇把最常⽤的GDI绘图做⼀个讲解。

GDI可以绘制点、直线曲线、填充封闭区域、位图以及⽂本,其中⽂本部分已经在上⼀篇中将了,请参考。

跟前⾯的GDI对象⼀样,本篇的这些绘图函数也必须要设备上下⽂句柄(HDC)作为函数参数,从前⽂我们知道,HDC可以在处理WM_PAINT的时候⽤BeginPaint函数获取,也可以从GetDC、GetWindowDC拿到。

既然是画图,就少不了颜⾊的描述,Windows中的颜⾊有⼏种表⽰,其中COLORREF在GDI绘制中⽤的最多,它实际上是⼀个⽆符号32为整型。

其中红、绿、蓝各占⼀个字节,最⾼字节不使⽤,如下图所⽰:该值可以⽤Windows提供的RGB宏来⽣成,Windows中RGB的定义为:#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))除此之外,Windows还有结构体RGBQUAD也表⽰颜⾊,这种⼀般⽤于位图结构信息中。

画像素点Windows提供了SetPixel和GetPixel函数来设定和获取像素点的颜⾊。

函数原型为:COLORREF SetPixel(HDC hdc, int X, int Y, COLORREF crColor);COLORREF GetPixel(HDC hdc, int nXPos, int nYPos);该函数并不常使⽤。

画笔画刷在图形绘制之前,可以创建画笔给后续的画图使⽤,创建画笔的API函数为:HPEN CreatePen(int fnPenStyle, int nWidth, COLORREF crColor);HBRUSH CreateSolidBrush(COLORREF crColor);HBRUSH CreatePatternBrush(HBITMAP hbmp);HBRUSH CreateHatchBrush(int fnStyle, COLORREF clrref);它可以指定画笔风格,宽度和颜⾊。

delete函数用法

delete函数用法

delete函数详解1. 定义delete函数是一种用于删除指定位置或范围的元素的方法。

它可以用于删除数组、字符串和对象中的元素。

delete函数返回一个布尔值,表示删除成功与否。

2. 用途delete函数主要用于以下几个方面:•删除数组中的元素•删除字符串中的字符•删除对象中的属性3. 工作方式3.1 删除数组中的元素在删除数组元素时,delete函数会将指定位置的元素设置为undefined,并不会改变数组的长度。

例如:let arr = [1, 2, 3, 4, 5];delete arr[2];console.log(arr); // [1, 2, undefined, 4, 5]可以看到,第3个位置上的元素被设置为了undefined。

3.2 删除字符串中的字符在删除字符串中的字符时,delete函数同样会将指定位置上的字符设置为undefined,并不会改变字符串的长度。

例如:let str = "Hello World";delete str[6];console.log(str); // "Hello W rld"可以看到,第7个位置上的字符被设置为了undefined。

需要注意的是,使用delete删除字符串中某个字符后,并不能改变字符串本身,只能改变指定位置上的字符。

3.3 删除对象中的属性在删除对象属性时,delete函数会完全删除该属性。

例如:let obj = { name: "Alice", age: 20 };delete obj.age;console.log(obj); // { name: "Alice" }可以看到,对象中的age属性被成功删除。

需要注意的是,delete函数只能删除对象自身的属性,不能删除继承来的属性。

并且,delete函数无法删除那些被定义为不可配置(non-configurable)的属性。

VBA调用API实现屏幕截图和图像处理的实例

VBA调用API实现屏幕截图和图像处理的实例

VBA调用API实现屏幕截图和图像处理的实例在Excel中使用Visual Basic for Applications(VBA)编程语言,可以实现许多功能,包括屏幕截图和图像处理。

通过调用应用程序编程接口(API),我们可以实现更高级的图像处理任务,以及捕捉屏幕上的特定区域。

本文将介绍如何使用VBA调用API实现屏幕截图和图像处理的实例。

第一部分:调用API实现屏幕截图在VBA中,我们可以使用API函数来捕捉屏幕上的特定区域,并保存为图像文件。

以下是实现这一功能的步骤:1. 在VBA编辑器中,在代码窗口中插入一个新的模块,以便编写我们的代码。

2. 在模块中添加以下代码,以声明我们将要使用的API函数:```vbaDeclare PtrSafe Function BitBlt Lib "gdi32" _(ByVal hDestDC As LongPtr, ByVal x As Long, ByVal y As Long, ByValnWidth As Long, ByVal nHeight As Long, _ByVal hSrcDC As LongPtr, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As LongDeclare PtrSafe Function GetDC Lib "user32" (ByVal hwnd As LongPtr) As LongPtrDeclare PtrSafe Function ReleaseDC Lib "user32" (ByVal hwnd As LongPtr, ByVal hDC As LongPtr) As LongDeclare PtrSafe Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As LongPtr) As LongPtrDeclare PtrSafe Function CreateCompatibleBitmap Lib "gdi32" (ByVal hDC As LongPtr, ByVal nWidth As Long, ByVal nHeight As Long) As LongPtrDeclare PtrSafe Function SelectObject Lib "gdi32" (ByVal hDC As LongPtr, ByVal hObject As LongPtr) As LongPtrDeclare PtrSafe Function DeleteDC Lib "gdi32" (ByVal hDC As LongPtr) As LongPtrDeclare PtrSafe Function DeleteObject Lib "gdi32" (ByVal hObject As LongPtr) As LongPtrDeclare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long```3. 添加以下代码,在一个按钮的点击事件中触发屏幕截图:```vbaSub CaptureScreen()Dim hWnd As LongPtrDim hDC As LongPtrDim hWinDC As LongPtrDim hBitmap As LongPtrDim lWidth As LongDim lHeight As LonghWnd = GetDesktopWindow()hDC = GetDC(hWnd)lWidth = GetSystemMetrics(0)lHeight = GetSystemMetrics(1)hWinDC = CreateCompatibleDC(0)hBitmap = CreateCompatibleBitmap(hDC, lWidth, lHeight)SelectObject hWinDC, hBitmapBitBlt hWinDC, 0, 0, lWidth, lHeight, hDC, 0, 0, SRCCOPYDeleteDC hWinDCReleaseDC hWnd, hDCSavePicture hBitmap, "C:\Screenshot.jpg"DeleteObject hBitmapMsgBox "截图已保存在C盘根目录下的Screenshot.jpg文件中。

在C#中使用GDI的简单总结

在C#中使用GDI的简单总结

在C#中使⽤GDI的简单总结在C#中使⽤GDI的简单总结在C#默认⽀持的是GDI+库,使⽤GDI+库,有很丰富的函数和排版⼿段,可以满⾜⼤部分的要求.除⾮,你需要使⽤bitmap字体,GDI+对于字体的⽀持有很⼤限制,⽀持truetype字体,⽽对于点阵字体(栅格字体)则不再⽀持,但是很多字体都是这种点阵字体,这样就带来⼀个问题,使⽤不了了.⽽很多公司则会⾃⼰制作某些⽤途的字体,⽐如说在LED显⽰屏上使⽤,这个时候使⽤GDI+则不再是⼀个明智的选择了.此外GDI+虽然强⼤,但是经过测试发现效率却是低下,速度⽐GDI慢了不少.但是CS的界⾯开发环境和编码习惯⼜很适合,所以⽐较折衷的解决⽅法是使⽤C#调⽤系统的gdi api函数实现编程.⾸先C#环境中的color结构是AARRGGBB,⽽在win32的颜⾊结构却是AABBGGRR,所以如果不注意则会使到颜⾊出现偏差或者逆转.在.net环境的类库当中,在system.drawing的命名空间中有ColorTranslator.ToWin32()这个函数,来对color结构转换成win32的api使⽤的颜⾊结构.GDI中⽐较重要的函数,gdi函数基本都是来之⼀个dll. Gdi32.dll[DllImport("gdi32.dll")]public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj);[DllImport("GDI32.dll")]public static extern bool DeleteObject(IntPtr objectHandle);[DllImport("gdi32.dll")]public static extern bool FillRgn(IntPtr hdc, IntPtr hrgn, IntPtr hbr);[DllImport("gdi32.dll")]public static extern IntPtr CreateRectRgn(int nLeftRect, int nTopRect, int nRightRect,int nBottomRect);[DllImport("gdi32.dll")]public static extern IntPtr CreateSolidBrush(Int32 crColor);[DllImport("gdi32.dll")]public static extern int SetBkMode(IntPtr hdc, int iBkMode);public const int TRANSPARENT = 1;public const int OPAQUE = 2;[DllImport("gdi32.dll")]static extern uint SetBkColor(IntPtr hdc, int crColor);[DllImport("gdi32.dll")]static extern uint SetTextColor(IntPtr hdc, int crColor);[DllImport("gdi32", EntryPoint = "CreateFontW", CharSet = CharSet.Auto)]static extern IntPtr CreateFontW([In] Int32 nHeight,[In] Int32 nWidth,[In] Int32 nEscapement,[In] Int32 nOrientation,[In] FontWeight fnWeight,[In] Boolean fdwItalic,[In] Boolean fdwUnderline,[In] Boolean fdwStrikeOut,[In] FontCharSet fdwCharSet,[In] FontPrecision fdwOutputPrecision,[In] FontClipPrecision fdwClipPrecision,[In] FontQuality fdwQuality,[In] FontPitchAndFamily fdwPitchAndFamily,[In] String lpszFace);[DllImport("gdi32.dll")]public static extern int GetTextFace(IntPtr hdc, int nCount,[Out] StringBuilder lpFaceName);public const Int32 LF_FACESIZE = 32;[DllImport("gdi32.dll", ExactSpelling = true)]public static extern bool BitBlt(IntPtr hdcDest, // ⽬标设备的句柄int nXDest, // ⽬标对象的左上⾓的X坐标int nYDest, // ⽬标对象的左上⾓的Y坐标int nWidth, // ⽬标对象的矩形的宽度int nHeight, // ⽬标对象的矩形的长度IntPtr hdcSrc, // 源设备的句柄int nXSrc, // 源对象的左上⾓的X坐标int nYSrc, // 源对象的左上⾓的X坐标TernaryRasterOperations dwRop // 光栅的操作值);[DllImport("gdi32.dll")]public static extern bool StretchBlt(IntPtr hdcDest, int nXOriginDest, int nYOriginDest,int nWidthDest, int nHeightDest,IntPtr hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc,TernaryRasterOperations dwRop);[DllImport("gdi32.dll", CharSet = CharSet.Auto)]public static extern bool GetTextExtentPoint(IntPtr hdc, string lpString,int cbString, ref Size lpSize);[DllImport("Gdi32.dll", CharSet = CharSet.Auto)]public static extern bool GetTextMetrics(IntPtr hdc, out TEXTMETRIC lptm);[DllImport("gdi32.dll")]public static extern bool GetCharABCWidthsFloatW(IntPtr hdc, uint iFirstChar, uint iLastChar, [Out] ABCFloat[] lpABCF);[DllImport("gdi32.dll", CharSet = CharSet.Auto)]public static extern bool TextOutW(IntPtr hdc, int nXStart, int nYStart,string lpString, int cbString);[DllImport("gdi32.dll", CharSet = CharSet.Auto)]public static extern bool GetCharWidth32(IntPtr hdc, uint iFirstChar, uint iLastChar,[Out] int[] lpBuffer);[DllImport("user32.dll", CharSet = CharSet.Unicode)]public static extern int DrawText(IntPtr hdc, string lpStr, int nCount, ref Rect lpRect, dwDTFormat wFormat);[DllImport("gdi32.dll", ExactSpelling = true, SetLastError = true)]static extern IntPtr CreateCompatibleDC(IntPtr hdc);[DllImport("gdi32.dll", ExactSpelling = true, SetLastError = true)]static extern bool DeleteDC(IntPtr hdc);这些都是在GDI中⽐较常⽤的函数,其中SelectObject,和DeleteObject更是关键,在GDI的使⽤中最容易出现的问题就是内存泄漏,很多时候是因为没有正确释放资源引起的.所以需要特别⼩⼼,在GDI中释放资源使⽤DeleteObject这个函数来释放.下⾯来实现⼀些具体的函数////// 填充特定DC的⼀个区域的特定颜⾊////// 给定DC/// 给定区域/// 给定颜⾊public static void FillRect(IntPtr hdc, Rectangle Rect, Color FillColor){IntPtr fillBrush = CreateSolidBrush(ColorTranslator.ToWin32(FillColor));IntPtr rectR = CreateRectRgn(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);FillRgn(hdc, rectR, fillBrush);DeleteObject(rectR);DeleteObject(fillBrush);}这个函数实现对⼀个区域填充⼀个颜⾊, 当中创建了画笔,创建了区域,然后最后,当然还要记得释放两者占⽤的资源.创建字体函数public static IntPtr CreatFont(String FontName, Int32 Height, FontStyle Style){IntPtr Result;// = IntPtr.Zero;FontWeight boldWeight = FontWeight.FW_NORMAL;Boolean Italic = false;Boolean Underline = false;Boolean Bold = false;if ((Style & FontStyle.Bold) != 0){Bold = true;}if ((Style & FontStyle.Italic) != 0){Italic = true;}if ((Style & FontStyle.Underline) != 0){Underline = true;}if (Bold){boldWeight = FontWeight.FW_BOLD;}Result = CreateFontW(Height, 0, 0, 0, boldWeight, Italic, Underline, false,FontCharSet.DEFAULT_CHARSET, FontPrecision.OUT_DEFAULT_PRECIS,FontClipPrecision.CLIP_DEFAULT_PRECIS, FontQuality.DRAFT_QUALITY,FontPitchAndFamily.DEFAULT_PITCH, FontName);return Result;}在.net中,默认的字体类,不⽀持点阵字体,所以要使⽤CreateFontW这个函数来创建⾃⼰的字体资源,其中⼤部分的选项都试⽤默认值即可.然后就是设置画板字体,在GDI环境中,DC是带着字体的,⽽不像GDI+那样⼦是分离的,所以经常需要设置不同的字体public static IntPtr SetCanvasFont(IntPtr hdc, ApiFont NewFont){IntPtr FontPtr = CreatFont(, NewFont.Size, NewFont.Style);IntPtr OldPtr = SelectObject(hdc, FontPtr);DeleteObject(OldPtr);return OldPtr;}这个函数,将DC原来的字体资源释放掉,这样的实现会带来⼀个新的问题,因为⼀般来说都需要将DC原来的字体资源再通过selectobject函数放回去,然后将新的字体资源释放掉.所以这个函数是要⼩⼼使⽤的.所以就有了第⼆个版本public static IntPtr SetCanvasFontNotDelete( IntPtr hdc, ApiFont NewFont ){IntPtr FontPtr = CreatFont(, NewFont.Size, NewFont.Style);IntPtr OldPtr = SelectObject(hdc, FontPtr);return OldPtr;}这样⼦就可以⼿动的释放资源,但是需要特别注意,的是⼀定要记得释放掉字体资源.⼀般的使⽤画图的步骤IntPtr pTarget = e.Graphics.GetHdc();IntPtr pSource = CreateCompatibleDC(pTarget);IntPtr pOrig = SelectObject(pSource, drawBmp.GetHbitmap());GDIApi.StretchBlt(pTarget, 0, 0, this.Width, this.Height, pSource, 0, 0, drawWidth, drawHeight, TernaryRasterOperations.SRCCOPY);IntPtr pNew = SelectObject(pSource, pOrig);DeleteObject(pNew);DeleteDC(pSource);e.Graphics.ReleaseHdc(pTarget);这样⼦就可以将drawBmp画到e.graphics上⾯了.最重要的是后⾯释放掉资源,否则内存的泄漏速度是很厉害的.我的软件每次重画就有7M左右的泄漏.⼀下⼦从⼗⼏M的内存上升到⼏百M的内存占⽤[DllImport("gdi32.dll")]public static extern int SetBkMode( IntPtr hdc, int iBkMode );public const int TRANSPARENT = 1;public const int OPAQUE = 2;这个函数是设置透明度的,参数2如果为1则是透明,2则是不透明.不透明的话,将字符串画上去的时候,会有⽩⾊的背景.⼀般来说设为透明.获取字符或者字体的信息函数[DllImport("gdi32.dll", CharSet = CharSet.Auto)]public static extern bool GetTextExtentPoint( IntPtr hdc, string lpString,int cbString, ref Size lpSize );[DllImport("Gdi32.dll", CharSet = CharSet.Auto)]public static extern bool GetTextMetrics( IntPtr hdc, out TEXTMETRIC lptm );[DllImport("gdi32.dll")]public static extern bool GetCharABCWidthsFloatW( IntPtr hdc, uint iFirstChar, uint iLastChar, [Out] ABCFloat[] lpABCF );[DllImport("gdi32.dll", CharSet = CharSet.Auto)]public static extern bool GetCharWidth32( IntPtr hdc, uint iFirstChar, uint iLastChar,[Out] int[] lpBuffer );这⼏个函数都可以获取字体或者字符串占⽤的空间⼤⼩,⽽⼜各有区别.GetTextExtentPoint可以⽅便的获取⼀个字符串,或者字符串的部分的长度,因为可以通过cbString这个长度来控制获取的范围. GetTextMetrics则是获取⼀个字体的各种⾼度信息,包括height,ascent,descent,还包括字体能够表现的字符范围等等信息. GetCharABCWidthsFloatW则是获取某段连续字符串的abcwidth信息,abcwidth信息在某些情况下,需要特别注意,否则斜体会排版得很难看. GetCharWidth32获取⼀个连续的字符段的宽度信息, 但是根据实践,居然和GetTextExtentPoint获取的信息不⼤⼀致,暂时是少于实际占⽤的空间.使到计算出来的占⽤宽度实际上不⾜以容纳字符串的排版.字符串的描绘这是在gdi操作中⾮常重要的⼀部分,使⽤Gdi是因为需要使⽤特殊字体,⽽字体当然是针对字符串来使⽤的的.所以,这根本就是使⽤gdi的⽬的.常⽤的字符串输出有来个函数[DllImport("gdi32.dll", CharSet = CharSet.Auto)]public static extern bool TextOutW( IntPtr hdc, int nXStart, int nYStart,string lpString, int cbString );[DllImport("user32.dll", CharSet = CharSet.Unicode)]public static extern int DrawText( IntPtr hdc, string lpStr, int nCount, ref Rect lpRect, dwDTFormat wFormat );TextOutW是⼀个⽐较简单的函数,适合⼀般的场合,只需要设置X和Y的坐标即可DrawText,则会控制输出的空间⼤⼩,排版规则.⽐较适合需要精确控制的场所,⼜或者⽐如说输出阿拉伯⽂字的时候,要设置为右对齐.获取系统所有的字体由于C#不⽀持点阵字体,所以⾃然地,使⽤.net提供的函数,获取的安装字体列表⾃然是不包含点阵字体的.所以并不符合我的要求.所以还得使⽤系统的api函数,来获取安装字体列表.private Int32 EnumFontCallBack(ref ENUMLOGFONTEX lpelfe, IntPtr lpntme, int FontType, int lParam){//Debug.WriteLine(lpelfe.elfFullName);if (lpelfe.elfFullName.Substring(0, 1) != "@"){if (!sysFontList.Contains(lpelfe.elfFullName)){sysFontList.Add(lpelfe.elfFullName);}}return 1;}LOGFONT logfont = new LOGFONT();logfont.lfCharSet = FontCharSet.DEFAULT_CHARSET;Bitmap bmp = new Bitmap(10, 10);Graphics g = Graphics.FromImage(bmp);IntPtr hDC = g.GetHdc();EnumFontFamilies.EnumFontFamiliesEx(hDC, logfont, EnumFontCallBack, IntPtr.Zero, 0);g.ReleaseHdc(hDC);g.Dispose();bmp.Dispose();public class EnumFontFamilies{public const int LF_FACESIZE = 32;public delegate int EnumFontExDelegate( ref ENUMLOGFONTEX lpelfe, IntPtr lpntme, int FontType, int lParam );[DllImport("gdi32.dll", EntryPoint = "EnumFontFamiliesEx", CharSet = CharSet.Unicode)]public static extern int EnumFontFamiliesEx( IntPtr hDC, [In] LOGFONT logFont, EnumFontExDelegate enumFontExCallback, IntPtr lParam, uint dwFlags );}其中EnumFontCallBack为回调函数,通过这个回调函数,可以获取到系统所有的字体,包括点阵的字体.附录A:GDI使⽤的结构和常量[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]public struct ENUMLOGFONTEX{public LOGFONT elfLogFont;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]public string elfFullName;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]public string elfStyle;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]public string elfScript;}[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public class LOGFONT{public int lfHeight;public int lfWidth;public int lfEscapement;public int lfOrientation;public FontWeight lfWeight;[MarshalAs(UnmanagedType.U1)]public bool lfItalic;[MarshalAs(UnmanagedType.U1)]public bool lfUnderline;[MarshalAs(UnmanagedType.U1)]public bool lfStrikeOut;public FontCharSet lfCharSet;public FontPrecision lfOutPrecision;public FontClipPrecision lfClipPrecision;public FontQuality lfQuality;public FontPitchAndFamily lfPitchAndFamily;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string lfFaceName;public override string ToString(){StringBuilder sb = new StringBuilder();sb.Append("LOGFONT\n");sb.AppendFormat(" lfHeight: {0}\n", lfHeight);sb.AppendFormat(" lfWidth: {0}\n", lfWidth);sb.AppendFormat(" lfEscapement: {0}\n", lfEscapement);sb.AppendFormat(" lfOrientation: {0}\n", lfOrientation);sb.AppendFormat(" lfWeight: {0}\n", lfWeight);sb.AppendFormat(" lfItalic: {0}\n", lfItalic);sb.AppendFormat(" lfUnderline: {0}\n", lfUnderline);sb.AppendFormat(" lfStrikeOut: {0}\n", lfStrikeOut);sb.AppendFormat(" lfCharSet: {0}\n", lfCharSet);sb.AppendFormat(" lfOutPrecision: {0}\n", lfOutPrecision);sb.AppendFormat(" lfClipPrecision: {0}\n", lfClipPrecision);sb.AppendFormat(" lfQuality: {0}\n", lfQuality);sb.AppendFormat(" lfPitchAndFamily: {0}\n", lfPitchAndFamily);sb.AppendFormat(" lfFaceName: {0}\n", lfFaceName);return sb.ToString();}}public enum FontWeight : int{FW_DONTCARE = 0,FW_THIN = 100,FW_EXTRALIGHT = 200,FW_LIGHT = 300,FW_NORMAL = 400,FW_MEDIUM = 500,FW_SEMIBOLD = 600,FW_BOLD = 700,FW_EXTRABOLD = 800,FW_HEAVY = 900,}public enum FontCharSet : byte{ANSI_CHARSET = 0,DEFAULT_CHARSET = 1,SYMBOL_CHARSET = 2,SHIFTJIS_CHARSET = 128,HANGEUL_CHARSET = 129,HANGUL_CHARSET = 129,GB2312_CHARSET = 134,CHINESEBIG5_CHARSET = 136,OEM_CHARSET = 255,JOHAB_CHARSET = 130,HEBREW_CHARSET = 177,ARABIC_CHARSET = 178,GREEK_CHARSET = 161,TURKISH_CHARSET = 162,VIETNAMESE_CHARSET = 163,THAI_CHARSET = 222,EASTEUROPE_CHARSET = 238, RUSSIAN_CHARSET = 204,MAC_CHARSET = 77,BALTIC_CHARSET = 186,}public enum FontPrecision : byte{OUT_DEFAULT_PRECIS = 0,OUT_STRING_PRECIS = 1,OUT_CHARACTER_PRECIS = 2, OUT_STROKE_PRECIS = 3,OUT_TT_PRECIS = 4,OUT_DEVICE_PRECIS = 5,OUT_RASTER_PRECIS = 6,OUT_TT_ONLY_PRECIS = 7,OUT_OUTLINE_PRECIS = 8,OUT_SCREEN_OUTLINE_PRECIS = 9, OUT_PS_ONLY_PRECIS = 10,}public enum FontClipPrecision : byte{CLIP_DEFAULT_PRECIS = 0,CLIP_CHARACTER_PRECIS = 1, CLIP_STROKE_PRECIS = 2,CLIP_MASK = 0xf,CLIP_LH_ANGLES = (1 << 4),CLIP_TT_ALWAYS = (2 << 4),CLIP_DFA_DISABLE = (4 << 4),CLIP_EMBEDDED = (8 << 4),}public enum FontQuality : byte{DEFAULT_QUALITY = 0,DRAFT_QUALITY = 1,PROOF_QUALITY = 2, NONANTIALIASED_QUALITY = 3, ANTIALIASED_QUALITY = 4,CLEARTYPE_QUALITY = 5,CLEARTYPE_NATURAL_QUALITY = 6,}[Flags]public enum FontPitchAndFamily : byte{DEFAULT_PITCH = 0,FIXED_PITCH = 1,VARIABLE_PITCH = 2,FF_DONTCARE = (0 << 4),FF_ROMAN = (1 << 4),FF_SWISS = (2 << 4),FF_MODERN = (3 << 4),FF_SCRIPT = (4 << 4),FF_DECORATIVE = (5 << 4),}/// <summary>/// Enumeration for the raster operations used in BitBlt./// In C++ these are actually #define. But to use these/// constants with C#, a new enumeration type is defined./// </summary>public enum TernaryRasterOperations{SRCCOPY = 0x00CC0020, /* dest = source */SRCPAINT = 0x00EE0086, /* dest = source OR dest */SRCAND = 0x008800C6, /* dest = source AND dest */ SRCINVERT = 0x00660046, /* dest = source XOR dest */ SRCERASE = 0x00440328, /* dest = source AND (NOT dest ) */ NOTSRCCOPY = 0x00330008, /* dest = (NOT source) */ NOTSRCERASE = 0x001100A6, /* dest = (NOT src) AND (NOT dest) */ MERGECOPY = 0x00C000CA, /* dest = (source AND pattern) */ MERGEPAINT = 0x00BB0226, /* dest = (NOT source) OR dest */ PATCOPY = 0x00F00021, /* dest = pattern */PATPAINT = 0x00FB0A09, /* dest = DPSnoo */PATINVERT = 0x005A0049, /* dest = pattern XOR dest */ DSTINVERT = 0x00550009, /* dest = (NOT dest) */BLACKNESS = 0x00000042, /* dest = BLACK */WHITENESS = 0x00FF0062, /* dest = WHITE */};[Flags]public enum dwDTFormat : int{DT_TOP = 0, DT_LEFT = 0x00000000, DT_CENTER = 0x00000001, DT_RIGHT = 0x00000002,DT_VCENTER = 0x00000004, DT_BOTTOM = 0x00000008, DT_WORDBREAK = 0x00000010, DT_SINGLELINE = 0x00000020,DT_EXPANDTABS = 0x00000040, DT_TABSTOP = 0x00000080, DT_NOCLIP = 0x00000100, DT_EXTERNALLEADING = 0x00000200, DT_CALCRECT = 0x00000400, DT_NOPREFIX = 0x00000800, DT_INTERNAL = 0x00001000};public struct Rect{public int Left, Top, Right, Bottom;public Rect( Rectangle r ){this.Left = r.Left;this.Top = r.Top;this.Bottom = r.Bottom;this.Right = r.Right;}}[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]public struct TEXTMETRIC{public Int32 tmHeight;public Int32 tmAscent;public Int32 tmDescent;public Int32 tmInternalLeading;public Int32 tmExternalLeading;public Int32 tmAveCharWidth;public Int32 tmMaxCharWidth;public Int32 tmWeight;public Int32 tmOverhang;public Int32 tmDigitizedAspectX;public Int32 tmDigitizedAspectY;public char tmFirstChar;public char tmLastChar;public char tmDefaultChar; public char tmBreakChar; public byte tmItalic;public byte tmUnderlined; public byte tmStruckOut; public byte tmPitchAndFamily; public byte tmCharSet;}。

getobject deleteobject -回复

getobject deleteobject -回复

getobject deleteobject -回复主题:getobject deleteobject一、引言在计算机科学领域,"getobject"和"deleteobject"是两个常见的操作命令。

"getobject"是用于获取对象的命令,它允许程序员从内存或存储设备中获取特定类型的对象。

而"deleteobject"则是用于删除对象的命令,它会释放对象所占用的内存或资源,并将对象从程序中移除。

本文将一步一步回答关于这两个操作命令的相关问题。

二、"getobject"的使用方法和作用1. 什么是"getobject"命令?"getobject"命令是一种编程语言中的操作命令,它用于从内存或存储设备中获取特定类型的对象。

2. 如何使用"getobject"命令?使用"getobject"命令的具体方法取决于所采用的编程语言和开发环境。

通常情况下,可以通过指定对象的标识符或属性来获取对象。

3. "getobject"命令的作用是什么?"getobject"命令的作用是从内存或存储设备中获取所需的对象。

它可以用于从文件系统获取文件、从数据库中获取数据、或从网络上获取远程对象等。

三、"deleteobject"的使用方法和作用1. 什么是"deleteobject"命令?"deleteobject"命令是一种编程语言中的操作命令,它用于删除对象并释放其所占用的资源。

2. 如何使用"deleteobject"命令?使用"deleteobject"命令的具体方法也取决于所采用的编程语言和开发环境。

vba createobject用法

vba createobject用法

VBA CreateObject 用法VBA 中的 CreateObject 函数是一个非常有用的工具,它能够让我们在 VBA 中创建一个对外部应用程序的引用,并且使用该应用程序的对象模型。

在本文中,我将为你深入探讨 VBA CreateObject 的用法,为你提供全面的理解和灵活的应用。

1. 了解 CreateObject 函数在开始具体讨论 CreateObject 的用法之前,我们需要先了解一下CreateObject 函数的基本情况。

CreateObject 函数是用来创建一个对外部应用程序的引用的,这个引用就是该应用程序的对象模型。

在VBA 中,我们可以使用这个引用来与外部应用程序进行交互,调用其对象模型中的方法和属性,实现更加灵活和强大的功能。

2. VBA CreateObject 的基本语法在 VBA 中,CreateObject 函数的基本语法如下:```Set 对象变量 = CreateObject("应用程序名称.对象类型")```通过这个语法,我们可以将外部应用程序的对象模型实例化为一个对象变量,从而可以利用这个对象变量与外部应用程序进行交互。

在这段代码中,"应用程序名称" 表示外部应用程序的名称,"对象类型" 则表示外部应用程序中的对象类型。

3. CreateObject 的常见应用CreateObject 函数可以用于创建各种不同类型的外部应用程序的对象模型引用,比如创建 Excel 应用程序的对象模型引用、创建 Word 应用程序的对象模型引用等。

通过创建这些对象模型引用,我们可以实现 VBA 与外部应用程序的强大交互,可以完成很多 VBA 本身无法完成的功能。

4. CreateObject 的灵活应用除了基本的应用之外,CreateObject 函数还可以在很多特定的场景下发挥非常重要的作用。

在处理一些特殊格式的数据文件时,我们可能会需要使用外部应用程序的功能来进行处理,这时候就可以使用CreateObject 函数来创建对应的外部应用程序的对象模型引用,来处理这些特殊格式的数据文件。

s3client.deleteobject 参数

s3client.deleteobject 参数

在云计算领域中,Amazon S3(Simple Storage Service)是一种非常常用的对象存储服务。

简单来说,S3允许用户在云中存储和检索任意数量的数据,而无需关心底层的硬件设备。

在使用S3时,一个常见的操作就是删除对象,即从存储桶中永久删除某个文件或对象。

在S3中,我们可以使用S3Client.deleteObject方法来完成这一操作。

让我们来看看S3Client.deleteObject方法的参数。

在使用这个方法时,我们需要传入一个DeleteObjectRequest对象作为参数。

而在DeleteObjectRequest对象中,我们需要指定以下几个参数:1. 存储桶名称(Bucket Name):表示要删除对象所在的存储桶的名称。

在S3中,存储桶是用来存储对象的容器,类似于文件夹。

2. 对象键(Object Key):表示要删除的对象在存储桶中的唯一标识。

在S3中,对象键就相当于文件的路径和名称。

通过指定这两个参数,我们就可以调用S3Client.deleteObject方法来删除指定的对象了。

需要注意的是,删除操作是不可逆的,一旦删除就无法恢复,因此在执行删除操作之前,务必要三思而后行。

当我们讨论S3Client.deleteObject方法时,还可以从广度和深度两个方面来进行评估。

从广度方面来看,S3Client.deleteObject方法是S3客户端(S3Client)所提供的一个操作接口。

它是S3 API的一部分,是S3客户端用来与S3服务进行数据交互的重要方法之一。

在实际应用中,我们需要注意S3Client.deleteObject方法的调用频率、并发性能、错误处理机制等方面的特性,以确保对对象的删除操作能够稳定可靠地执行。

从深度方面来看,S3Client.deleteObject方法的实现涉及到了分布式系统、数据存储、网络通信、安全性等多个方面的知识。

在调用S3Client.deleteObject方法时,实际上涉及到了与S3服务端的交互过程,包括通过HTTP协议向S3服务发送删除请求、S3服务的权限验证、对象数据的删除操作等。

ntqueryobject用法

ntqueryobject用法

ntqueryobject用法摘要:1.NTQUERYOBJECT 函数的定义和功能2.NTQUERYOBJECT 函数的参数3.NTQUERYOBJECT 函数的返回值4.NTQUERYOBJECT 函数的使用示例正文:TQUERYOBJECT 函数是Windows API 中的一个函数,主要用于查询对象的信息。

这个函数的功能非常强大,可以查询对象的各种属性和信息。

在使用NTQUERYOBJECT 函数时,需要了解它的参数和返回值,以便正确地使用这个函数。

TQUERYOBJECT 函数的参数包括以下几个:- hObject:指向要查询的对象的句柄。

- ulString:指定要查询的信息类型,这个参数是一个枚举值,常用的值包括ObjectBasicInformation、ObjectNameInformation、ObjectDescriptionInformation 等。

- pBuffer:指向一个缓冲区,用于存储查询到的信息。

- nBufferLength:指定缓冲区的长度,必须是4 的倍数。

- ulReserved:保留参数,通常设置为0。

TQUERYOBJECT 函数的返回值是布尔值,如果函数执行成功,返回真(非零),否则返回假(零)。

在使用NTQUERYOBJECT 函数时,需要先创建一个对象,然后使用这个函数查询对象的信息。

下面是一个简单的使用示例:```c#include <stdio.h>#include <Windows.h>int main(){HANDLE hObject = CreateFile("C:Test.txt", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS |FILE_FLAG_OVERLAPPED, NULL);if (hObject == INVALID_HANDLE_VALUE){printf("CreateFile failed");return -1;}OBJECT_BASIC_INFORMATION ObjectInfo;NTSTATUS ntStatus = NtQueryObject(hObject, ObjectBasicInformation, &ObjectInfo, sizeof(ObjectInfo), NULL);if (ntStatus == STATUS_SUCCESS){printf("Object name: %s", ObjectInfo.ObjectName);printf("Object type: %x", ObjectInfo.ObjectType);}else{printf("NtQueryObject failed");return -1;}CloseHandle(hObject);return 0;}```这个示例中,我们首先创建了一个文件对象,然后使用NTQUERYOBJECT 函数查询对象的基本信息,包括对象名和对象类型。

太极的函数表达式

太极的函数表达式

太极的函数表达式void Taiji(HDC hdc,int xLeft,int yT op,int xRight,int yBottom){ HBRUSH hBrush;HBRUSH hOldBrush;HPEN hPen;hBrush = CreateSolidBrush(RGB(255, 255, 255));hOldBrush = (HBRUSH)SelectObject(hdc,hBrush);Chord(hdc,xLeft,yTop,xRight,yBottom,(xRight+xLeft)/2,yBottom,( xRight+xLeft)/2,yTop);SelectObject(hdc, hOldBrush);DeleteObject(hBrush);//画右边半圆(白色)hBrush = CreateSolidBrush(RGB(0, 0, 0));hOldBrush = (HBRUSH)SelectObject(hdc,hBrush);Chord(hdc,xLeft,yTop,xRight,yBottom,(xRight+xLeft)/2,yTop,(xRig ht+xLeft)/2,yBottom);SelectObject(hdc, hOldBrush);DeleteObject(hBrush);//画左边半圆(黑色)hBrush = CreateSolidBrush(RGB(0, 0, 0));hOldBrush = (HBRUSH)SelectObject(hdc,hBrush);Ellipse(hdc,(xRight+xLeft)/2-(xRight-xLeft)/4,yTop,(xRight+xLeft)/ 2+(xRight-xLeft)/4,(yBottom+yTop)/2);SelectObject(hdc, hOldBrush);DeleteObject(hBrush);//画太极图阴块大头hPen = CreatePen(PS_SOLID, 1, RGB(255,255,255));SelectObject(hdc, hPen);hBrush = CreateSolidBrush(RGB(255, 255, 255));hOldBrush = (HBRUSH)SelectObject(hdc,hBrush);Chord(hdc,(xRight+xLeft)/2-(xRight-xLeft)/4,(yBottom+yTop)/2,(x Right+xLeft)/2+(xRight-xLeft)/4,yBottom,(xRight+xLeft)/2,(yBottom+yTo p)/2,(xRight+xLeft)/2,yBottom);SelectObject(hdc, hOldBrush);DeleteObject(hBrush);//画太极图阳块大头hPen = CreatePen(PS_SOLID, 1, RGB(0,0,0));SelectObject(hdc, hPen);Arc(hdc,(xRight+xLeft)/2-(xRight-xLeft)/4,(yBottom+yTop)/2,(xRi ght+xLeft)/2+(xRight-xLeft)/4,yBottom,(xRight+xLeft)/2,(yBottom+yTop )/2,(xRight+xLeft)/2,yBottom);//描边hBrush = CreateSolidBrush(RGB(0, 0, 0));hOldBrush = (HBRUSH)SelectObject(hdc,hBrush);Ellipse(hdc,(xRight+xLeft)/2-(xRight-xLeft)*3/40,(yBottom+yTop)/ 2+(xRight-xLeft)*7/40,(xRight+xLeft)/2+(xRight-xLeft)*3/40,(yBottom+y Top)/2+(xRight-xLeft)*7/40+(xRight-xLeft)*3/20);SelectObject(hdc, hOldBrush);DeleteObject(hBrush);//阴小点hBrush = CreateSolidBrush(RGB(255, 255, 255));hOldBrush = (HBRUSH)SelectObject(hdc,hBrush);Ellipse(hdc,(xRight+xLeft)/2-(xRight-xLeft)*3/40,yTop+(xRight-xL eft)*7/40,(xRight+xLeft)/2+(xRight-xLeft)*3/40,yTop+(xRight-xLeft)*7/40 +(xRight-xLeft)*3/20);SelectObject(hdc, hOldBrush);DeleteObject(hBrush);//阳小点。

deque数据类型的操作

deque数据类型的操作

随着时间的推移,曲线向右平移,同时X轴的时间坐标跟着更新。

一、如何绘制动态曲线。

所谓动画,都是一帧一帧的图像连续呈现在用户面前形成的。

所以如果你掌握了如何绘制静态曲线,那么学会绘制动态曲线也不远啦,只需要创建一个定时器(比如调用MFC中的SetTimmer函数),每隔一定时间(比如1ms),调用OnPaint 或者OnDraw函数,绘制当前帧图像即可。

这里需要注意的是,绘制图像的代码需要写在OnPaint或者OnDraw函数中,因为当窗口失效(比如最小化)恢复后,会重新绘制当前窗口,窗口之前的自绘图像会丢失。

而把绘图代码写在OnPaint或者OnDraw中就是为了让窗口每次重绘时也能重绘你自己画的图像,避免出现窗口最小化再恢复后,自己画的图像丢失的尴尬情况。

另外绘制当前帧图像之前,记得用InvalidateRect函数清除上一帧图像,不然各帧图像会背景的堆叠。

比如我想清除窗口中(0,0)和(100,100)这两点确定的矩形中的图像,代码如下:CRect Rect;Rect.top = 0;Rect.left = 0;Rect.bottom = 100;Rect.right = 100;InvalidateRect(Rect);根据上面的思路,我们每隔一定时间绘制一幅图像,可是如果每次绘制的图像都是完全相同的,那么图像看起来也是静态的。

如何让曲线动起来呢?我们需要为自己绘图的代码设计一个输入,即在当前时刻曲线上各个点的坐标信息。

随着时间的推移,令曲线上各个点的坐标随之变化,这样每次绘图都是基于当前时刻的曲线坐标绘制的,控制好曲线坐标的变化,也就能让你绘制的曲线乖乖的动起来。

上面提到了曲线上各个点的坐标信息,这个信息可以用多种数据结构储存,不过笔者推荐使用STL中的deque数据结构储存。

为什么呢?需求决定选择。

让我们先想想在绘制图像的过程中需要对这个数据进行哪些操作。

1、需要遍历这个数据,获取各个点的坐标以便绘图,所以选择的数据结构必须有较高的遍历效率。

CDC::SelectObject函数

CDC::SelectObject函数

CDC::SelectObject函数SelectObjectVB声明Declare Function SelectObject Lib "gdi32" Alias "SelectObject" (ByVal hdc As Long, ByVal hObject As Long) As Long说明每个设备场景都可能有选⼊其中的图形对象。

其中包括位图、刷⼦、字体、画笔以及区域等等。

⼀次选⼊设备场景的只能有⼀个对象。

选定的对象会在设备场景的绘图操作中使⽤。

例如,当前选定的画笔决定了在设备场景中描绘的线段颜⾊及样式返回值Long,与以前选⼊设备场景的相同hObject类型的⼀个对象的句柄,零表⽰出错。

如选定的对象是⼀个区域(Region),结果就是下列常数之⼀:SIMPLEREGION, COMPLEXREGION 或 NULLREGION 对区域进⾏描述,GDI_ERROR 表⽰出错参数表参数类型及说明hdcLong,⼀个设备场景的句柄hObjectLong,⼀个画笔、位图、刷⼦、字体或区域的句柄注解返回值通常⽤于获得选⼊DC的对象的原始值。

绘图操作完成后,原始的对象通常选回设备场景。

在清除⼀个设备场景前,务必注意恢复原始的对象CDC::SelectObjectCPen* SelectObject (CPen* pPen);CBrush* SelectObject(CBrush* pBrush);virtual CFont* SelectObject(CFont* pFont);CBitmap* SelectObject(CBitmap* pBitmap);int SelectObject (CRgn* pRgn);返回值:返回被替代的对象的指针。

是由⼀个CGdiObject类派⽣出的对象的指针,如CPen ,它取决于使⽤函数的版本。

如果出错,则返回NULL。

selectobject的作用

selectobject的作用

selectobject的作用selectObject的作用selectObject是一种编程语言中的指令,用于选择对象并对其进行操作。

在各种编程语言中,selectObject都具有相似的功能,但具体的语法和用法可能有所不同。

本文将以通用的角度来介绍selectObject的作用,不涉及具体的编程语言。

一、selectObject的基本概念在编程语言中,对象是指具有特定属性和方法的实体。

通过selectObject指令,程序可以选择某个对象,并对其进行操作。

对象可以是图形、文件、数据库记录等各种实体。

二、selectObject的语法selectObject的语法可能因编程语言而异,但基本的结构通常包括关键字selectObject和对象的标识符。

下面是一个示例:selectObject(objectIdentifier)其中,objectIdentifier是对象的标识符,可以是变量名、对象名或对象的属性。

三、selectObject的作用1. 选择图形对象:在图形编程中,可以使用selectObject选择某个图形对象,例如一个矩形或圆形,然后对其进行操作,如移动、缩放、旋转等。

2. 选择文件对象:在文件处理中,可以使用selectObject选择某个文件对象,然后对其进行读写操作,如打开、关闭、读取、写入等。

3. 选择数据库对象:在数据库编程中,可以使用selectObject选择某个数据库对象,然后对其进行操作,如查询、插入、更新、删除等。

4. 选择用户界面对象:在用户界面设计中,可以使用selectObject 选择某个界面元素对象,然后对其进行操作,如显示、隐藏、修改属性等。

5. 选择网络对象:在网络编程中,可以使用selectObject选择某个网络对象,然后对其进行通信操作,如发送、接收数据等。

6. 选择多媒体对象:在多媒体处理中,可以使用selectObject选择某个多媒体对象,然后对其进行播放、暂停、停止等操作。

getobject deleteobject -回复

getobject deleteobject -回复

getobject deleteobject -回复「getobject deleteobject」是一个关于计算机编程领域的主题。

在这篇文章中,我们将从头开始解释这个主题,并深入探讨getobject和deleteobject的含义、用途和实际应用。

我们还将介绍一些与这两个概念相关的编程语言和技术。

首先,让我们探索getobject概念。

在计算机编程中,getobject通常指的是从某个数据源(如数据库或文件)中获取一个对象的过程。

这个对象可以是一个数据记录、一个文件、一个图像或任何其他可由计算机程序处理的实体。

通过getobject,我们可以获取对象的相关属性和方法,使得我们能够对这个对象进行进一步操作和处理。

在不同的编程语言和环境中,getobject的具体实现可能会有所不同。

例如,在JavaScript中,我们可以使用document.getElementById()函数来通过指定的ID获取HTML元素对象。

在Python中,我们可以使用不同的库或框架进行数据库查询,从而获取相应的对象。

无论是哪种编程语言或环境,getobject的实质都是从某个数据源中获取一个特定的对象。

接下来,让我们转向deleteobject的概念。

在计算机编程中,deleteobject 指的是移除、销毁或释放一个对象的过程。

当我们不再需要某个对象时,使用deleteobject可以释放对象所占用的内存或其他资源,并将其从程序中移除。

这样可以提高程序的性能和资源利用率。

同样地,deleteobject的具体实现可能因编程语言和环境的不同而异。

例如,在C++中,我们可以使用delete关键字来释放一个动态分配的对象。

在Java中,垃圾回收器会自动处理不再使用的对象,从而释放它们占用的内存。

无论是哪种方式,deleteobject的目标是确保程序在不再需要对象时能够正确地释放资源。

有了对getobject和deleteobject的基本理解,我们现在可以探索它们在实际编程中的应用了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#031 rcText.top = 10;
#032 rcText.right = 300;
#033 rcText.bottom = 40;
#034
#035 //显示字符串在四边形的中间位置.
#036 DrawText(hDC,strShow.c_str(),(int)strShow.length(),&rcText,
WINGDIAPI HGDIOBJ WINAPI SelectObject(__in HDC hdc, __in HGDIOBJ h); WINGDIAPI BOOL WINAPI DeleteObject( __in HGDIOBJ ho); hDC 是当前设备的句柄。 h,ho 是设备对象,其实它就是内存的地址。
另一列: //////////////////////////////////////////////////
CRect rect; CDC* pDC=GetDC(); GetWindowRect(&rect); CPen spen;
//被选中,显示红色,否则显示灰色 if(bIsSelect)spen.CreatePen(PS_SOLID,3,RGB(0,255,0)); else spen.CreatePen(PS_SOLID,3,RGB(192,192,192)); pDC->SelectObject(&spen); pDC->SelectObject(GetStockObject(NULL_BRUSH));//选择透明填充 pDC->Rectangle(0,0,rect.Width()-3,rect.Height()-3); ReleaseDC(pDC);
////////////////////////////////////////////////// BoundsChecker 发 现有 错误 发 生: Argument 1 in DeleteObject(字 体对 象句 柄 值) is still
selected in to hDC 0x01010058
修改 : //////////////////////////////////////////////////
//字体大小 CFont font; font.CreatePointFont(g_myFont,_T("宋体")); CFont *pOldFont=pDC->SelectObject(&font); GetDlgItem(IDC_STATIC_TITLE)->SetFont(&font);//为控件附上字号 pDC->SelectObject(pOldFont); DeleteObject(font);//释放资源 //////////////////////////////////////////////////
#037
DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);
#038
#039
#040 rcText.left = 10;
#041 rcText.top = 40;
#042 rcText.right = 300;
#043 rcText.bottom = 80;
#044 //设置透明背景
#045 int nOldMode = SetBkMode(hDC,TRANSPARENT);
#046
#047 //设置新字体.
#048 HGDIOBJ hOldFont = SelectObject(hDC,GetFont());
#049
#050 //显示字符串在四边形的中间位置.
调用这个函数的例子如下:
#001 // #002 //界面显示输出.
#003 // #004 //蔡军生 2007/09/01 QQ:9073204 深圳
#005 //
#006 void CCaiWinMsg::OnDraw(HDC hDC)
#007 {
#008 //
#009 std::wstring strShow(_T("C++窗口类的实现,2007-09-04")); #010 #011 //设置输出字符串的颜色. #012 COLORREF crOld = SetTextColor(hDC,RGB(255,0,0)); #013 #014 RECT rcText; #015 rcText.left = 10; #016 rcText.top = 10; #017 rcText.right = 300; #018 rcText.bottom = 80; #019 #020 //创建黑色的画刷, #021 HBRUSH hbrush = CreateSolidBrush(RGB(0, 0, 0)); #022 #023 //用黑色的画刷填充四边形的颜色. #024 FillRect(hDC,&rcText,hbrush); #025 #026 //删除画刷. #027 DeleteObject(hbrush); #028 #029 #030 r1 DrawText(hDC,strShow.c_str(),(int)strShow.length(),&rcText,
#052
DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);
#053 #054 //恢复原来的字体. #055 HGDIOBJ hFont = SelectObject(hDC,hOldFont); #056 DeleteObject(hFont); #057 #058 //恢复原来的模式. #059 SetBkMode(hDC,nOldMode); #060 #061 //恢复原来的颜色. #062 SetTextColor(hDC,crOld); #063 }
//////////////////////////////////////////////// CFont font; font.CreatePointFont(g_myFont,_T("宋体")); GetDlgItem(IDC_STATIC_TITLE)->SetFont(&font); CFont *pOldFont=pDC->SelectObject(&font); DeleteObject(pOldFont);
SelectObject 和 DeleteObject 函数 用法第一个站进入, 快速成为做挂达人。
Windows 显示设备的属性,共有下面几种:位图、画刷、字体、画笔、区域。如果要 设置它们到当前设备里,就需要使用 SelectObject 函数,比如上面介绍的字体设置,就会用 到这个函数。当你创建一个位图时,这时 Windows 就会在内存里分配一块内存空间,用来 保存位图的数据。
pDC->SelectObject(pSpen); DeleteObject(spen);//释放资源 ReleaseDC(pDC); //////////////////////////////////////////////////
//被选中,显示红色,否则显示灰色 if(bIsSelect)spen.CreatePen(PS_SOLID,3,RGB(0,255,0)); else spen.CreatePen(PS_SOLID,3,RGB(192,192,192)); CPen *pSpen = pDC->SelectObject(&spen); pDC->SelectObject(GetStockObject(NULL_BRUSH));//选择透明填充 pDC->Rectangle(0,0,rect.Width()-3,rect.Height()-3);
当你创建字体时,也会分配一块内存空间保存字体。如果程序只是分配,而不去删除, 就会造成内存使用越来越多,最后导到 Windows 这幢大楼倒下来。如果你忘记删除它,就 造成了内存泄漏。因此,当你创建显示设备资源时,一定要记得删除它们啊,否则运行你的 程序越长,就导致系统不稳定。记得使用 DeleteObject 函数去删除它们,把占用的内存释放 回去给系统。 函数 SelectObject 和 DeleteObject 声明如下:
//////////////////////////////////////////////////
修改: ////////////////////////////////////////////////// CRect rect; CDC* pDC=GetDC(); GetWindowRect(&rect); CPen spen;
相关文档
最新文档