`
lc7cl
  • 浏览: 42294 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

画图的基本知识

    博客分类:
  • VC
阅读更多

1. 几种不同设备环境
MFC的CDC类封装了设备环境对象,CDC的成员变量m_hDC指向它的设备环境,可以创建的设备环境类型有:屏幕,打印机,只有打印机的信息部分,位图。
屏幕:
创建一个屏幕设备环境 
CDC *Pdc = GetDC();//返回窗口客户区的设备环境
CDC *Pdc = GetWindowDC();//包括客户区和非客户区的设备环境
如果要对整个屏幕进行绘制;
CDC *Pdc = CDC::FromHandle(::GetDC(NULL));
使用完之后要用ReleaseDC(Pdc)释放
每次释放DC之后,为设备环境设置的值都会丢失,可以使用下面两个函数来保存和恢复设置的环境值.
SaveDC();保存设备的当前状态
RestoreDC();将DC恢复到SaveDC()保存的状态.
打印机设备:
要为打印机创建一个设备环境,必须先创建一个C D C类对象,然后使用它的CreateDC( )
成员函数:
CDC dc;
dc.CreateDC(LPCTSTR lpszDriverName,
LPCTSTR lpszDeviceName,
LPCTSTR lpszOutput,
const void* lpInitData)
lpszDriverName: 指向空终止字符串的指针,字符串为设备驱动程序的文件名(不带扩展名,例如:“EPSON”)。也可以为该参数传递Cstring对象。
LpszDeviceName: 指向空终止字符串的指针,字符串为支持特定设备的文件名(例如:“EPSON FX?0”)。如果模块支持不只一个设备,使用lpszDeviceName参数,也可以为该参数传递 Cstring对象。
LpszOutput: 指向空终止字符串的指针,字符串为指定了物理输出媒介的文件和设备名(文件或输出端口)。也可以为该参数传递 Cstring对象
LpInitData: 指向DEVMODE 结构的指针,该结构包含有指定设备驱动程序的初始数据,Windows 的DocumentProperties函数从该结构中获得指定设备的信息。如果设备驱动程序使用用户在控制面板设定的缺省值,lpInitData参数 一定要设置为NULL。如果使用DEVMODE 结构,就需要PRINT.H 头文件。
直接绘制位图的设备环境:
CDC dc;
dc.CreateCompatibleDC(HDC hdc);//创建兼容的DC 

要绘制位图,还必须创建一个空的位图对象:
CDC dc;
dc.CreateCompatibleDC(pDC);
Cbitmap bimmap;
Bitmap.CreateCompatileBitmap(pCD,16,16);
dc.SelectObject(&bitmap);
………..
dc.DeleteDC();
     打印机信息设备:
CDC dc;
dc.CreteIC( );
信息设备环境只包含一台打印机或其他非屏幕设备的特性,如颜色支持等。创建信息设
备环境的速度比创建一个常规的打印机设备环境速度快,因为它只包含设备的特性。信息使用后应当删除,与前面描述的一样。
2.画点;
     SetPixel( ) 试图用指定的颜色画一个像素,返回绘制时使用的实际颜色
SetPixelV( ) 与上面的基本相同,但不用返回绘制时使用的实际颜色,因而速度更快
GetPixel()取得点处的RGB颜色
COLORREF GetPixel(int x,int y) const;
COLORREF GetPixel(POINT point) const;// 如果不能在剪切区指定点的坐标,则返回-1。

COLORREF SetPixel(int x ,int y,COLORREF crColor);
COLORREF SetPixel(POINT point,COLORREF crColor);// 点必须在剪切区内,否则函数什么也不做。

BOOL SetPixelV (int x ,int y ,COLORREF crColor );
BOOL SetPixelV (POINT point,COLORREF crColor );// 。该点必须在剪切区内设备表面的可视区域之中

在OnDraw(CDC *pDC)中
COLORREF clcolor ;
clcolor   =   Pdc->GetPixel(20,20);
pDC->SetPixel(40,40,clcolor);

3.画线:
     MoveTo( ) 开始画线、弧和多边形时,把光标移动到一个初始位置
LineTo( ) 画一条从初始位置到另一个点的直线
Arc( ) 画一段弧
ArcTo( ) 画一段弧,并更新初始位置
AngleArc( ) 画一条线,然后画一段弧,并更新初始位置
PolyDraw( ) 画一系列线段和Bezier样条
PolyLine( ) 画一系列线段
PolyPolyLine( ) 画多个系列线条
     画线属性是通过画笔的属性来控制, HPEN句柄指向一个Pen对象。在M F C中创建一个P e n对象,必须先创建一个CPen类对象

    
绘制实例;

CPen *oldpen,pen1,pen2,pen3;

     pen1.CreatePen(PS_SOLID,2,RGB(255,0,0));//画笔1

     LOGPEN logpen;
     logpen.lopnStyle = PS_DASH;
     logpen.lopnWidth.x   = 1;
     logpen.lopnWidth.y   = 1;
     logpen.lopnColor = RGB(199,199,199);
     pen2.CreatePenIndirect(&logpen);//画笔2

     pen3.CreatePen(PS_USERSTYLE| PS_ENDCAP_FLAT,3,RGB(100,120,120));//画笔3

     oldpen = (CPen *)pDC->SelectObject(&pen1);
     pDC->MoveTo(100,100);   //画线
     pDC->LineTo(200,200);

     pDC->SelectObject(&pen2);
     pDC->Arc(&CRect(200,200,400,400),CPoint(200,200), CPoint(200,400)); //画圆弧

     pDC ->SelectObject(&pen3);
     POINT pt[4] = {{10,10},{15,15},{20,40},{50,70}};
     BYTE style[4] = {{ PT_MOVETO},{PT_LINETO},{PT_LINETO},{PT_LINETO}}; 
     pDC-> PolyDraw(pt,style,4); //画线

     pDC->SelectObject(oldpen);

int SetROP2(int nDrawMode); 绘图模式的前一次取值
nDrawMode指定新的绘制模式,可以为下列值之一;
R2_BLACK   像素始终为黑色。
R2_WHITE   像素始终为白色。
   R2_NOP   像素保持不变。
   R2_NOT   像素为屏幕颜色的反色。
   R2_COPYPEN   像素为笔的颜色。
R2_NOTCOPYPEN   像素为笔颜色的反色。
   R2_MERGEPENNOT   像素为笔颜色或者屏幕颜色反色的组合色。
   R2_MASKPENNOT   像素为笔颜色与屏幕颜色反色的组合色。
   R2_MERGENOTPEN   像素为笔颜色反色或者屏幕颜色的组合色。
R2_MERGEPEN   像素为笔颜色或者屏幕颜色的组合色。
R2_MASKNOTPEN   像素为笔颜色反色与屏幕颜色的组合色。
   R2_NOTMERGEPEN   R2_MERGEPEN的反色。
   R2_MASKPEN   像素为笔颜色与屏幕颜色的组合色。
   R2_NOTMASKPEN   R2_MASKPEN的反色。
R2_XORPEN   像素为笔颜色与或者屏幕颜色异或的颜色。
   R2_NOTXORPEN   R2_XORPEN的反色。
4.绘制形状:
    
FillRect( ) 填充一个矩形
FillSolidRect( ) 用用一单色填充一个矩形
InvertRect( ) 反转一个矩形的颜色
ExtFloodFill( ) 用用当前画刷填充一个区域,提供比FloodFill( )成员函数更多的灵活性
FrameRect( ) 画一个矩形的边框
填充属性是使用的是画笔, B r u s h对象控制怎样填充形状。设备环境用一个H B R U S H句柄指向一个画刷对象。若用M F C创建一个B r u s h对象,首先要创建一个C B r u s h类对象.
GetBrushOrg获取当前画刷的起点
SetBrushOrg指定选入设备上下文的下一个画刷的起点
实例:
     CBrush *oldbrush,brush1,brush2,brush3;
     brush1.CreateSolidBrush(RGB(100,100,100));
     brush2.CreateHatchBrush(HS_CROSS,RGB(200,200,200));
     LOGBRUSH logbrush;
     logbrush.lbStyle = BS_HOLLOW;
     //logbrush.lbColor = ;
     //logbrush.lbHash = ;
     brush3.CreateBrushIndirect(&logbrush);

     //Oldbrush = (CBrush*)pDC->SelectObeject(&brush1);
     pDC->FillRect(&CRect(0,0,100,100),&brush1);
     pDC -> FillSolidRect(&CRect(100,100,200,200),RGB(20,20,20));
     pDC ->InvertRect(&CRect (100,100,200,200));

     oldbrush = (CBrush*)pDC->SelectObject(&brush1);
     pDC ->Rectangle(&CRect(200, 200,250,250));
     pDC ->SelectObject(&brush2);
     pDC ->Rectangle(&CRect(250, 250,300,300));
     pDC ->DrawEdge(&CRect(300, 300,350,350), EDGE_ETCHED|BDR_SUNKENOUTER|BDR_RAISEDINNER, BF_RECT);
     pDC ->Draw3dRect(&CRect(350, 350,400, 400),RGB(20,20,20),RGB(200,200,200));
     pDC ->SelectObject(&brush3);
     pDC ->DrawFocusRect(&CRect (400,400,450,450));

pDC ->DrawFrameControl(&CRect(400,0,500,100), DFC_BUTTON, DFCS_ADJUSTRECT|DFCS_BUTTON3STATE|DFCS_MONO);
pDC->SelectObject(oldbrush);
    

FillRgn( ) 填充一个区域
InvertRgn( ) 反转一个区域的颜色
FrameRgn( ) 画一个特定区域的边框

5.滚动:
通过滚动,可移动屏幕周围像素颜色。
ScrollDC( ) 左、右、上、下移动屏幕图像。
6.绘制文本;
TextOut( ) 在在一个指定的位置,输出一个字符串
ExtTextOut( ) 在在一个矩形区域里输出一个字符串
TabbedTextOut( ) 在基于用该函数传输的一个表,在指定位置输出一个字符串,并将字符串中的任何制表符转换为空格
DrawText( ) 在在指定的矩形域里绘制文本,但比TextOut( )有更多的选项,如把文本居中和显示多行文本

文本属性控制怎样绘制文本。有三种类型的文本属性:颜色、对齐方式和字体
文本颜色的颜色可以使用函数
SetTextColor( ) 设定前景色(即文本色)
SetBkColor( ) 设置输出文本处的背景色。
文 本的对其方式; 对齐方式属性决定文本怎样排列(如:左对齐、右对齐、中央对齐)。确切地说, TextOut( )函数中的x、y变量可以表示文本的左边、右边或者底部。使用默认的对齐方式, x、y代表文本的左上角,但还有其他一些方式。要改变设备环境的文本对齐属性,可以用SetTextAlign( )函数和下面的标志值之一:
TA _ LEFT 儿TextOut( )中的x变量表示文本的左边。TA _ L E F T是默认设置值
TA _ TOP 儿TextOut( )中的y变量表示文本的顶部。TA _ TO P是默认设置值
TA _ RIGHT 儿TextOut( )中的y变量表示文本的右边。计算文本的边界矩形,用以决定从哪儿开始绘制文本
TA _ CENTER 儿TextOut( )中的y变量表示文本的中部
TA _ BASELINE 儿TextOut( ) 中的y变量表示文本的基线
TA _ BOTTOM 儿TextOut( )中的y变量指示文本的底部

virtual int DrawText(LPCTSTR lpszString,ini nCount ,LPRECTlpRect,UINT nForm-at);
int DrawText(const Cstring&str,LPRECT lpRect,UNIT nFormat);// 如果成功,则返回文本高度。
lpszString 指向要绘制的文本的指针。如果nCount是-1,该字符串必须是空终止的。NCount字符串中字符数目。如果为-1,lpszString被认为是一 个指向空终止的字符串的长指针。DrawText自动计算字符数目。LpRect指向RECT结构或Crect对象的指针,结构(或对象)中包含有矩形 (逻辑单位表示),其中的文本带有格式。
NFormat指定格式化文本的方法。它可以是下列值的组合(可用运算符或位操作符进行组合):
DT_BOTTOM   底部对齐的文本。该值必须同DT_SINGLELINE组合使用。
DT_CALCRECT   决定矩形的宽度和高度,如果是多行文字,DrawText将会使用lpRect指向的矩形,并扩展矩形以容纳文本。如果是单行文本,DrawText将会 调整矩形的右边以便容纳该行文字。两种情况下,DrawText都返回格式化文本的高度,但并不绘制它们。
DT_CENTER   将文本水平居中。
DT_END_ELLIPSIS或DT_PATH _ELLIPSIS   如果必要,将用椭圆替代部分指定的文本,以便适合给定的矩形。除非指定DT_MODIFYSTRING 标志,否则给定的字符串不会被修改。可以指定DT_END_ELLIPSIS在字符串末端替代字符,或者指定DT_PATH_ELLIPSIS在字符串中 间替代字符。如果字符串中含有反斜杠(\),DT_PATH_ELLIPSIS将尽可能保存在最后一个反斜杠后的文本。
DT_EXPANDTABS   扩展制表符,每一制表符所含字符的缺省数目是8。
DT_EXTERNALLEADING包括在行高中的字体外部间隔。通常外部间隔不包括在一行文本的高度之中。
DT_LEFT   文本左对齐。
lDT_MODIFYSTRING   修正给定字符串以便与显示文本匹配。只有在指定DT_END_ELLIPSIS 或DT_ PATH_ELLIPSIS 标志时,该标志才起作用。
DT_NOCLIP   绘制但不剪切, DrawText 在使用DT_NOCLIP后总能运行得快一些。
DT_NOPREFIX   关闭前缀字符,通常DrawText 将助记前缀&理解为其后字符加上下划线,&&前缀符表示显示一个&字符,指定 DT_NOPREFIX后,也关闭了这种处理。l DT_PATH_ELLIPSISl DT_RIGHT   文本右对齐。
DT_SINGLELING   指定单行,回车与换行不会中断该行。
DT_TABSTOP   设置制表位,nFormat的高位字节即为每一制表符所含字符的数目,缺省值为8。
DT_TOP   文本靠上对齐(只用于单行文字)。
DT_VCENTER   垂直居中对齐(只用于单行文字)。
DT_WORDBREAK   设定单词中断。如果超过lpRect指定的矩形边界,行会自动在词间断开,回车与换行也会断行。
注意   DT_CALCRECT,DT_EXTERNALLEADING,DT_INTERNAL,DT_NOCLIP和DT_NOPREFIX不能与DT_TABSTOP一同使用。

CString str = "11111111111111111111111";
CRect rect;
rect.top = 200;
rect.left = 200;
rect.bottom = 250;
rect.right = 250;
pDC->DrawText(str,&rect,DT_LEFT|DT_END_ELLIPSIS)//多出的字符用…显示

文本的字体包括字体类型、大小和文本外观的其他方面
字体属性包括在Font对象中,设备环境用HFON T句柄指向该对象。若用M F C创建一个Font对象,首先创建一个CFont类对象
GetTextColor获取当前文本颜色
SetTextColor设置文本颜色
     CRect Rect;
     GetWindowRect(&Rect);
     CFont MyFont;
     MyFont.CreateFont(24,0,0,0,FW_BOLD,true,FALSE,0,0,0,0,0,0,"Arial");
     CString StrInfo="创建立体效果的字符串";
     pDC->SetBkMode(TRANSPARENT);
     CFont *pOldFont=pDC->SelectObject(&MyFont);
     COLORREF OldColor=pDC->SetTextColor(::GetSysColor(COLOR_3DHILIGHT));
     Rect.right=Rect.Width();
     Rect.bottom=Rect.Height();
     Rect.left=Rect.top=0;
     pDC->FillSolidRect(Rect,::GetSysColor(COLOR_3DFACE));
     pDC->DrawText(StrInfo,Rect+CPoint(0,1),DT_SINGLELINE|DT_LEFT);
     pDC->SetTextColor(::GetSysColor(COLOR_3DSHADOW));
     pDC->DrawText(StrInfo,Rect,DT_SINGLELINE|DT_LEFT);
     pDC->SetTextColor(OldColor);
     pDC->SelectObject(pOldFont);

7.绘制位图和图标:
DrawIcon     在在指定的位置画一个图标
BitBlt 在       从指定的设备环境中拷贝一个位图,通常是从磁盘中装入或在内存中创建,如前面所述
StretchBlt 在   与BitBlt( )基本相同,但它试图伸展或压缩一个位图以适应目标
PlgBlt       从源设备上下文的指定矩形到给定设备上下文中指定平行多边形,执行颜色数据位的位块传递
FloodFill           用当前画刷填充区域
ExtFloodFill         用当前画刷填充区域。比FloodFill成员函数提供更多灵活性MaskBlt使用给定屏蔽和光栅操作对源和目标位图合并颜色数据
PatBlt           创建位特征
MaskBlt         使用给定屏蔽和光栅操作对源和目标位图合并颜色数据
实例1:
HICON hicon = AfxGetApp()->LoadStandardIcon(MAKEINTRESOURCE(IDI_QUESTION));
pDC->DrawIcon(0,0,hicon);
BOOL BitBlt(int x,int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, intySrc, DWORD dwRop);
x 指定目标矩形左上角的逻辑X坐标。Y指定目标矩形左上角的逻辑Y坐标。NWidth指定目标矩形和源位图的宽度(逻辑单位)。NHeight指定目标矩形 和源位图的高度(逻辑单位)。PSrcDC指向CDC对象的指针,标识待拷贝位图的设备上下文。如果dwRop指定不包括源的光栅操作,则它必须为 NULL。XSrc指定源位图左上角的逻辑X坐标。YSrc指定源位图左上角的逻辑Y坐标。
DwRop指定要执行的光栅操作。光栅操作代码定义GDC如何合并输出操作中的颜色,包括当前画刷、可能的源位图和目标位图。下面对dwRop列出光栅操作代码及其描述:
BLACKNESS   所有输出变黑。
DSTINVERT   反转目标位图。
MERGECOPY   使用布尔AND操作符合并特征与源位图。
MERGEPAINT   使用布尔OR操作符合并特征与源位图。
NOTSRCCOPY   拷贝反转源位图到目标。
NOTSRCERASE   反转使用布尔OR操作符合并源和目标位图的结果。
PATCOPY   拷贝特征到目标位图。
PATINVERT   使用布尔XOR操作符合并目标位图和特征。
PATPAINT   使用布尔OR操作符合并反转源位图和特征。用布尔OR操作符合并这项操作结果与目标位图。
SRCAND   使用布尔AND操作符合并目标像素和源位图。
SRCCOPY   拷贝源位图到目标位图。
SRCERASE   反转目标位图并用布尔AND操作符合并这个结果和源位图。
SRCINVERT   使用布尔XOR操作符合并目标像素和源位图。
SRCPAINT   使用布尔OR操作符合并目标像素和源位图。
WHITENESS   所有输出变白。
CDC *memDC = new CDC;
memDC->CreateCompatibleDC(pDC);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(pDC,20,20);
memDC->SelectObject(&bitmap);
pDC->BitBlt(0,0,20,20,memDC,0,0,SRCCOPY);
delete memDC;

BOOL PlgBlt(POINT lpPoint ,CDC* pSrcDC,int xSrc ,int ySrc , intnWidth ,int nHeight, CBitmap& maskBitmap,int xMask ,int yMask);
lpPoint逻辑空间中包含三个点的数组的指针。它指定了一个目标平行四边形的三个顶点。源矩形的左上角与数组中的第一个点映射,右上角与第二个点映射,第三个点指向左下角。源矩形的右下角与平行四边形未能明确表示的第四点映射。
pSrcDC源设备上下文的标识。xSrc用逻辑单位表示的源矩形左上角的X坐标。
ySrc 用逻辑单位表示的源矩形左上角的Y坐标。nWidth用逻辑单位表示的源矩形的宽度。nHeight用逻辑单位表示的源矩形的高度。maskBitmap 标识用以屏蔽源矩形颜色的可选的黑白位图。xMask黑白位图左上角的X坐标。yMask黑白位图左上角的Y坐标。

对源设备上下文指定 的矩形到给定设备上下文中平行四边形的颜色数据实行位块(bit-block)转换。如果位掩码的句柄代表一个有效的位图,函数利用该函数对源矩形的颜色 数据位进行屏蔽。平行四边形的第四个顶点(D)是将前三个点(A,B,C)定义为矢量后,经D=B+C-A计算得到。如果存在位掩码1,表示源像素色将会 拷贝给目标位图,为0表示目标位图的像素不会被改变。如果掩码矩形小于源矩形和目标矩形,函数将复制掩码模式。
在源设备上下文中允许度量形式转换和解释。但不允许选择和剪切转换,掩码位图不是黑白位图,出错。目标设备上下文的扩展模式决定了像素如何被扩展或压缩。如果源设备上下文标识了增强元文件设备上下文,记录增强元文件时,则出错。

BOOL StretchBlt(int x ,int y ,int nWidth,int nHeight,CDC*pSrcDC,intxSrc,int ySrc, int nSrcWidth,int nSrcHeight.DWORD dwRop)
将源矩形中的位图拷贝到目标矩形中,如果有必要,可以扩展或压缩该位图使其与目标矩形尺寸吻合。
如 果nSrcWidth和nWidth或nSrcHeight和nHeight的符号不同,StretchBlt将为位图创建一个镜像。如果 nSrcWidth和nWidth符号不同,函数沿X轴创建镜像。如果nSrcHeight和nHeight符号不同,函数沿Y轴创建镜像。

BOOL MaskBlt(int x ,int y,int nWidth ,int nHeight,CDC* pSrcDC,int xSrc,intySrc,CBitmap& maskBitmap,int xMask ,int yMask,DWORD dwRop);
maskBitmap在源设备上下文中黑白掩码位图与彩色位图的标识。xMaskmaskBitmap设定的掩码位图的水平像素偏移量。yMaskmaskBitmap设定的掩码位图的水平像素偏移量。
使 用给定的掩码和光栅操作组合源位图和目标位图中的彩色数据。maskBitmap设置的掩码值为1,表明dwRop指定的前景光栅操作代码应在该位置上得 以应用。maskBitmap设置的掩码值为0,表明dwRop指定的背景光栅操作代码应在该位置上得以应用。如果光栅操作需要源对象,掩码矩形必须覆盖 源矩形,否则会导致失败。如果光栅操作不需要源对象,掩码矩形必须覆盖目标矩形,否则会导致失败。
8.映射模式:
Wi n d o w s有一些映像模式允许用户以像素、英寸或毫米为单位进行绘制。然而,对于大
多数应用程序,永远也不必考虑映像模式。默认模式以像素为单位,这时的x和y为像素值。
但是,若确实需要x和y为英寸值,则必须要注意逻辑单位和设备单位之间的不同
逻辑单位是传递给绘图函数的x和y值,它们可以表示英寸或毫米;而设备单位是x和y值
在屏幕上的像素数,或者是在打印机上的点阵数。鼠标单击以设备单位返回。如果想知道用
户单击在位图上的什么位置,需要将设备单位转换为逻辑单位。当以逻辑单位方式工作时,
是工作在逻辑坐标系统中;而以设备单位方式工作时,则是设备坐标系统(也称为物理坐标系统或客户坐标系统)。
映像模式用SetMapMode ( )
MM_TEXT 这这是默认的映像模式,x和y值等于一个屏幕像素或打印机点阵。在屏幕或打印页中,正的y值向下递减
MM_HIENGLISH 这X和y值相当于屏幕上或打印页上的1 / 1 0 0 0 i n,Wi n d o w s决定当前屏幕设备的多少
个像素等同于1 / 1 0 0 0 i n。在屏幕或打印页中,正的y值向上递增
MM_LOENGLISH 这X和y值相当于设备上的1 / 1 0 0 0 i n,并且y值向上递增
MM_HIMETRIC 这X和y值相当于设备上的1 / 1 0 0 m m,并且y值向上递增
MM_LOMETRIC 这X和y值相当于设备上的1 / 1 0 m m,并且y值向上递增
MM_TWIPS 这X和y值相当于设备上的1 / 1 4 4 0 i n,并且y值向上递增这通常在文本绘制中使用,一个缇( t w i p )单位相当于1 / 2 0点

CDC类还提供了两个从一个环境向另一个环境转换的函数
DPtoLP( ) 将设备单位转换为逻辑单位
LPtoDP( ) 将逻辑单位转换为设备单位


9.要设置窗口和视口矩形,使用下面这些C D C的成员函数:
SetWindowOrg( ) 设置表示逻辑环境的矩形的左上角值
SetWindowExt( ) 设置表示逻辑环境的矩形的大小
SetViewportOrg( ) 设置表示设备环境的矩形的左上角值
SetViewportExt( ) 设置表示设备环境的矩形的大小
可以区分下面的程序的不同:
1.
     pDC->SetWindowOrg(-20,-20);
     CDC *memDC = new CDC;
     memDC->CreateCompatibleDC(pDC);
     CBitmap bitmap;
     bitmap.CreateCompatibleBitmap(pDC,20,20);
     memDC->SelectObject(&bitmap);
     pDC->BitBlt(0,0,20,20,memDC,0,0,SRCCOPY);
     delete memDC;

分享到:
评论

相关推荐

    页面画图ASP.NET 画图

    通过理解这些知识点,你将能够有效地在ASP.NET 2.0环境中使用C#进行网页画图,创建出富有视觉吸引力和交互性的网页应用。不过,随着ASP.NET的版本更新,新的技术如ASP.NET MVC和ASP.NET Core提供了更现代、高效的...

    仿windows画图程序

    在Windows操作系统中,“画图”程序是一个简单的图像编辑器,允许用户进行基本的绘图、编辑和保存图片。 【描述】中的关键词“画图”,“windows”,“vb”,“绘图”和“图形”为我们揭示了以下几个关键知识点: ...

    11、学习画图--电脑基础知识.docx

    在电脑基础知识的学习中,画图是一项非常有趣且实用的技能,尤其对于初学者而言。Windows操作系统内置了一个简单易用的画图程序,可以帮助用户轻松创作各种图像。下面我们将详细讲解如何启动画图程序以及如何进行...

    初识画图软件说课稿PPT教案.pptx

    首先,【教材分析】指出,"初识‘画图’软件"是学习画图软件的基础,对于形成从熟悉到熟练再到综合应用的知识结构至关重要。考虑到这个年龄段的学生已经具备一定的计算机基础,他们对信息技术课充满热情,乐于探索。...

    有关画图的DEMO

    总的来说,"有关画图的DEMO"可能涵盖了计算机图形学的基础知识、图形库的使用、面向对象的设计原则、事件驱动编程以及图形用户界面的实现等众多方面。通过深入学习和实践这样的DEMO,开发者可以掌握创建自定义画图...

    Android画图学习笔记

    #### 一、Android画图基础知识介绍 - **类的简介** - 在Android开发过程中,对于图形绘制的理解不仅仅局限于Google提供的官方文档,还需要深入掌握Java的基础类库,尤其是那些与图形处理相关的类。这部分内容往往...

    小白入门的基础画图函数说明

    ### 小白入门的基础画图函数说明 #### 知识点一:MATLAB中的基本绘图函数及操作 ...以上内容涵盖了MATLAB中基础画图函数的关键知识点,通过这些函数的应用,可以快速地完成各种数据的可视化工作。

    c#2008画图程序

    在C# 2008中开发一个画图程序,主要涉及到Windows Forms应用程序的基础知识,图形绘制技术,以及优化用户体验的技巧。以下是对这些知识点的详细说明: 1. **Windows Forms应用程序**:C# 2008是.NET Framework 3.5...

    C# 基本画图(包含了所有的基本画图代码)

    下面将详细讲解C#基本画图涉及的知识点。 1. **Graphics对象**:它是所有绘图操作的核心,可以从Control或Form对象获取,如`Graphics g = this.CreateGraphics();`,它提供了绘制线条、曲线、形状和文本的方法。 2...

    Visio基础知识入门教程.pdf

    Visio基础知识入门教程是Microsoft Office Visio的入门指南,旨在帮助用户快速掌握Visio的基本操作和功能。该教程涵盖了Visio的基础知识,包括如何创建和共享图表、如何创建形状、模具和模板、如何建立一些常见的...

    画图工具JAVA源代码

    首先,我们需要理解Java的基础知识。Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司)开发。它的设计理念是“一次编写,到处运行”。Java的核心特性包括类、接口、包、异常处理、垃圾...

    maple画图命令大全

    下面是Maple画图命令大全的知识点总结: 基本二维绘图命令 Maple提供了多种二维绘图命令,包括plot、plot3d、contourplot、densityplot等。其中,plot命令是最基本的二维绘图命令,可以绘制函数图、参数图、极坐标...

    MFC画图程序源码

    本篇将深入探讨MFC画图程序源码的相关知识点。 标题中的"MFC画图程序"是指使用MFC库来实现的图形绘制功能。MFC提供了CView类,它是窗口视图的基础,通常用于显示和编辑数据。在这个场景下,CView被派生出一个自定义...

    c#画图小程序

    在C#编程环境中,开发一个画图小程序是一个有趣且实用的项目,可以帮助初学者更好地理解和应用C#的基础知识,同时也可以提升对图形用户界面(GUI)设计的理解。本项目主要涉及的技术点包括Windows窗体应用程序、GDI+...

    mfc简单画图程序

    这不仅涵盖了图形绘制的基础知识,也涉及到用户界面设计、事件处理和状态管理等多个方面,是学习MFC和Windows编程的一个好实践项目。在实际开发中,可能还需要考虑其他细节,如错误处理、资源管理以及代码优化,以...

    QTcreator写画图板

    在本文档中,我们将探讨如何使用QtCreator来编写一个画图板程序。画图板是一个基础且功能丰富的应用...作为初学者,从画图板项目入手,能够有效地学习和实践Qt框架的基本操作,为进一步深入学习GUI编程打下坚实的基础。

    简单的画图工具

    无论是为了学习绘画基础知识,还是快速完成一个简单的图形项目,它都是一个值得信赖的选择。对于那些不追求高级特效,只求简单、快捷的用户来说,这款工具无疑是一个理想之选。在数字化时代,掌握这样的基础绘图工具...

    JavaWindows画图程序

    1. **Java基础**:首先,你需要对Java编程语言有基本的了解,包括语法、类、对象、方法等概念。Java是一种面向对象的语言,因此理解类和对象如何交互至关重要。 2. **Swing库**:Java的Swing库提供了一组丰富的组件...

    matlab画图 基本操作

    【MATLAB 画图基本操作】MATLAB 是一种强大的数学计算和数据分析软件,它提供了丰富的图形绘制功能。在MATLAB中,你可以轻松地绘制出各种类型的图表,包括简单图形、函数图像以及参数图像。 首先,了解MATLAB的操作...

    《认识画图软件》的教学设计

    1. **画图软件的基本概念**:画图软件是Windows操作系统自带的一个简单图形编辑工具,用于基本的图像绘制和编辑。 2. **教学目标**: - **知识与技能**:让学生了解Windows系统中的画图软件,学会启动和退出软件,...

Global site tag (gtag.js) - Google Analytics