ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:18.42KB ,
资源ID:16340154      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16340154.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MFC程序的生死过程Word下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

MFC程序的生死过程Word下载.docx

1、AfxWinInit:是继CWinApp构造函数之后的第一个操作;此后的操作是pApp-InitApplication(其中的pApp指向CMyWinApp对象,即本例中的theApp),因为CMyWinApp继承自CWinApp,而InitApplication又是CWinApp的一个虚拟函数,我们没有改写它(大部分情况下也不需要改它),所以上述操作相当于调用CWinApp:InitApplication。此程序的代码出现在APPCORE.CPP中;继InitApplication之后,AfxWinMain调用pApp-InitInstance,InitInstance是CWinApp的一个

2、虚拟函数(应用程序一定要改写这个函数,因为它在CWinApp中是个空函数,没有任何默任操作),我们改写了它,所以上述操作就是调有我们自己的这个InitInstance函数,我们将在该处展开我们的主窗口生命。CMyWinApp:InitInstance一开始new了一个CMyFrameWnd对象,new会引发构造函数CmyFrameWnd:CMyFrameWnd,其中调用了CFrameWnd的成员函数Create,它将产生一个窗口。 Create函数共八个参数,第一个,指定WNDCLASS窗口类,如果放置NULL,表示要以MFC内建的窗口类产生一个标准的外框窗口(Create函数在产生窗口之前会

3、引发窗口类的注册操作,下一段讲述这一内容);第二个,指定窗口标题;第三个,指定窗口风格,默认是WS-OVERLAPPEDWINDOW,如果你不想要窗口右上角的极大极小钮,可以改成WS-OVERLAPPED|WS-CAPTION|WS-SYSMENU|WS-THICKFRAME|WS-MINIMIZEBOX|WS-MAXIMIZEBOX,如果希望有垂直滚动条,再加上WS-VSCROLL;第四个参数,指定窗口的位置与大小,默认值rectDefault ;第五个,指定父窗口,第六个指定菜单;第七个,为扩充风格,唯有以:CreateWindowEx(而非:CreateWindow)函数才能完成,事实上

4、,CFrameWnd:Create最终调用的正是:CreateWindowEx;第八个,是一个指向CCreateContext结构的指针,framework利用它,在具备Document/View结构的程序中初始化外框窗口,默认值NULLCFrameWnd:Create在函数中调用CreateEx(CWnd有这个成员函数,但其派生类CFrameWnd并没有,所以这里调用的实际上是CWnd:CreateEx);后者又调用PreCreateWindow虚拟函数(它在CWnd及其派生类CFrameWnd都有定义,所以实际上调用的是CFrameWnd:PreCreateWindow),这个函数调用了A

5、fxDeferRegisterClass宏,它表示如果变量afxRegisteredClass的值显示系统已经注册了fClass 这种窗口类,MFC啥也不做,否则就调用AfxEndDeferRegisterClass(fClass)它调用两个函数完成实际的窗口类注册操作,一个是RegisterWithIcon,一个是AfxRegisterClass,准备注册之。窗口显示与更新CMyFrameWnd:CMyFrameWnd结束后,窗口已经诞生出来;程序又回到CMyWinApp:InitInstance,于是调用ShowWindow函数令窗口显示出来,并调用UpdateWindow函数令Hello

6、程序送出WM-PAINTCWinApp:Run-程序生命的活水源头Run又是CWinApp的一个虚拟函数,我们没有改写它(大部分情况下也不需要改它),所以上述操作相当于调用CWinApp:RunWinMain已由MFC提供,窗口类已由MFC注册完成,连窗口函数也都由MFC提供把消息与处理函数连接在一起:Message Map机制MFC提供给应用程序使用的“很方便的接口”是两组宏,以Hello为例,第一个操作是在Hello.h的CMyFrameWnd加上DECLARE-MESSAGE-MAP;第二个操作是在Hello.cpp的任何位置(当然不能在函数内)使用宏BEGIN_MESSAGE_MAP(

7、CMyFrameWnd, CFrameWnd) ON_COMMAND(IDM_ABOUT, OnAbout) ON_WM_PAINT()END_MESSAGE_MAP()来龙去脉总整理程序的诞生Application object 产生, 内存于是获得配置,初值亦设立了。AfxWinMain执行AfxWinInit,后者又调有AfxInitThread,把消息队列尽量加大到96AfxWinMain执行InitApplication。这是CWinApp的虚拟函数,我们通常不改写它AfxWinMain执行InitInstance。这是CWinApp的虚拟函数,我们必须改写它InitInstance

