zoukankan      html  css  js  c++  java
  • VC++技术内幕(二)

    1、先建立一个Win32 Application的应用程序。
    2、选择Project->Add to project->Files,分别创建一个名为MyApp.h和一个名为MyApp.cpp的文件。

    3、添加代码:

    //MyApp.h:

    class CMyApp : public CWinApp

    {

    public:

        virtual BOOL InitInstance();

    };

    class CMyFrame : public CFrameWnd

    {

    public:

        CMyFrame();

    protected:

        afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

        afx_msg void OnPaint();

        DECLARE_MESSAGE_MAP()

    };

    //MyApp.cpp:

    # include <afxwin.h>

    # include "myapp.h"

    CMyApp theApp;

    BOOL CMyApp::InitInstance()

    {

        m_pMainWnd = new CMyFrame();

        m_pMainWnd->ShowWindow(m_nCmdShow);

        m_pMainWnd->UpdateWindow();

        return TRUE;

    }

    BEGIN_MESSAGE_MAP(CMyFrame,CFrameWnd)

        ON_WM_LBUTTONDOWN()

        ON_WM_PAINT()

    END_MESSAGE_MAP()

    CMyFrame::CMyFrame()

    {

        Create(NULL,"MyApp Application");

    }

    void CMyFrame::OnLButtonDown(UINT nFlags, CPoint point)

    {

        TRACE("Entering CMyFrame::OnLButtonDown - %lx, %d, %d /n",

           (long) nFlags, point.x, point.y);

    }

    void CMyFrame::OnPaint()

    {

        CPaintDC dc(this);

        dc.TextOut(0,0,"Hello World!");

    }

    4、编译运行,报错。为什么呢?原来还没有添加MFC的支持,在Project Setting选项General属性页选择”Use MFC in a Static Library"
    ①WinMain函数:每个应用程序都要有WinMain函数,看不到是因为被隐藏在应用程序框架内部。

    ②CMyApp类:CMyApp类的对象代表一个应用程序,程序定义了一个全局的CMyApp对象theApp,CmyApp决定theApp大部分行为。
    ③应用程序的启动:当开始运行应用程序时WINDOWS会调用WinMain函数,WinMain会查找该应用程序的全局对象theApp。(全局对象在主程序运行之前就构造好了)
    ④CMyApp::InitInstance成员函数:发现theApp后自动调用重载的虚函数InitInstance,它又会调用相应函数来完成主窗口的构造和显示工作。派生类中一定要重载该函数,CWinApp据此确定到底需要怎样的主框架窗口。
    ⑤CWinApp::Run成员函数:WinMain在调用InitInstance之后紧接着调用Run函数,它被隐藏在基类中负责传递应用程序的消息给相映的窗口。

    ⑥CMyFrame类:此类的对象代表着应用程序的主窗口。它的构造函数调用基类CFrameWnd的Create函数创建具体的窗口结构。调用基类CFrameWnd的Create成员函数时,Windows将创建具体的窗口结构,同时应用程序框架会将所创建的窗口结构连接到C++对象中。 为了显示窗口,必须调用基类中ShowWindow和UpdateWindow函数。
    ⑦CMyFrame::OnLButtonDown函数:演示消息处理机制,当鼠标坐键被按下这一事件被映射到CMyFrame的OnLButtonDown函数上。

    ⑧CMyFrame::OnPaint函数:应用程序每次重新绘制窗口都需要调用此函数,将显示"Hello World!"放在这里是因为每次窗口发生变化时保证"Hello World!"被显示。

    ⑧关闭应用程序:用户关闭应用程序时会有一系列事件发生。首先CMyFrame对象被删除,然后退出Run,进而退出WinMain,最后删除CMyApp对象。

    ⑨m_pMainWnd:主窗口,在MFC中定义CWnd* m_pMainWnd;

    MFC库消息映射

    MFC库应用程序没有选用虚函数来处理Windows消息,而是通过一些宏,将消息映射到派生类中相应成员函数上。

    原因:采用虚函数作为消息函数,需维持虚函数表,对每个函数,不管是否被重载,都要记录一入口项。采用宏映射则不需要C++做任何扩展。

  • 相关阅读:
    算法的时间复杂度
    二叉树递归建立和遍历
    数据挖掘之分类算法---knn算法(有matlab例子)
    C链表之创建简单静态链表
    ID3决策树算法原理及C++实现(其中代码转自别人的博客)
    adobe reader安装完成之前被中断,错误代码150210解决方法
    Oracle性能诊断艺术-读书笔记
    先对结果集排序然后做update、delete操作
    索引聚簇因子相关
    直方图及low_value、high_value
  • 原文地址:https://www.cnblogs.com/lxshanye/p/3088569.html
Copyright © 2011-2022 走看看