标题:告别vc++中的dos???
只看楼主
双云
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2004-11-1
 问题点数:0 回复次数:3 
告别vc++中的dos???
你好,我们用vc++编写的程序,即用console qpplication编写的都是dos界面,我想弄成windows界面的程序,请问怎么办?如果是说用mfc appwizard[exe]编写,请问有这方面的资料么?听说用VF可以调用vc++,具体是什么?
搜索更多相关主题的帖子: dos windows mfc 界面 编写 
2006-03-10 11:16
幽园香客
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:231
专家分:142
注 册:2006-2-27
得分:0 
偶也关注!

做个有用的人!
2006-03-10 15:32
双云
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2004-11-1
得分:0 

介绍
(原创) 一个最简单的例子,来讲诉MFC

读者评分 137 评分次数 37

正文
该文章为学习了C和C++以及有SDK编程基础的,但还未学习MFC的人员使用,我们开始使

用一个基本的内容开始:

全部的代码如下:

#include <afxwin.h>

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()
{
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,点击确定。在确

信息的对话框里点确定。这样我们就建了一个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);
}
};

第一个类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写好的),

因为该函数是一个虚函数,所以我们实例化继承CWinApp类的App类时,会自动调用

App::InitInstance()(如果不明白,请复习c++的虚函数),这样就开始了一个应用程序实例的进

程。来到的App::InitInstance()函数

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()这个成员函数声明的,也就是说,这个函数结束了,这个指针变量

必然要析构,而这个指针是代表窗体框架的,这个指针释放了,那么,窗体也跟着消失了,

所以,我们要把这个地址留下来,就给了m_pMainWnd这个指针了,他是在线程类中的,有

线程他就在,程序结束了,没线程了,他也消失了,窗体框架也就结束了。

到现在我们还只是在内存中,创建了一个窗体,没有显示出来,那么

obj->ShowWindow(SW_SHOWMAXIMIZED);

通过这一句,用指针调用类的成员函数,在CFrameWnd中,还封装了ShowWindow这个API函

数,用法和API函数一样。

在return TRUE;这句之后该函数结束。

程序进入了运行状态,在关闭程序的时候,会调用

ExitInstance()这个函数,该函数仅仅输出一个消息框就结束了。那么这个简单的MFC程序就

讲到这里了。


2006-03-13 13:07
双云
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2004-11-1
得分:0 


2006-03-13 13:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-49508-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.694683 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved