• 笔记一则


     1.
    虚函数是动态绑定的,意思是说,虚函数通过哪个对象被调用,具体被调用的函数

    就由那个对象的动态类型决定.
    虚函数是动态绑定的,但缺省参数是静态绑定的。这意味着你最终可能调用的是一

    个定义在派生类,但使用了基类中的缺省参数值的虚函数.

    2.
    ASCII码对应的字符char 范围为0~255。其中

    3。
    在Direct X 5.0中共分六个部分:DirectDraw—管理游戏的视频输出、Direct 3D—

    管理游戏的3D图形、DirectPlay—管理游戏的网络通讯、DirectSound—管理游戏的

    声音输出、DirectInput—管理游戏摇杆控制、Direct Setup—管理游戏的安装。

    4。
    消息响应的方式:
    1)在基类中针对每种消息做一个虚函数,当子类对消息响应时候,只要在子类中重

    写这个虚函数即可。缺点:MFC类派生层次很多,如果在基类对每个消息进行虚函数

    处理,那么从基类派生的每个子类都将背负一个庞大的虚表,这样浪费内存,故MFC

    没有采取这中方式而采取消息映射方式。
    2)消息映射方式:MFC在后台维护了一个句柄和C++对象指针对照表,当收到一个消

    息后,通过消息结构里资源句柄(查对照表)就可找到与它对应的一个C++对象指针

    ,然后把这个指针传给基类,基类利用这个指针调用WindowProc()函数对消息进行

    处理,WindowProc()函数中调用OnWndMsg()函数,真正的消息路由及处理是由

    OnWndMsg()函数完成的。由于WindowProc()和OnWndMsg()都是虚函数,而且是用派

    生类对象指针调用的,由多态性知最总终调用子类的。在OnWndMsg()函数处理的时

    候,根据消息种类去查找消息映射,判断所发的消息有没有响应函数,具体方式是

    到相关的头文件和源文件中寻找消息响应函数声明(从注释宏//{{AFX_MSG

    (CDrawView)...//}}AFX_MSG之间寻找),消息映射(从宏BEGIN_MESSAGE_MAP

    (...)....END_MESSAGE_MAP()之间寻找),最终找到对应的消息处理函数。当然,

    如果子类中没有对消息进行处理,则消息交由基类处理。
    说明:
    virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
    virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam,

    LRESULT* pResult);

    5/
    有关绘图

    1,使用SDK获取DC句柄:
    HDC hdc;
    hdc=::GetDc(m_hWnd);//获取DC句柄
    MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
    LineTo(hdc,point.x,point.y);
    ::ReleaseDC(m_hWnd,hdc);//释放DC

    2,利用CDC类指针和CWin类成员函数获取DC。
    CDC *pDC=GetDC();
    pDC->MoveTo(m_ptOrigin);
    pDC->LineTo(point);
    ReleaseDC(pDC);

    3,利用CClientDC对象。(CClientDC类从CDC类派生来的)
    CClientDC dc(this);
    dc.MoveTo(m_ptOrigin);
    dc.LineTo(point);
    说明:
    The CClientDC class is derived from CDC and takes care of calling the

    Windows functions GetDC at construction time and ReleaseDC at destruction

    time. This means that the device context associated with a CClientDC

    object is the client area of a window.

    4,利用CWindowDC对象。(CWindowDC类从CDC类派生来的)
    CWindowDC dc(this);//
    dc.MoveTo(m_ptOrigin);
    dc.LineTo(point);
    说明:
    The CWindowDC class is derived from CDC. It calls the Windows

    functionsGetWindowDC at construction time andReleaseDC at destruction

    time. This means that a CWindowDC object accesses the entire screen area

    of a CWnd (both client and nonclient areas).

    5,GetParent()得到父窗口指针;GetDesktopWindow()得到屏幕窗口指针。

    6,利用画笔改变线条颜色和类型:
    CPen pen(PS_DOT,1,RGB(0,255,0));//构造画笔对象
    CClientDC dc(this);CPen *pOldPen=dc.SelectObject(&pen);//将画笔选入DC
    dc.MoveTo(m_ptOrigin);
    dc.LineTo(point);
    dc.SelectObject(pOldPen);//恢复先前的画笔

    7,使用画刷(通常利用画刷去填充矩形区域):
    使用单色画刷
    CBrush brush(RGB(255,0,0));//构造画刷对象
    CClientDC dc(this);
    dc.FillRect(CRect(m_ptOrigin,point),&brush);//用指定的画刷去填充矩形区域

    使用位图画刷
    CBitmap bitmap;//构造位图对象(使用前需要初试化)
    bitmap.LoadBitmap(IDB_BITMAP1);//初试化位图对象
    CBrush brush(&bitmap);//构造位图画刷
    CClientDC dc(this);
    dc.FillRect(CRect(m_ptOrigin,point),&brush);//用指定的位图画刷去填充矩形

    区域

    使用透明画刷
    CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//

    获取透明画刷对象指针
    CClientDC dc(this);
    CBrush *pOldBrush=dc.SelectObject(pBrush);//将透明画刷选入DC
    dc.Rectangle(CRect(m_ptOrigin,point));
    dc.SelectObject(pOldBrush);//释放透明画刷
    说明:
    The GetStockObject function retrieves a handle to one of the predefined

    stock pens, brushes, fonts, or palettes.
    HGDIOBJ GetStockObject(
      int fnObject   // type of stock object
    );

    Returns a pointer to a CBrush object when given a handle to a Windows

    HBRUSH object.
    static CBrush* PASCAL FromHandle( HBRUSH hBrush );//FromHandle是一个静态

    方法,故可用CBrush::FromHandle()形式调用。
    注意点:
    1)静态方法不属于某一个具体对象,而属于类本身,在类加载的时候就已经为类静

    态方法分配了代码去,故可用CBrush::FromHandle()形式调用。
    2)静态方法中,不能引用非静态的数据成员和方法。
    3)静态数据成员需要在类外单独做初始化,形式如: 变量类型 类名::变量名=初

    始值;

    8,CDC::SetROP2方法:
    int SetROP2( int nDrawMode );
    Sets the current drawing mode.

  • 相关阅读:
    java字符串的遍历以及字符串中各类字符的统计
    Java Jvm运行机制原理
    为什么面试要问 hashmap 的原理
    HashMap的实现原理
    redis两种持久化方式的优缺点
    2018No-java面试知识
    从架构演进的角度聊聊spring cloud都做了些什么?
    MySQL索引优化
    2018java面试知识汇总
    多线程—7种同步方法
  • 原文地址:https://www.cnblogs.com/chenzhonghua021/p/858156.html
Copyright © 2020-2023  润新知