8、 “new”了一个CMyFrameWnd对象CmyFrameWnd构造函数调用Create,产生主窗口。我们在Create参数中指定的窗口类是NULL,于是MFC根据窗口种类,自行为我们注册一个名为“AfxFrameOrView42d”的窗口类。回到InitInstance中继续执行ShowWindow,显示窗口执行UpdateWindow,于是发出WM-PAINT回到AfxWinMain,执行Run,进入消息循环。程序开始运行:程序获得WM-PAINT消息(由CWinApp:Run中的:GetMessage循环)WM-PAINT经由:DispatchMessage送到窗口函数CWnd:Def

9、WindowProc中。CWnd:DefWindowProc将消息传递到消息映射表格传递过程中发现有相符项目,于是调用项目中对应的函数。此函数是利用BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间的宏设立起来的。标准消息的处理程序亦有标准命名,例如WM-PAINT必由OnPaint处理程序的死亡:使用者单击File/Close,于是发出WM-CLOSECMyFrameWnd并没有设置WM-CLOSE处理程序,于是交给默认的处理程序默认函数对于WM-CLOSE的处理方式是调用:DestroyWindow,并因而发出WM-DESTROY默认的WM-DESTROY处理方式是调用

10、:PostQuitMessage,因此发出WM-QUITCWinApp:Run收到WM-QUIT后会结束内部之消息循环,然后调用ExitInstance,这是CWinApp的一个虚拟函数;如果CMyWinApp改写了ExitInstance,那么CWinApp:Run所调用的就是CMyWinApp:ExitInstance,否则就是CWinApp:ExitInstance最后回到AfxWinMain,执行AfxWinTerm,结束程序附Hello程序部分代码:Hello.cpp#include Stdafx.hHello.hResource.hCMyWinApp theApp; / appli

11、cation object/-/ CMyWinApps memberBOOL CMyWinApp:InitInstance() m_pMainWnd = new CMyFrameWnd(); m_pMainWnd-ShowWindow(m_nCmdShow);UpdateWindow(); return TRUE;OnIdle(LONG lCount) CMyFrameWnd* pWnd = (CMyFrameWnd*)m_pMainWnd; pWnd-IdleTimeHandler(lCount);/ CMyFrameWndCMyFrameWnd:CMyFrameWnd() Create(N

12、ULL, Hello MFC, WS_OVERLAPPEDWINDOW, rectDefault,NULL, MainMenu); void CMyFrameWnd:OnPaint()CPaintDC dc(this);CRect rect; GetClientRect(rect); dc.SetTextAlign(TA_BOTTOM | TA_CENTER); :LineDDA(rect.right/2, 0, rect.right/2, rect.bottom/2, (LINEDDAPROC) LineDDACallback, (LPARAM) (LPVOID) &dc);VOID CAL

13、LBACK CMyFrameWnd:LineDDACallback(int x, int y, LPARAM lpdc)static char szText = Hello, MFC; (CDC*)lpdc)-TextOut(x, y, szText, sizeof(szText)-1); for(int i=1; iDrawText(str, &rect, DT_LEFT | DT_TOP);Hello.hclass CMyWinApp : public CWinApppublic: virtual BOOL InitInstance(); / virtual BOOL OnIdle(LON

14、G lCount);/ OnIdle e ;class CMyFrameWnd : public CFrameWnd CMyFrameWnd();/ constructor afx_msg void OnPaint(); / for WM_PAINT afx_msg void OnAbout(); / for WM_COMMAND (IDM_ABOUT) void IdleTimeHandler(LONG lCount);/ we want it call by CMyWinApp:OnIdleprivate: DECLARE_MESSAGE_MAP() / Declare Message Map static VOID CALLBACK LineDDACallback(int,int,LPARAM);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1