您的位置:首页 > 编程语言 > C语言/C++

【实操】第一个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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息