博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC++技术内幕(二)
阅读量:7107 次
发布时间:2019-06-28

本文共 2120 字,大约阅读时间需要 7 分钟。

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++做任何扩展。

转载于:https://www.cnblogs.com/lxshanye/archive/2013/05/20/3088569.html

你可能感兴趣的文章
Decorator 装饰器小记
查看>>
Centos6.5搭建Wiki
查看>>
linux 清空文件内容的方法
查看>>
2018“硅谷技划”随笔(三):人工智能火热背后的真正温度
查看>>
综合技术 --ORM
查看>>
我的友情链接
查看>>
[C++]STL萃取学习
查看>>
httpClient学习
查看>>
函数指针和指针函数的区别
查看>>
贪吃蛇小游戏
查看>>
搭建Mycat实现读写分离
查看>>
第四课-第四讲04_04_grep及正则表达式
查看>>
Runtime Method Swizzling开发实例汇总
查看>>
4.22 磁盘限额
查看>>
录音文件转文字,有了这个工具,再也不用担心记不上笔记了
查看>>
ubuntu下helloworld
查看>>
什么是区块链
查看>>
MyEclipse 2014 加速启动设置
查看>>
UI设计师都关注的字体设计技巧
查看>>
Gdtool为您解答微信公众号手机无法直接下载APK文件是怎么回事
查看>>