OnDraw(CDC* pDC)

OnDraw(CDC* pDC)
函数对应用程序窗口的客户区进行绘图的所有代码都必须写在这个函数中


TextOut(int x,int y,CString& str)函数
参数x为文本显示在应用程序窗口用户区的水平位置
参数y为文本显示在应用程序窗口用户区的垂直位置
str为要显示的字符串,他是一个CString类的对象;
 pDC->TextOut(50,50,"asdadsda");

设置文本颜色
virtual COLORREF SetTextColor(COLORREF crColor);
参数crColor是要使用的文本颜色的RGB值,函数的返回值为原来的颜色

获得当前文本颜色
COLORREF GetTextColor() const;

设置文本的背景颜色
virtual COLORREF SetBkColor(COLORREF crColor);
参数crColor是要使用的文本背景颜色的RGB值,函数的返回值为原来的背景颜色


获得当前背景颜色
COLORREF GetBkColor()  const;


设置文本字符的间距
int SetTextCharacterExtra(int nCharExtra);
参数nCharExtra用来设置文本字符的额外间距,以像素为单位,函数的返回值为字符的原间距

获得当前字符间距
int GetTextCharExtra() const;

设置文本的对齐方式
UINT SetTextAlign(UINT nFlags);
参数nFlags的值可以为:
TA_LEFT              左对齐
TA_CENTER            中间对齐
TA_RIGHT             右对齐
TA_TOP               顶部对齐
TA_BOTTOM            底部对齐
TA_BASELINE          以基线对齐
前3个用于水平方向
后3个用于垂直方向


字体和CFont类略


LineTo (
x, y)
参数

x
一个整数,指示相对于父影片剪辑的注册点的水平位置。
y
一个整数,指示相对于父影片剪辑的注册点的垂直位置。

pDC->LineTo(123,456);

语法

Ellipse(x, y, RadiusX, RadiusY )

描述
绘制一个实心的椭圆按照指定位置x,y为圆心,以 RadiusX 和 RadiusY指定的半径。
pDC
->
(250, 421, 120, 100 );



画笔CPen类
CPen类的构造函数:
CPen(int style,int width,SOLORREF color);
COLORREF RGB(
             BYTE   bRed,
             BYTE   bGreen,
             BYTE   bBlue
);.


style样式

PS_SOLID                      画实线
PS_DASH                      画虚线
PS_DOT                         画点线
PS_DASHDOT                画点划线
PS_DASHDOTDOT         画双点划线

PS_NULL                       笔画不可见的画笔

PS_INSIDEFRAME         在一个图形内画边线的画笔


在创建了画笔之后,必须使用CDC的成员函数SelectObject把画笔载入DC,以替换DC中原来配置的默认画笔,然后才能使用该画笔绘制线条。
CPen* SelectObject(CPen*  pPen);  
参数为欲载入画笔的指针,返回值为原来画笔的指针。以便在新画笔使用完后恢复原画笔。即在程序中应有如下代码:
CPen newPen(PS_DASHDOT,width,color);//创建新画笔
CPen* oldPen=pDC->SelectObject(&newPen);//载入新画笔并把旧画笔存入指针变量
oldPen

在使用完新画笔绘制线条后,如果要恢复原画笔,则需要使用如下代码:
pDC->SelectObject(oldPen);

注意:除了PS_SOLID外其他的样式只在参数width=1是有效


画刷:CBrush
CBrush类的构造函数
CBrush(COLORREF color);
和CBrush(int style,COLORREF color);

参数style填充样式:
HS_BDIAGONAL以自左下角至右上角的45度斜线填充
HS_CROSS以十字交叉线填充
HS_DIAGCROSS以互相交叉的45度线填充
HS_FDIAGONAL以自左上角至右下角的45度斜线填充
HS_HORIZONTAL以水平线填充
HS_VERTICAL以垂直线填充
与使用画笔一样,在创建了画刷之后,如果要使用该画刷,则应使用CDC的成员函数:
CBrush * SelectObjet(CBrush* pBrush);
把画刷选入设备描述环境。并要定义一个画刷指针,用来保存该函数返回的旧画刷指针
CBrush  newBrush(
COLORREF
color);//这句可换成
                                                       //CBrush  newBrush(int style,
COLORREF
color);
CBrush* oldBrush=pDC->SelectObject(&newBrush);
;//加入自己想要的语句
;
pDC->SelectObject(oldBrush);



