typedef DWORD COLORREF; // 0x00bbggrr #define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16))) BYTE bRed, // red component of color BYTE bBlue // blue component of color COLORREF red, gray; red = RGB(255, 0, 0); gray = RGB(128, 128,128); #define GetRValue(rgb) (LOBYTE(rgb)) #define GetGValue(rgb) (LOBYTE(((WORD)(rgb)) >> 8)) #define GetBValue(rgb) (LOBYTE((rgb)>>16)) typedef ULONG_PTR DWORD_PTR; pDC->SetPixel(10, 10, RGB(0, 255, 0)); <!--[if !supportLists]-->l <!--[endif]-->创建笔对象:创建笔类CPen对象的方法有如下两种: <!--[if !supportLists]-->n <!--[endif]-->使用构造函数CPen CPen( int nPenStyle, int nWidth, COLORREF crColor ); <!--[if !supportLists]-->u <!--[endif]-->nPenStyle为笔的风格,可取值: PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PSDASHDOTDOT <!--[if !supportLists]-->u <!--[endif]-->nWidth为笔宽,与映射模式有关,使用缺省映射时为像素数,若nWidth = 0,则不论什么映射模式,笔宽都为一个像素; <!--[if !supportLists]-->u <!--[endif]-->crColor为笔的颜色值。 <!--[if !supportLists]-->n <!--[endif]-->使用成员函数CreatePen BOOL CreatePen( int nPenStyle, int nWidth, COLORREF crColor ); <!--[if !supportLists]-->n <!--[endif]-->缺省的笔为单像素宽的实心黑色笔 <!--[if !supportLists]-->l <!--[endif]-->将笔对象选入设备上下文:为了能使用我们所创建的笔对象,必须先将它选入设备上下文,这可以调用设备上下文类CDC的成员函数SelectObject来完成: <!--[if !supportLists]-->l <!--[endif]-->使用设备上下文画线状图:画线状图以及面状图的边线,所使用的是当前设备上下文中的笔对象。线状图有直线、折线、矩形、(椭)圆(弧)等,详见4)(2) <!--[if !supportLists]-->l <!--[endif]-->将笔对象从设备上下文中放出:为了能删除使用过的笔对象,必须先将它从设备上下文中释放出来后,然后才能删除。释放的方法是装入其他的笔对象(一般是重新装入原来的笔对象)。例如 <!--[if !supportLists]-->l <!--[endif]-->删除笔对象:为了能删除笔对象,必须先将其从设备上下文中释放。删除方法有如下几种: <!--[if !supportLists]-->n <!--[endif]-->调用笔类CDC的成员函数DeleteObject删除笔的当前内容(但是未删除笔对象,以后可再用成员函数CreatePen在笔对象中继续创建新的笔内容)。如 <!--[if !supportLists]-->n <!--[endif]-->使用删除运算符delete将笔对象彻底删除,如delete pen; <!--[if !supportLists]-->n <!--[endif]-->自动删除:若笔对象为局部变量,则在离开其作用域时,会被系统自动删除 for (int j = 0; j <= 255; j++) { HSLtoRGB(m_hue, m_sat, 255 - j, r, g, b); // 自定义的函数 pen.CreatePen(PS_SOLID, 0, RGB(r, g, b)); pOldPen = pDC->SelectObject(&pen); pDC->MoveTo(0, j); pDC->LineTo(40, j); |