使用VC6.0构建最简单的MFC程序
通过这个例子可以加深对MFC的CWinApp和CFrameWnd的了解。
1. 使用应用程序向导产生一个空的“Win32 Application”Project;
2. 添加头文件“StdAfx.h”,内容是 #include <afxwin.h>
3. 添加源文件“StdAfx.cpp”,内容是 #include "StdAfx.h"
4. 执行Build,会看到LinkError,打开Project|Setting,在General里,选择“Use MFC in Shared DLL”,再次执行Build,一切OK。WinMain内嵌在MFC的链接库里。
5. 按F5调试执行,会出现一个“Unhandled exception …”,通过CallStack可以找到原因:AfxGetThread()和AfxGetApp()返回的都是NULL。需要实现一个全局的CWinApp对象。
6. 添加一个新Class:“class CMyWinApp : public CWinApp”,头文件和源文件分别是Hello.cpp Hello.h,并在Hello.cpp里实例一个全局对象:CMyWinApp theApp。CWinApp只能实例一个对象,在其构造函数里加了ASSERT,防止多次实例。
7. Build之后,再按F5调试执行,程序一闪就结束了,也没有错误。在Output窗口里可以找到一句“Warning: m_pMainWnd is NULL in CWinApp::Run - quitting application.”,是因为没有主窗口,所以程序直接退出了。
8. 重载CWinApp::InitInstance,在里面直接m_pMainWnd = new CFrameWnd;是不行的,因为CFrameWnd的构造函数里没有调用Create,窗口不会被创建。
9. 在CMyWinApp::InitInstance()里写入Code:
BOOL CMyWinApp::InitInstance()
{
CFrameWnd *pMainFrame;
pMainFrame = new CFrameWnd;
pMainFrame->Create(NULL, "Hello MFC",
WS_OVERLAPPEDWINDOW, pMainFrame->rectDefault, NULL);
m_pMainWnd = pMainFrame;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
编译后运行,可以看到一个窗口:
即,可以直接使用MFC的CFrameWnd类实现一个窗口,但是CWinApp不能直接使用,必须派生一个用户类,因为Windows程序的启动顺序是:实例全局对象,WinMain,…,如果不实例CWinApp,找不到机会创建窗口,而派生之后,就可以重载CWinApp::InitInstance函数,AfxWinMain里会调用这个函数。
10. 使用File|New,选择Resource Script,添加一个资源文件,在资源文件里添加一个Menu,在Menu的Property的ID里填上MenuName字串"MainMenu",然后修改InitInstance:
BOOL CMyWinApp::InitInstance()
{
CFrameWnd *pMainFrame;
pMainFrame = new CFrameWnd;
pMainFrame->Create(NULL, "Hello MFC",
WS_OVERLAPPEDWINDOW, pMainFrame->rectDefault, NULL, "MainMenu");
m_pMainWnd = pMainFrame;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
编译运行后就可以看到菜单了。如果Menu使用的整数ID,使用MAKEINTRESOURCE转换为字符串。
11. 到现在为止,因为直接使用的CFrameWnd,这个程序什么也不能干,要实现用户功能,我们要从CFrameWnd派生一个自己的类CMainFram,我打算在窗口里实现一个字符串从天而降的功能,即重载CFrameWnd::OnPaint函数。
12. 首先给CMainFram加上消息映射表,在类声明里加上DECLARE_MESSAGE_MAP(),在类实现文件里添加
BEGIN_MESSAGE_MAP(CMainFram, CFrameWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
对于标准的Windows消息,其消息名称和消息函数都是固定的,而且CFrameWnd(或其基类)已经都实现了这些消息响应的虚函数,只要在BEGIN… END… 里写入消息映射描述,就会添加到消息映射表里。
注意,对于CView类来说,ON_WM_PAINT()在文件:C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC\ VIEWCORE.CPP的MESSAGE_MAP已经写好了,用户不用写,但对于CFrameWnd来说,必须写出来才能加到消息映射表里。
13. 实现函数OnPaint,就可以沿着Client区域画一个红色的矩形框。
void CMainFram::OnPaint()
{
CPaintDC dc(this);
RECT rect;
CPen *poOldPen;
CPen oNewPen(PS_SOLID, 1, RGB(255,0,0));
poOldPen = dc.SelectObject(&oNewPen);
GetClientRect(&rect);
dc.Rectangle(&rect);
dc.SelectObject(poOldPen);
}
14. 在Resource添加一个简单的对话框,添加一个OnAbout消息响应函数:
void CMainFram::OnAbout()
{
CDialog dlg(IDD_DIALOG_ABOUT, this);
dlg.DoModal();
}
点击Help|About时,就会弹出资源里的对话框,可见对于没有复杂控件的简单对话框,可以直接使用CDialog类,不需要派生。
温馨提示:内容为网友见解,仅供参考
基于对话框的MFC应用程序怎么建立?
1. 使用应用程序向导产生一个空的“Win32 Application”Project;2. 添加头文件“StdAfx.h”,内容是 #include <afxwin.h> 3. 添加源文件“StdAfx.cpp”,内容是 #include "StdAfx.h"4. 执行Build,会看到LinkError,打开Project|Setting,在General里,选择“Use MFC in Shared DLL”,再次执行...
如何使用CMenu类创建菜单
1、创建一个基于对话框的MFC应用程序。命名为Exam1 2、在主窗口类Exam1Dlg.cpp中定义一个菜单成员变量。CMenu m_Menu;3、在Resource.h中定义两个菜单的消息命令。define ID_MENUHELP 35610 define ID_MENUTELL 35611 4、在主窗口的头文件Exam1Dlg.h中添加消息处理函数:afx_msg void help()...
vs2010怎么创建一个基于对话框的MFC应用程序
选择MFC应用程序 在弹出的窗口中的已安装模板选择MFC,在右侧选择MFC应用程序。设置工程名和存储路径 在下面的名称处输入工程的名,在位置处输入工程在磁盘上的位置。下一步 在弹出的窗口中选择下一步。设置基于对话框 在弹出的窗口中选择基于对话框。完成工程创建 然后点击完成,就完成了工程的创建。就会...
求助:使用 MFC 开发图形界面程序
一、创建基于对话框的MFC程序 先打开Visual Studio 2013开发环境,如图1所示。依次点击【文件】> 【新建】> 【项目】创建一个新的项目。接下来进入创建项目界面如图2所示。依次选择【已安装】 > 【模版】 > 【Visual C++】 > 【MFC】来到MFC程序类型选择界面,选择【MFC应用程序】这一列。在创建项目...
在visual c++ 6.0中怎样建立一个基于对话框的MFC应用程序
新建工程选择MFC类型工程,会自动生成一个空白的MFC程序,一切选择默认即可,就是点下面的完成
利用vc创建基于对话框模式的应用程序,设计简单功能明确的界面,实现即 ...
服务器端:第一步:VC创建MFC对话框应用程序。第二步:在对话框中拖一个用于显示客户端发送的数据显示框。 第三步:程序启动创建socket监听,等待客户端连接。 第四步:创建接受线程等待客户端发送数据上来,并显示。客户端:第一步:和服务器端是一样的。第二步:和服务器端是一样的。第三步:...
如何使用vs2010mfc应用程序
选择MFC应用程序 在弹出的窗口中的已安装模板选择MFC,在右侧选择MFC应用程序。4 设置工程名和存储路径 在下面的名称处输入工程的名,在位置处输入工程在磁盘上的位置。5 下一步 在弹出的窗口中选择下一步。6 设置基于对话框 在弹出的窗口中选择基于对话框。7 完成工程创建 然后点击完成,就完成了工程...
如何用VC++6.0创建MFC对话框应用程序
方法\/步骤 1 首先,安装好VC++6.0,具体安装方式在此不做介绍,然后打开软件,点击如下图标 2 文件-新建-工程中选择 MFC AppWizard(exe),用来创建MFC对话框应用程序,如下图中所示 3 在下图数字2中输入工程名称,数字3中选择工程你要存放的位置,然后选择确定 4 完成上述确定后,会显示下面的对话...
mfc中AfxMessageBox的使用
1、首先打开电脑,新建一个基于对话框的应用程序,应用程序命名为AfxMessageBoxDemo,如下图所示。2、在打开的对话框中进行如下的处理,添加退出按钮和一个静态文本框,如下图所示。3、然后双击退出按钮对退出按钮添加响应函数,响应函数如下。4、程序运行如下。5、点击退出按钮后,程序运行如下,这样就完成...
SetPortsvc.exe什么程序?
建立项目:打开VC,建立一个基于对话框的MFC应用程序SCommTest;2.在项目中插入MSComm控件 选择Project菜单下Add To Project子菜单中的 Components and Controls…选项,在弹出的对话框中双击Registered ActiveX Controls项(稍等一会,这个过程较慢),则所有注册过的ActiveX控件出现在列表框中。 选择Microsoft ...