【实操】第一个C++窗口程序
2015-06-28 17:08
323 查看
解决方案(参照):
1.新建MFC Active控件
(1)无法编译
(2)将属性-配置属性-链接器-逐用户重定向【否->是】 无效。
将同级目录下的注册输出改为否,可以编译,但是无法运行。
命令行注册.oxc文件,依然无效。
(3)最终放弃。
2.新建MFC app文件。
(1)打开主文件头文件,程序崩溃。
(2)在vs2010命令行下,运行devenv /Resetsettings。 成功。
理论基础(揣摩):
(MFC应用程序框架主要类)
1.CHelloWorldApp类处理消息,将收到的消息分发给相应的对象。
2.视图类CHelloWorldView用来显示文档类CHelloWorldDoc中的数据,并根据对视图类的操作修改文档类的数据。
3.CMainFrame是视图CHelloWorldView的父窗口,视图CHelloWorldView就显示在CMainFrame的客户区中。
(MFC应用程序流程)
1.先进行一些初始化过程
(定义全局对象theApp:CHelloWorldApp theApp;。调用CWinApp和CHelloWorldApp的构造函数后,进入WinMain函数(位于appmodul.cpp中)。)
在TCHAR.h中,有此定义:#define _tWinMain WinMain,所以这里的_tWinMain就是WinMain函数。它调用了AfxWinMain函数(位于WinMain.cpp中)。
->InitInstance函数:
2.再注册并创建窗口
InitInstance中的ProcessShellCommand函数又调用了CMainFrame的LoadFrame函数注册并创建了窗口
3.然后显示、更新窗口
执行完ProcessShellCommand函数以后,调用了m_pMainWnd的ShowWindow和UpdateWindow函数显示并更新框架窗口。
4.进入消息循环,消息都由窗口过程函数处理。
消息循环了,上面的AfxWinMain函数中调用了pThread的Run函数(位于THRDCORE.cpp中),在Run中包含了消息循环。
PumpMessage中通过调用GetMessage、TranslateMessage、DispatchMessage等建立了消息循环并投递消息。
窗口过程函数AfxWinProc。
(消息机制)
1. CWnd的派生类都可以接收到标准Windows消息、通知消息和命令消息。命令消息还可以由文档类等接收。
2.用户自定义消息是实际上就是用户定义一个宏作为消息:其实我们一般所说的消息是狭义上的消息值,也就是一个无符号整数,经常被定义为宏。
3.消息映射表:HelloWorld的CMainFrame
BEGIN_MESSAG_MAP和END_MESSAGE_MAP之间的内容成为消息映射入口项
·在CMainFrame的实现文件中添加消息映射表
·在类的定义文件MainFrm.h中还会添加一个宏调用:DECLARE_MESSAGE_MAP()
<添加消息处理函数>
(映射入口-消息-处理函数)
1.在类定义中加入消息处理函数的函数声明,注意要以afx_msg打头。例如MainFrm.h中WM_CREATE的消息处理函数的函数声明:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);。
2.在类的消息映射表中添加该消息的消息映射入口项。例如WM_CREATE的消息映射入口项:ON_WM_CREATE()。
3.在类实现中添加消息处理函数的函数实现。例如,MainFrm.cpp中WM_CREATE的消息处理函数的实现:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
4.实例:定义消息宏->#define WM_UPDATE_WND (WM_USER+1);
再到消息映射表中添加消息映射入口项:ON_MESSAGE(WM_UPDATE_WND, &CMainFrame::OnUpdateWnd);
然后在MainFrm.h中添加消息处理函数的函数声明:afx_msg LRESULT OnUpdateWnd(WPARAM wParam, LPARAM lParam);
最后在MainFrm.cpp中实现此函数。
具体实现(实操):
<创建对话框>
第一,创建对话框资源,主要包括创建新的对话框模板、设置对话框属性和为对话框添加各种控件;
第二,生成对话框类,主要包括新建对话框类、添加控件变量和控件的消息处理函数等。
(1)实例:新建-MFC-MFC应用程序-应用程序类型(基于对话框)
(2)*.RC->dialog-idd_*_dialog->click[dialog]-capton名字
(3)工具箱添加static text + static control + edit text(设置有意义的ID)
在edit text添加变量
添加button,双击button添加处理事件
UpdateData(TRUE);//数据交换机制(将Input数据<-->OutPut数据)
变量更新操作。
UpdateData(FALSE);
解决方案(参照):
1.新建MFC Active控件
(1)无法编译
(2)将属性-配置属性-链接器-逐用户重定向【否->是】 无效。
将同级目录下的注册输出改为否,可以编译,但是无法运行。
命令行注册.oxc文件,依然无效。
(3)最终放弃。
2.新建MFC app文件。
(1)打开主文件头文件,程序崩溃。
(2)在vs2010命令行下,运行devenv /Resetsettings。 成功。
理论基础(揣摩):
(MFC应用程序框架主要类)
1.CHelloWorldApp类处理消息,将收到的消息分发给相应的对象。
2.视图类CHelloWorldView用来显示文档类CHelloWorldDoc中的数据,并根据对视图类的操作修改文档类的数据。
3.CMainFrame是视图CHelloWorldView的父窗口,视图CHelloWorldView就显示在CMainFrame的客户区中。
(MFC应用程序流程)
1.先进行一些初始化过程
(定义全局对象theApp:CHelloWorldApp theApp;。调用CWinApp和CHelloWorldApp的构造函数后,进入WinMain函数(位于appmodul.cpp中)。)
在TCHAR.h中,有此定义:#define _tWinMain WinMain,所以这里的_tWinMain就是WinMain函数。它调用了AfxWinMain函数(位于WinMain.cpp中)。
->InitInstance函数:
2.再注册并创建窗口
InitInstance中的ProcessShellCommand函数又调用了CMainFrame的LoadFrame函数注册并创建了窗口
3.然后显示、更新窗口
执行完ProcessShellCommand函数以后,调用了m_pMainWnd的ShowWindow和UpdateWindow函数显示并更新框架窗口。
4.进入消息循环,消息都由窗口过程函数处理。
消息循环了,上面的AfxWinMain函数中调用了pThread的Run函数(位于THRDCORE.cpp中),在Run中包含了消息循环。
PumpMessage中通过调用GetMessage、TranslateMessage、DispatchMessage等建立了消息循环并投递消息。
窗口过程函数AfxWinProc。
(消息机制)
1. CWnd的派生类都可以接收到标准Windows消息、通知消息和命令消息。命令消息还可以由文档类等接收。
2.用户自定义消息是实际上就是用户定义一个宏作为消息:其实我们一般所说的消息是狭义上的消息值,也就是一个无符号整数,经常被定义为宏。
3.消息映射表:HelloWorld的CMainFrame
BEGIN_MESSAG_MAP和END_MESSAGE_MAP之间的内容成为消息映射入口项
·在CMainFrame的实现文件中添加消息映射表
·在类的定义文件MainFrm.h中还会添加一个宏调用:DECLARE_MESSAGE_MAP()
<添加消息处理函数>
(映射入口-消息-处理函数)
1.在类定义中加入消息处理函数的函数声明,注意要以afx_msg打头。例如MainFrm.h中WM_CREATE的消息处理函数的函数声明:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);。
2.在类的消息映射表中添加该消息的消息映射入口项。例如WM_CREATE的消息映射入口项:ON_WM_CREATE()。
3.在类实现中添加消息处理函数的函数实现。例如,MainFrm.cpp中WM_CREATE的消息处理函数的实现:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
4.实例:定义消息宏->#define WM_UPDATE_WND (WM_USER+1);
再到消息映射表中添加消息映射入口项:ON_MESSAGE(WM_UPDATE_WND, &CMainFrame::OnUpdateWnd);
然后在MainFrm.h中添加消息处理函数的函数声明:afx_msg LRESULT OnUpdateWnd(WPARAM wParam, LPARAM lParam);
最后在MainFrm.cpp中实现此函数。
具体实现(实操):
<创建对话框>
第一,创建对话框资源,主要包括创建新的对话框模板、设置对话框属性和为对话框添加各种控件;
第二,生成对话框类,主要包括新建对话框类、添加控件变量和控件的消息处理函数等。
(1)实例:新建-MFC-MFC应用程序-应用程序类型(基于对话框)
(2)*.RC->dialog-idd_*_dialog->click[dialog]-capton名字
(3)工具箱添加static text + static control + edit text(设置有意义的ID)
在edit text添加变量
添加button,双击button添加处理事件
UpdateData(TRUE);//数据交换机制(将Input数据<-->OutPut数据)
变量更新操作。
UpdateData(FALSE);
相关文章推荐
- Patrol 7 架构下?的处理方法
- 中病毒后常用的解决方法病毒终极解决方案
- flex 控件的重要属性
- Delphi控件ListView的属性及使用方法详解
- QQ尾巴 InfoMs.Ime 解决方案
- web下载的ActiveX控件自动更新
- WinForm实现按名称递归查找控件的方法
- IE对CSS样式表的限制分析与解决方案
- C#中父窗口和子窗口之间控件互操作实例
- 开源MySQL高效数据仓库解决方案:Infobright详细介绍
- Visual C++中MFC消息的分类
- MFC中Radio Button的用法详解
- MFC创建右键弹出菜单的方法
- MFC中动态创建控件以及事件响应实现方法
- MFC程序对文件的处理方法
- MFC自定义消息的实现方法
- MFC之ComboBox控件用法实例教程
- WinForm自定义函数FindControl实现按名称查找控件
- WinForm拖拽控件生成副本的解决方法
- 一位架构师用服务打动客户的故事 推荐