问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

基于对话框的MFC应用程序怎么建立?

发布网友 发布时间:2022-09-16 05:29

我来回答

4个回答

热心网友 时间:2023-11-03 07:53

使用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类,不需要派生。

热心网友 时间:2023-11-03 07:53

在new project的时候选择MFC Application,然后在下一步中选择Dialog based,其他的一步一步向下就OK了!

热心网友 时间:2023-11-03 07:53

new project>
MFC Application>
Dialog based>
next>
next>

热心网友 时间:2023-11-03 07:54

在向导里选择对话框就行了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 水洒到雷神键盘上了修理费用是多少? 买了不到两个月的雷神G5键盘上面的D,FGTRZXCV还有回车键失灵了,我已经拆开把里面的灰尘清理 我女朋友患传染病,不愿意见我,也不告诉我在哪个医院,两个月了,我有她的手机号,,qq号,而且 p2p申请发布清盘后,投资人的资金还能正常回款吗?借款人还需要还款吗... 礼仪的解释 什么颜色的包包,百搭一切颜色的正装? 网上买iphone6港版怎么保修 网上买的iphone 怎么维修 网上买的苹果去哪里维修 dhl国际快递官网是什么? 深圳步聚离大朗有多远 东莞大朗广晟通物流有限公司靠谱吗 东莞大朗有哪些物流城? 深圳市腾跃达国际物流有限公司怎么样? 绿茶什么样的经济实惠味道又不错呢 性价比高的茶叶推荐下? 淘宝的认证信息怎么改 我是钢筋工做火车让拿扎丝钩吗? 钢筋单手出丝扎丝怎么折- 问一问 钢钩是什么 梦见蛇盘在自己店里是什么意思 六个月宝宝难入睡,是什么原因造成的? 六个月宝宝难入睡,是什么原因导致的? 6个月宝宝睡眠不好是什么原因 大专毕业了没有什么目标,不知道去干什么,什么也不会,怎么办 感觉自己废了? 梦见拉面条什么意思 梦见自己在拉面条是什么意思 梦到自己在拉面条预示着什么 梦见自己拉拉面是什么意思 梦见带知至子买拉面条吃什么意思 梦见在锅里捞拉面好不好 海洋对气候有着直接的影响 14年韩国电影当男人恋爱时中的歌曲 当男人恋爱时第10集4人跳舞的歌曲叫什么名字 黄政民主演的电影《当男人恋爱时》的插曲 叫什么? 当男人恋爱时第12集弟弟在舞蹈教室跳舞的歌曲是什么哦?? 当男人恋爱时 宋承宪和申世京主演 第三集大概14到15分钟的背景歌曲叫什么?女生唱的,轻柔的。 T波(低平)是什么意思? 新灶开火第一顿要吃几个菜呢? 新宅开火第一顿吃什么好呢? 化妆品出库区需要哪些设备