关于SelectObject的使用
void CMy10View::OnDraw(CDC* pDC)
{
pDC->MoveTo (10,10);
pDC->LineTo (110,10);
CPen newPen(PS_DASHDOTDOT,10,(COLORREF) 192); //红色的笔宽度为10
CPen * pOldPen=pDC->SelectObject (&newPen);
//在将新对象选进设备环境的同时返回指向前一次被选对象的指针。作用保存原来的对象,以便完成任务时恢复它。
。。。
pDC->SelectObject (pOldPen);//把原来的对象恢复
}
由于SelectObject函数返回的GDI C++对象指针具有临时性,当程序的空闲处理阶段或者控制函数返回时应用程序框架会将临时的C++对象删除,我们不能简单的把这一指针保存在类的数据成员中,而应该借助GetSafeHdc函数将它转化为Windows的句柄,以便持久的保存GDI的标识。(不太理解)
通过句柄保存gdi对象
void CMy10View::OnDraw(CDC* pDC)
{
HPEN m_hPen; //一个指向CPen对象的指针
pDC->MoveTo (10,10);
pDC->LineTo (110,10);
CPen newPen(PS_DASHDOTDOT,10,(COLORREF) 192); //红色的笔宽度为10
CPen * pOldPen=pDC->SelectObject (&newPen); //在将新对象选进设备环境的同时返回指向前一次被选对象的指针。作用保存原来的对象,以便完成任务时恢复它。
m_hPen=(HPEN)pOldPen->GetSafeHandle ();//获得并保存原来对象的句柄
pDC->MoveTo (10,20);
pDC->LineTo (110,20);
pDC->SelectObject (CPen::FromHandle (m_hPen));//把原来的对象恢复,和例子7-2不同的是通过句柄
pDC->MoveTo (10,30);
pDC->LineTo (110,30);
}
恢复gdi对象句柄是为了以后的操作仍然使用原来的gdi对象
源文档 <http://www.wangchao.net.cn/bbsdetail_71180.html>
分享到:
相关推荐
) BeginPath dc '开始记录窗体轮廓路径 SetBkMode dc TRANSPARENT '设置背景为透明模式这是必须有的 OldFont = SelectObject(dc NewFont) TextOut dc00 "VB6"3 SelectObject dc OldFont EndPath dc ...
最后,使用SelectObject将把创建的兼容位图选进兼容内存设备上下文环境中,并使用BitBlt函数把桌面内容绘制到兼容位图上 详细介绍参考:https://blog.csdn.net/sheziqiong/article/details/131568207
java语言编写,网上选课系统 本程序能够正确运行,windows 2000/xp
brushOld=pDC->SelectObject(&brush); pDC->Ellipse(x - SQUARESIZE , y + SQUARESIZE , x + SQUARESIZE , y - SQUARESIZE); pDC->SelectObject(brushOld); brush.DeleteObject(); } else { ...
代码使用SelectObject函数,将设备上下文的当前画刷设置为第一个画刷对象。 代码使用Polygon函数,根据点坐标数组绘制一个实心三角形,填充颜色为第一个画刷对象的颜色。 代码使用GradientFill函数,根据点坐标数组...
POldBrush = PDC->SelectObject (&Brush); // draw figure: PDC->Rectangle (m_X1, m_Y1, m_X2, m_Y2); // remove pen/brush: PDC->SelectObject (POldPen); PDC->SelectObject (POldBrush); } IMPLEMENT...
基本的创建画笔, 以桌面为DC #include int main( void ) ... HPEN hpen_old = (HPEN)SelectObject( hdc, hpen1 ); Ellipse( hdc, 40, 200, 40+200, 200+50 ); SelectObject( hdc, hpen_old ); return 0; }
brush:= SelectObject(aa,getstockobject(null_brush)); Rectangle(aa,0,0,form1.Width ,form1.Height ); SelectObject(aa,brush); SelectObject(aa,pen); DeleteObject(bb); ReleaseDc(handle,canvas....
OldBrush := SelectObject(dc, GetStockObject(NULL_BRUSH)); Rectangle(dc, 0, 0, Self.Width, Self.Height); SelectObject(dc, OldBrush); SelectObject(dc, OldPen); DeleteObject(Pen); ReleaseDC(Handle, ...
CPen *pOldPen = pDC->SelectObject(&penOther); CBrush *pOldBrush = pDC->SelectObject(&brMain); CPoint ptCenter = m_rcRegion.CenterPoint(); int nRadius = m_nRadius - 8; for(int i = 0; i ; i++) {...
GDI截屏和DX截屏,保存到BMP文件
//add these to store return of SelectObject() calls CBitmap* pOldMemBmp = NULL; CBitmap* pOldMaskBmp = NULL; HBITMAP hOldTempBmp = NULL; memDC.CreateCompatibleDC(&dc); tempDC....
抽象出画笔,通过调用CDC类的SelectObject函数传参后,才能使用 2. 画笔创建时需要指定的宽度(像素为单位)、颜色(R/G/B 3源色,使用宏RGB(,,,)创建,取值0~255)、线型(实线--宏PS_SOLID, 虚线--宏PS_DASH,...
使用Rectangle函数 刷背景,SELECTOBJECT 选择 对象,制作背景
画直线 : CClientDC dc(this);... dc.SelectObject(&pen););//选入设备描述表 CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(BLACK_BRUSH));//填充色 dc.SelectObject(pBrush);//选入设备描述表
Private Sub ExtractIconComposite(inPic As PictureBox) On Error Resume Next Dim ipic As IPicture Dim icoinfo As ICONINFO Dim pDesc As pictDesc Dim hDCWork ... SelectObject hDCWork, hBMOldWork
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, _ ByVal hObject As Long) As Long'API函数声明 Private Sub Form_Load() Dim B'声明变量 Me.AutoRedraw = True B = ...
通常,我们都是使用GDI绘图对象类所创建的对象进行绘制各种图形的, 好象画家手里的画笔,而设备环境就是用什么样的画纸。 CPen 画笔是一种用来画线及绘制有形边框的工具,用户可以指定它的颜色及厚度,并且可以...
HBRUSH saved_brush = (HBRUSH)SelectObject(_hdc, brush); // 用选入设备环境中的刷子绘制给定的矩形区域 PatBlt(_hdc, 0, 0, _disp_xmax, _disp_ymax, PATCOPY); // 恢复原来画刷 SelectObject(_hdc, saved_...
::SelectObject(hdc,hPen); switch(choice) { case 1: ::SelectObject(hdc,hBrush1); choice = 2; break; case 2: ::SelectObject(hdc,hBrush2); choice =...