
MFC内幕
up5p5mm
这个作者很懒,什么都没留下…
展开
-
OnIdle:MFC空闲处理
当没有任何 Windows 消息正在被处理时,框架调用 CWinApp 的成员函数 OnIdle(如“MFC 库参考”中所述)。重写 OnIdle 以执行后台任务。默认版本更新用户界面对象(如工具栏按钮)的状态,并对框架在操作期间创建的临时对象执行清理工作。下图阐释了在队列中没有任何消息时消息循环调用 OnIdle 的方式。消息循环代码:int CWinThread::Run(原创 2008-06-13 23:33:00 · 4061 阅读 · 0 评论 -
文档视图相关类的联系
CWinApp 1.保护成员CDocManager *m_pDocManager,指向一个文档管理对象,CWinApp很多对文档视图的操作都是调用这个对象的方法 2.GetFirstDocTemplatePosition和GetNextDocTemplate用来遍历所有的文档模板,实际是掉用CDocManager的此方法 3.AddDocTemp原创 2008-06-29 09:18:00 · 692 阅读 · 0 评论 -
MFC框架流程图
1.注册窗口时会选择六种窗口中的一种注册。2.AfxWinInit初始化theApp中的各种成员,如m_nCmdShow,m_hInstance等,AfxInitThread初始化线程。3.修改窗口的各种参数,重载虚函数PreCreateWindow,修改传入的窗口结构体即可。 file="/Best4cUserFiles/20080624/207816_121426887原创 2008-06-24 08:36:00 · 1760 阅读 · 0 评论 -
代码:查找子窗口
1.一个窗口的标题就是主窗口显示时左上角的窗口名,用GetWindowText获取;一个窗口的类名是注册这个窗口时的窗口类名,用GetClassName获取。2.MFC在preCreateWindow中注册窗口类,根据窗口类型不同注册6个窗口类中的一个,每个窗口类名固定,如: CWnd注册一个名为_AfxWnd的类,CFrameWnd注册一个_afxWndFrameOrView,CM原创 2008-06-23 23:53:00 · 3192 阅读 · 1 评论 -
MFC消息
1.PeekMessage和GetMessage不同:区别一:peekmessage不管消息队列里有没有消息都会马上返回,有消息返回消息,没消息返回空值,getmessage等待到有消息的时候才返回,区别二:peekmessage可以根据参数决定是否将消息保留在队列中,PM_NOREMOVE:该参数指示保留消息PM_REMOVE:该参数指示移去消息而getmessa原创 2008-06-27 22:36:00 · 406 阅读 · 0 评论 -
程序窗口消亡过程
1.点击右上角的关闭按钮->发送WM_CLOSE-》调用DefWindowProc,进行一些清理操作(如果没有映射WM_CLOSE消息的话,如果映射了,调用OnClose清理,CWnd的OnClose也会调用DefWindowProc进行清理操作)-》调用DestoryWindow-》发出WM_DESTORY-》调用PostQuitMessage-》发出WM_QUIT(仅用于结束消息循环)2.原创 2008-06-26 23:42:00 · 447 阅读 · 0 评论 -
窗口位置相关的函数和概念
1.FindWindow 函数原型: HWND FindWindow ( LPCTSTR lpClassName, LPCTSTR lpWindowName ); 一般把lpClassName置为NULL,用lpWindowName查找,查找成功后返回窗口句柄,如果多个窗口的名称都 是 lpWindowName,原创 2008-06-23 22:03:00 · 842 阅读 · 0 评论 -
命令消息路由
一般消息和控件都会沿着父类或父窗一直向上传递,但是命令消息会有一个算法进行路由,路由图见下: 1.从View开始查看是否有处理函数,而后一旦有处理函数就会终止流动2.到CWinApp后,调用默认的OnCmdMsg(没有重写时,调用的是CCmdTarget的此方法),它再整个消息映射表中找次消息的映射函数,如果找到就调用此映射函数。4.自定义的类,只要继承自CCmdTarge原创 2008-06-23 08:32:00 · 503 阅读 · 0 评论 -
OnCreated和OnInitDialog
OnCreated的时候窗口还没有完全建立,你可以给成员变量赋值,也可以修改窗口的基本内容比如风格,但是不能对窗口控件操作,因为窗口还没有建立。 OnInitDialog的时候窗口已经建立,你可以移动窗口,修改风格等等,也可以给成员变量赋值,这时候窗口已经创建好,只差显示了。原创 2008-06-13 23:39:00 · 851 阅读 · 0 评论 -
PeekMessage
该函数为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的结构。 函数原型:BOOL PeekMessage(LPMSG IpMsg,HWND hWnd,UINT wMSGfilterMin,UINT wMsgFilterMax,UINT wRemoveMsg); 参数: lpMsg:接收消息信息的MSG结构指针。 hWnd:其消息被检查的窗口的句柄。转载 2008-06-13 09:12:00 · 534 阅读 · 0 评论 -
C Run-Time Libraries 和编译选项的关系
以下各个库都包含了C Run-Time Libraries functions,他们的区别和编译选项以及打开的预编译开关如下: C run-time library (without iostream or standard C++ library) Characteristics原创 2008-06-14 00:39:00 · 659 阅读 · 0 评论 -
FrameWnd,View和Docment的手工创建
以下为MDI下,FrameWnd,View和Docment的手工创建的过程,首先,框架在InitInstance中把主框架创建出来了,并把需要的文档模板用成员变量保存了起来,用户点击主框架中的新建菜单: 1.修改消息映射表中对ID_FILE_NEW的响应为本类的OnFileNew(默认是父类的OnFileNew)2.建立OnFileNew消息函数,下面的操作都在OnFileNew中进行原创 2008-06-29 09:41:00 · 1638 阅读 · 0 评论