GDI画笔对象
GDI中的画笔对象包含了直线和曲线的宽度、形式、颜色、端点形状、交点以及样式。你画出来的线是啥颜色,好宽,都由它决定的。
缺省的DC画笔是单个象素宽的黑色画笔。一旦画笔被选入设备上下文后,只有颜色是可以改变的,可通过下面两个函数来访问设置和得到DC画笔颜色。
COLORREF SetDCPenColor(HDC hdc,COLORREF crColor);
GetDCPenColor函数获取设备上下文中DC画笔的当前颜色,SetDCPenColor函数设置一个新的颜色,并返回旧的颜色。
COLORREF crCol;
crCol = GetDCPenColor(hdc);//默认为黑色
MoveToEx(hdc,0,200,NULL);
LineTo(hdc,100,200);//绘制一条黑色的直线
HGDIOBJ hld=SelectObject(hdc,GetStockObject(DC_PEN));
SetDCPenColor(hdc,RGB(255,0,0));
MoveToEx(hdc,0,220,NULL);
LineTo(hdc,100,220);//绘制一条红色的直线
SelectObject(hdc,hOld);
::ReleaseDC(this->m_hWnd,hdc);
上面的GetStockObject是啥?
原来GDI定义了四种预定义的画笔对象,叫库存画笔,为了获取库存画笔,那就要用到GetStockObject这个函数了。GetStockObject(BLACK_PEN)黑色、GetStockObject(White_PEN)白色、GetStockObject(NULL_PEN)什么都不画、GetStockObject(DC_PEN)。
下面用下面两个函数来创建画笔。
HPEN CreatePenIndirect(CONST LOGPEN *lgPen);
fnPenStyle画笔样式有下面这些样式。
PS_SOLID---------------纯色,所有象素都画
PS_DASH---------------虚线
PS_DOT-----------------点画线
PS_DASHDOT---------虚线和点画线交替出现
PS_DASHDOTDOT---虚线和两交点画线交替出现
PS_NULL----------------不画线
PS_INSIDEFRAME----纯色,所有象素都画
HPEN p_SOLID,p_DASH,p_DOT,p_DASHDOT,p_DASHDOTDOT;
p_SOLID=CreatePen(PS_SOLID,1,RGB(255,0,0));
p_DASH=CreatePen(PS_DASH,1,RGB(255,0,0));
p_DOT=CreatePen(PS_DOT,1,RGB(255,0,0));
p_DASHDOT=CreatePen(PS_DASHDOT,1,RGB(255,0,0));
p_DASHDOTDOT=CreatePen(PS_DASHDOTDOT,1,RGB(255,0,0));
hOld=SelectObject(hdc,p_SOLID);
MoveToEx(hdc,0,10,NULL);
LineTo(hdc,10,10);
SelectObject(hdc,p_DASH);
MoveToEx(hdc,0,20,NULL);
LineTo(hdc,0,20);
SelectObject(hdc,p_DOT);
MoveToEx(hdc,0,30,NULL);
LineTo(hdc,0,30);
SelectObject(hdc,p_DASHDOT);
MoveToEx(hdc,0,40,NULL);
LineTo(hdc,0,40);
SelectObject(hdc,p_DASHDOTDOT);
MoveToEx(hdc,0,50,NULL);
LineTo(hdc,0,50);
SelectObject(hdc,hOld);
DeleteObject(p_SOLID);
DeleteObject(p_DASH);
DeleteObject(p_DOT);
DeleteObject(p_DASHDOT);
DeleteObject(p_DASHDOTDOT);
::ReleaseDC(this->m_hWnd,hdc);
先吃饭去了