Rectangle 构造函数

 Rectangle(x:Number, y:Number, width:Number, height:Number)

创建一个新的 Rectangle 对象,其左上角由 xy 参数指定。如果调用此构造函数时不使用任何参数,将创建一个 xywidthheight 属性均设置为 0 的矩形。

参数

x:Number - 矩形左上角的 x 坐标。

y:Number - 矩形左上角的 y 坐标。

width:Number - 矩形的宽度,以像素为单位。

height:Number - 矩形的高度,以像素为单位。


绘制矩形代码:
    CRect  rect(30,30,300,300);
    pDC->Rectangle(&rect);





绘图模式:
设置绘图模式的CDC成员函数为:
                SetROP2(int nDrawMode);
其中,参数为绘图模式,返回只为原来的绘图模式
常用的绘图模式如下:

R2_BLACK                   无论画笔颜色如何,只用黑色绘图
 
R2_WHITE                   无论画笔颜色如何,只用白色绘图
R2_NOP                       无论画笔颜色如何,只用无色绘图
R2_NOT                       用与背景颜色相反的颜色绘图
R2_NOTCOPYPEN       用与画笔色相反的颜色绘图
R2_COPYPEN             用画笔颜色绘图
R2_XORPEN                用把画笔色与背景色进行异或运算后的颜色绘图



CDC的其他派生类
窗口用户区设备描述环境类CClientDC
CPaintDC类的对象只能在视图类的OnDraw函数中使用,而
CClientDC类的对象可以在除了OnDraw函数之外的任何地方使用

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
种子填充算法,自己写的,希望对大家有用 // 种子法View.cpp : implementation of the CMyView class // #include "stdafx.h" #include "种子法.h" #include "种子法Doc.h" #include "种子法View.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif struct point { int x; int y; }p[10]={200,100,100,200,150,100,200,300,250,100,300,200,-1}; point stack[1024000]; int top; void push(int x,int y) { if(top>1024000)exit(0); stack[top].x=x; stack[top].y=y; top++; } void pop(int &x,int &y) { if(top==0) exit(0); x=stack[top-1].x; y=stack[top-1].y; top--; } void gettop(int &x,int &y) { if(top==0) exit(0); x=stack[top-1].x; y=stack[top-1].y; } ///////////////////////////////////////////////////////////////////////////// // CMyView IMPLEMENT_DYNCREATE(CMyView, CView) BEGIN_MESSAGE_MAP(CMyView, CView) //{{AFX_MSG_MAP(CMyView) ON_WM_LBUTTONDOWN() //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMyView construction/destruction CMyView::CMyView() { // TODO: add construction code here } CMyView::~CMyView() { } BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CMyView drawing void CMyView::OnLButtonDown(UINT nFlags, CPoint point) { int x,y; CClientDC dc(this); // TODO: Add your message handler code here and/or call default origin=point; push(origin.x,origin.y); while(top!=0) { pop(x,y); if(dc.GetPixel(x-1,y)!=0)//不等于边界色 { dc.SetPixel(x-1,y,0);//染成黑色 push(x-1,y); //加入栈 } if(dc.GetPixel(x+1,y)!=0) { dc.SetPixel(x+1,y,0); push(x+1,y); } if(dc.GetPixel(x,y-1)!=0) { dc.SetPixel(x,y-1,0); push(x,y-1); } if(dc.GetPixel(x,y+1)!=0) { dc.SetPixel(x,y+1,0); push(x,y+1); } } CView::OnLButtonDown(nFlags, point); } void CMyView::OnDraw(CDC* pDC) { CClientDC dc(this); dc.TextOut(1,5,"请为每个区选种子,务必在图形内"); CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); int i; for(i=0;p[i+1].x!=-1;i++) { dc.MoveTo(p[i].x,p[i].y); dc.LineTo(p[i+1].x,p[i+1].y); } dc.MoveTo(p[i].x,p[i].y); dc.LineTo(p[0].x,p[0].y); // TODO: add draw code for native data here } ///////////////////////////////////////////////////////////////////////////// // CMyView printing BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CMyView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CMyView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // CMyView diagnostics #ifdef _DEBUG void CMyView::AssertValid() const { CView::AssertValid(); } void CMyView::Dump(CDumpContext& dc) const { CView::Dump(dc); } CMyDoc* CMyView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc))); return (CMyDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CMyView message handlers

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值