MFC(二)——消息机制与作图

消息机制

  • 在Windows SDK中,消息是通过消息循环的方式来进行处理
  • 在MFC中,消息通过消息映射的机制来进行处理
  • 具体过程如下:每个消息都会附带一个指针指向消息的窗口句柄,通过该句柄找到对应的C++对象的指针,并将该指针传入基类交由 WindowProc 函数来处理(这是一个虚函数),该函数调用 OnWndMsg 函数,这才是对消息处理的核心函数。

    MFC运行过程中会先在头文件中判断在 DECLARE_MESSAGE_MAP 之上有没有消息映射函数的声明,之后在源文件中判断在 BEGIN_MESSAGE_MAPEND_MESSAGE_MAP 之间有没有消息相应映射的宏。如果全都具备,就会调用消息处理函数

作图

  • DC:
    全称Device Context设备描述表,C++中在所有类前加字母C,即CDC。
    要在窗口中输出文字或者显示图形,就需要用到设备描述表,即DC。DC是一个包含设备(物理输出设备,如显示器,以及设备驱动程序)信息的结构体,在Windows平台下,所有的图形操作都是利用DC来完成的。
    设备描述表是一个Windows数据结构,它包含了一个设备(比如显示器和打印机)绘图属性的相关信息。所有的绘图操作的调用都是通过一个设备描述表类型的对象来实现,这个类对象封装了Windows API(Application Programming Interface,应用程序编程接口)函数中关于划线、作图和输入输出文本的的相关操作。设备描述表允许在窗口上进行与设备无关的绘图操作,设备描述表可以用在往屏幕、打印机或者图元文件的绘图操作。

  • 方法一:

     HDC hdc;
     hdc = ::GetDC(m_hWnd);
     MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NUll);
     LineTo(hdc,point.x,point.y);
     ::ReleaseDC(m_hWnd,hdc);
  • 方法二:
    CDC *pDC = GetDC();
    pDC->MoveTo(m_ptOrigin);
    pDC->LineTo(point);
    ReleaseDC(pDC);
  • 方法三:
    CClientDC可以自动调用 GetDCReleaseDC,是CDC类派生出来的
     CClientDC dc(this);
     dc.MoveTo(m_ptOrigin);
     dc.LineTo(point);
  • 方法四:
    CWindowDC可以自动调用 GetDCReleaseDC,并且可以在整个屏幕(包括客户区和非客户区)作图,是CDC类派生出来的
    //在View内画图
    //CWindowDC dc(this);
    //在整个程序内画图
    //CWindowDC dc(GetParent());
    //在整个屏幕画图
    //CWindowDC dc(GetDesktopWindow());
    dc.MoveTo(m_ptOrigin);
    dc.LineTo(point);

画笔、画刷

  • 画笔
    CPen pen(PS_SOLID,1,RGB(255,0,0));
    CClientDC dc(this);
    CPen *pOldPen = dc.SelectObject(&pen);
    dc.MoveTo(m_ptOrigin);
    dc.LineTo(point);
    dc.SelectObject(pOldPen);
  • 画刷
    CBrush brush(RGB(255,0,0));
    CClientDC dc(this);
    dc.FillRect(CRect(m_ptOrigin,point),&brush);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值