CDC中的SelectObject

、看MSDN中的解释:

Selects an object into the device context(选择一个对象到设备上下文中去).

[cpp]  view plain copy
  1. CPen* SelectObject(  
  2.    CPen* pPen   
  3. );  
  4. CBrush* SelectObject(  
  5.    CBrush* pBrush   
  6. );  
  7. virtual CFont* SelectObject(  
  8.    CFont* pFont   
  9. );  
  10. CBitmap* SelectObject(  
  11.    CBitmap* pBitmap   
  12. );  
  13. int SelectObject(  
  14.    CRgn* pRgn   
  15. );  
  16. CGdiObject* SelectObject(  
  17.    CGdiObject* pObject  
  18. );  

 

参数:

pPen

A pointer to a CPen object to be selected.

pBrush

A pointer to a CBrush object to be selected.

pFont

A pointer to a CFont object to be selected.

pBitmap

A pointer to a CBitmap object to be selected.

pRgn

A pointer to a CRgn object to be selected.

pObject

A pointer to a CGdiObject object to be selected.

 

返回值:

A pointer to the object being replaced. This is a pointer to an object of one of the classes derived fromCGdiObject, such as CPen, depending on which version of the function is used.

 

返回一个指向被代替的对象的指针。这个真正指向的对象是重载于CGdiObject类的一种,比如CPen,具体以来与所使用的函数版本。

 

2、测试代码

[cpp]  view plain copy
  1. void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)  
  2. {  
  3.     // TODO: Add your message handler code here and/or call default  
  4.     m_ptBegin=point;//m_ptBegin是类的成员,类型为CPoint  
  5.   
  6.     CView::OnLButtonDown(nFlags, point);  
  7. }  
  8.   
  9. void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)  
  10. {  
  11.     // TODO: Add your message handler code here and/or call default  
  12.     CPen pen(PS_SOLID, 1, RGB(255, 0, 0));  
  13.     CClientDC dc(this);  
  14.     CPen* pOldPen=dc.SelectObject(&pen);//保存原始的CPen,即黑色的CPen  
  15.     dc.MoveTo(m_ptBegin);  
  16.     dc.LineTo(point);  
  17.     dc.SelectObject(pOldPen);//恢复原始的CPen  
  18.     dc.MoveTo(m_ptBegin);  
  19.     dc.LineTo(point.x+100, point.y);  
  20.     CView::OnLButtonUp(nFlags, point);  
  21. }  

 

3、运行结果:

 

在Windows的GDI(图形设备接口)CDC类提供了一系列用于绘图和处理图形的函数,其包括获取位图数据的方法。获取位图数据通常是通过在CDC对象上使用相关的成员函数来完成的。以下是一个基本的步骤,用于从CDC获取位图数据: 1. 创建一个与CDC关联的内存设备上下文(Memory Device Context,MDC),即CBitmap对象。 2. 使用CBitmap对象在内存创建一个兼容的位图。 3. 选择新的位图到MDC,这通常是通过调用CDC的`SelectObject`函数完成的。 4. 将CDC的内容绘制到这个位图上,比如可以使用`BitBlt`函数。 5. 从MDC检索位图数据,这通常涉及到锁定位图,然后复制位图的像素数据。 这里是一个简单的示例代码片段,演示了如何使用CDC获取位图数据: ```cpp CDC memDC; // 内存设备上下文对象 CBitmap bitmap; // 位图对象 BITMAPINFOHEADER bmi = {0}; // 位图信息头 // 准备位图信息头结构 bmi.biSize = sizeof(BITMAPINFOHEADER); bmi.biWidth = width; // 位图宽度 bmi.biHeight = -height; // 位图高度,负值表示从下向上绘制 bmi.biPlanes = 1; bmi.biBitCount = 24; // 假设使用24位颜色 bmi.biCompression = BI_RGB; // 无压缩位图 bmi.biSizeImage = 0; bmi.biXPelsPerMeter = 0; bmi.biYPelsPerMeter = 0; bmi.biClrUsed = 0; bmi.biClrImportant = 0; // 创建内存设备上下文和位图 memDC.CreateCompatibleDC(pDC); // pDC是一个CDC对象 bitmap.CreateCompatibleBitmap(pDC, width, height); // 将位图选进内存设备上下文 CBitmap* pOldBitmap = memDC.SelectObject(&bitmap); // 将屏幕上的内容绘制到内存设备上下文 pDC->BitBlt(0, 0, width, height, &memDC, 0, 0, SRCCOPY); // 锁定位图并获取位图数据 void* pPixels = NULL; BITMAP bitmapInfo; bitmap.GetBitmap(&bitmapInfo); pPixels = memDC.GetBits(); // 此处可以对pPixels进行进一步处理 // 最后,恢复设备上下文的原始位图 memDC.SelectObject(pOldBitmap); ``` 在上述代码,`GetBits()`方法被调用来获取位图数据。这个方法返回一个指向位图数据的指针。在使用完位图数据之后,应该解锁位图,并且确保不要删除位图或内存设备上下文,直到完成位图数据的使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值