没有合适的资源?快使用搜索试试~ 我知道了~
MFC入门初学者MFC的音符
需积分: 11 14 下载量 110 浏览量
2010-04-12
13:09:07
上传
评论
收藏 201KB PDF 举报
温馨提示
试读
19页
初学者MFC的音符,该文章为学习了C 和C++以及有SDK 编程基础的,但还未学习MFC 的人员使用
资源推荐
资源详情
资源评论
- 1 -
VC 精华教程: MFC 入门系列
该文章为学习了 C 和 C++以及有 SDK 编程基础的,但还未学习 MFC 的人员使用,我们开始使用一个
基本的内容开始:
全部的代码如下:
#include
class sample:public CFrameWnd
{
public:
sample()
{
Create(NULL,"MFC Window");
MessageBox("My MFC Window","CFrame constructor",MB_OK);
}
};
class App:public CWinApp
{
public:
BOOL InitInstance();
BOOL ExitInstance();
};
BOOL App::InitInstance()
{
MessageBox(0,"My MFC Window","InitInstance",MB_OK|MB_ICONASTERISK);
sample *obj;
obj=new sample;
m_pMainWnd=obj;
obj->ShowWindow(SW_SHOWMAXIMIZED);
return TRUE;
}
BOOL App::ExitInstance()
- 2 -
{
MessageBox(0,"My Window","ExitInstance",MB_OK|MB_ICONHAND);
return TRUE;
}
App a;
你只需将以上代码拷贝下来,在 VC++6.0 编译器,建一个 Window32 工程,使用 MFC 链接库编译即
可。
具体步骤:打开 VC++6.0,点击主菜单 File(文件)-〉New(新建) 弹出一个对话框,我们选择 win32
Application(win32 应用程序),再工程文本框给它起一个名字 MyMFC,点击确定。在确认信息的对话框
里选择空工程 an empty project 点确定。这样我们就建了一个 win32 应用程序这样一个类型的工程。下
面我们在这个工程里建一个 C++文件。点击菜单 File(文件)-〉New(新建) 弹出一个对话框,选择 C++ source
文件(C++源文件),再文件文本框里给它起个名字 MyMFC,点击确定,这是我们将上面的代码拷入,编译
链接。你会发现有 3 个错误。
nafxcwd.lib(thrdcore.obj):error LNK2001:unresolved external symbol_endthreadex
nafxcwd.lib(thrdcore.obj):error LNK2001:unresolved external symbol_beginthreadex
Debug/MyMFC.exe:fatal error LNK1120:2 unresolved externals
那么,这是因为没有使用 MFC 类库。我们现在导入。点击菜单(project)工程-〉setting 设置,弹出一
个对话框,有一个下拉列表框,里面是 Not Using MFC,我们把它改为 Using MFC in a Static Library,点击
确定,再编译,运行,那么有这样一个窗体出现。下面是该程序的解释。
在以上的程序中,只使用了两个类 CFrameWnd 和 CWinApp,我们先看第一个类:
class sample:public CFrameWnd
{
public:
sample()
{
Create(NULL,"MFC Window");
MessageBox("My MFC Window","CFrame constructor",MB_OK);
- 3 -
}
};
第一个类 sample 继承了 CFrameWnd 类,CFrame 类是 MFC 类库中的一个类,用它来代表窗体框架,
我们先用 sample 类继承它,在构造函数调用了 Create 这个函数,在运行 Create 这个函数时调用的是
CFrameWnd 类中的函数,是 MFC 写好的函数,CFrameWnd 中封装了 CreateWindow 这个 API 函数为它
的成员函数 Create(),它们的参数都是相似的。但你会问,CreateWindow 有 11 个参数,而这里的 Create 函
数只用了两个参数,因为这里的 Create 有两个参数为必选参数,后面的参数有默认值。
由MSDN 的定义可以看出
BOOL Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle =
WS_OVERLAPPEDWINDOW, const RECT& rect = rectDefault, CWnd* pParentWnd = NULL, LPCTSTR
lpszMenuName = NULL, DWORD dwExStyle = 0, CCreateContext* pContext = NULL );
后面的参数都带有一个等号和一个默认的值。
我们再看在看第二个类,继承 CWinApp 类的 App 类。
class App:public CWinApp
{
public:
BOOL InitInstance();
BOOL ExitInstance();
};
在这个类中仅仅重写了两个函数,一个 InitInstance(),一个 ExitInstance(),这个类是控制整个应用程
序的,所以称为 CWinApp 类,是不可或缺的一个类。而且要运行程序,要将该类实例化。实例化会自动
调用构造函数,并调用 InitInstance()这个函数(调用该函数是 MFC 写好的, InitInstance()并不是凭空就调用
的,而是 MFC 包装了 API 函数 WinMain,在全局对象实例化后(App a; ),就进入 WinMain 函数,在里面
由 MFC 这个框架已经写好对 InitInstance()的调用,我们进入 MFC 的源码即可看到),因为该函数是一个
虚函数,所以我们实例化继承 CWinApp 类的 App 类时,会自动调用 App::InitInstance()(如果不明白,请
复习 c++的虚函数),这样就开始了一个应用程序实例的进程。来看看 App::InitInstance()函数。
- 4 -
BOOL App::InitInstance()
{
MessageBox(0,"My MFC Window","InitInstance",MB_OK|MB_ICONASTERISK);
sample *obj;
obj=new sample;
m_pMainWnd=obj;
obj->ShowWindow(SW_SHOWMAXIMIZED);
return TRUE;
}
在这个函数,首先一个消息框出来,使用 MessageBox 函数,然后声明一个 sample 类的指针 obj,第三
行,为该 obj 分配内存,即实例化,类的实例化要调用构造函数的初始化,程序的控制点到达 sample 类
的 sample 函数:
sample()
{
Create(NULL,"MFC Window");
MessageBox("My MFC Window","CFrame constructor",MB_OK);
}
这里才创建窗体,并且有一个消息框出现,然后程序控制点回到 App::InitInstance()的
m_pMainWnd=obj;位置。
这一块是个难点,刚开始学的时候,我不明白 m_pMainWnd,你从哪里来,来了干什么。它从类
CWinThread 里来,它的定义为 CWnd* m_pMainWnd;
它凭什么直接用?class CWinApp : public CWinThread 因为 MFC 中的 CWinApp 类继承于
CwinThread,子类中用父类的成员变量,儿子用老爸的钱,当然可以拉,所以它可以直接用。
它有什么用,我们看:
sample *obj;
obj=new sample;
这两个是在 InitInstance()这个成员函数声明的,也就是说,这个函数结束了,这个指针变量必然要析
剩余18页未读,继续阅读
资源评论
ihuping
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功