关于各种dc的实例简单使用
2011-01-21 20:59
197 查看
用win32API画线
HDC hdc;
hdc=::GetDC(m_hWnd);
MoveToEx(hdc,m_pOrigin.x,m_pOrigin.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);*/
用封装的cdc画线
/* CDC *pdc=GetDC();
pdc->MoveTo(m_pOrigin);
pdc->LineTo(point);
ReleaseDC(pdc);*/
用cdc派生的CClientDC画线
CClientDC dc(this); //dc和view联系
CClientDC dc(GetParent()); //将dc和frame联系
dc.MoveTo(m_pOrigin);
dc.LineTo(point);
这就不需要我们去调用dc了,在它对象构造析构的时候自动完成
用cdc派生的CWindowDC 画线
CWindowDC dc(this);
CWindowDC dc(GetParent());
dc.MoveTo(m_pOrigin); //这也不需要我们去调用dc了
dc.LineTo(point);
这也不需要我们去调用dc了,在它对象构造析构的时候自动完成
注意,它能访问到整个屏幕,客户区和非客户区(标题栏和菜单)
CWindowDC dc(GetDesktopWindow());我们就可以画到桌面,主要看
你将dc和哪个窗口联系起来了
想画其他颜色的线条,可以创建一个新画笔,然后选到dc中
用cpen类
CPen pen(PS_GEOMETRIC ,1,RGB(0,0,255)); (用后面参数构造一个画笔对象,这都忘了。。。)
CClientDC dc(this);
CPen *pOldpen=dc.SelectObject(&pen);
dc.MoveTo(m_pOrigin);
dc.LineTo(point);
dc.SelectObject(pOldpen);
//将现在的画笔选入设备上下文,然后返回一个旧画笔的指针,我们保存起来,用完这个画 笔,再把以前的选回去
画刷,填充
CBrush brush(RGB(255,0,0));
CClientDC dc(this);
dc.FillRect(CRect(m_pOrigin,point),&brush);
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1); //用位图填充
CBrush brush(&bitmap);
CClientDC dc(this);
dc.FillRect(CRect(m_pOrigin,point),&brush);
CClientDC dc(this);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//(强制转换)获取空画刷句柄再转为指针
CBrush *pOldbrush=dc.SelectObject(pBrush);
dc.Rectangle(CRect(m_pOrigin,point));
dc.SelectObject(pOldbrush);
fromhandle 从句柄转到指针
fillrect和rectangle方法是不同的,前者提供一个画刷,所以不用选中画刷,而后者,我们需要创建画刷再选入
实现连续划线功能:声明一个bool变量,buttondown为真,buttonup为假,
CClientDC dc(this);
if(m_bDraw==TRUE) //为真的时候,响应鼠标移动这个信息
{
dc.MoveTo(m_pOrigin);
dc.LineTo(point);
m_pOrigin=point; 、、不断地画两点间的小线段,线段尾点是下一段的起点,直到buttonup,不再画
}
CClientDC dc(this);
CPen pen(PS_SOLID ,1,RGB(255,0,0));
CPen *pOldpen=dc.SelectObject(&pen); //复习填充更换画笔的代码
if(m_bDraw==TRUE)
{
dc.MoveTo(m_pOrigin);
dc.LineTo(point);
m_pOrigin=point;
}
dc.SelectObject(pOldpen);
HDC hdc;
hdc=::GetDC(m_hWnd);
MoveToEx(hdc,m_pOrigin.x,m_pOrigin.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);*/
用封装的cdc画线
/* CDC *pdc=GetDC();
pdc->MoveTo(m_pOrigin);
pdc->LineTo(point);
ReleaseDC(pdc);*/
用cdc派生的CClientDC画线
CClientDC dc(this); //dc和view联系
CClientDC dc(GetParent()); //将dc和frame联系
dc.MoveTo(m_pOrigin);
dc.LineTo(point);
这就不需要我们去调用dc了,在它对象构造析构的时候自动完成
用cdc派生的CWindowDC 画线
CWindowDC dc(this);
CWindowDC dc(GetParent());
dc.MoveTo(m_pOrigin); //这也不需要我们去调用dc了
dc.LineTo(point);
这也不需要我们去调用dc了,在它对象构造析构的时候自动完成
注意,它能访问到整个屏幕,客户区和非客户区(标题栏和菜单)
CWindowDC dc(GetDesktopWindow());我们就可以画到桌面,主要看
你将dc和哪个窗口联系起来了
想画其他颜色的线条,可以创建一个新画笔,然后选到dc中
用cpen类
CPen pen(PS_GEOMETRIC ,1,RGB(0,0,255)); (用后面参数构造一个画笔对象,这都忘了。。。)
CClientDC dc(this);
CPen *pOldpen=dc.SelectObject(&pen);
dc.MoveTo(m_pOrigin);
dc.LineTo(point);
dc.SelectObject(pOldpen);
//将现在的画笔选入设备上下文,然后返回一个旧画笔的指针,我们保存起来,用完这个画 笔,再把以前的选回去
画刷,填充
CBrush brush(RGB(255,0,0));
CClientDC dc(this);
dc.FillRect(CRect(m_pOrigin,point),&brush);
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1); //用位图填充
CBrush brush(&bitmap);
CClientDC dc(this);
dc.FillRect(CRect(m_pOrigin,point),&brush);
CClientDC dc(this);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//(强制转换)获取空画刷句柄再转为指针
CBrush *pOldbrush=dc.SelectObject(pBrush);
dc.Rectangle(CRect(m_pOrigin,point));
dc.SelectObject(pOldbrush);
fromhandle 从句柄转到指针
fillrect和rectangle方法是不同的,前者提供一个画刷,所以不用选中画刷,而后者,我们需要创建画刷再选入
实现连续划线功能:声明一个bool变量,buttondown为真,buttonup为假,
CClientDC dc(this);
if(m_bDraw==TRUE) //为真的时候,响应鼠标移动这个信息
{
dc.MoveTo(m_pOrigin);
dc.LineTo(point);
m_pOrigin=point; 、、不断地画两点间的小线段,线段尾点是下一段的起点,直到buttonup,不再画
}
CClientDC dc(this);
CPen pen(PS_SOLID ,1,RGB(255,0,0));
CPen *pOldpen=dc.SelectObject(&pen); //复习填充更换画笔的代码
if(m_bDraw==TRUE)
{
dc.MoveTo(m_pOrigin);
dc.LineTo(point);
m_pOrigin=point;
}
dc.SelectObject(pOldpen);
相关文章推荐
- 关于UIWebView的简单使用实例
- 关于使用Spring和hibernate开发web程序的配置说明和简单实例的详细说明
- [Python][flask][flask-login]关于flask-login中各种API使用实例
- GDB调试器的简单使用(通过实例一步一步的说明该如何去调试)
- dwr简单使用实例
- 关于ListView的使用——从简单到深入
- JavaWeb学习之什么JSP、JSP是如何工作的、JSP语言(各种指令和九大内置对象)、EL表达式简单使用(5)
- Openresty服务器使用lua脚本写的Hello World简单实例
- Python Sleep休眠函数使用简单实例
- Python Sleep休眠函数使用简单实例
- 关于未将对象引用设置到对象实例简单原理分析,与解决方法
- js入门·循环与判断/利用函数的简单实例/使用对象/列举对象属性的名称
- ReactNative学习实例(二)输入框,滚动条,列表的简单使用
- hive 各种join使用实例
- hashmap简单实例(个人使用经验)
- java开源时间框架joda-time简单使用的junit实例
- 使用JSP制作一个超简单的网页计算器的实例分享
- Lucene实例(各种Query使用的例子)
- PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
- Android Kotlin的使用及简单实例