
C++/MFC
northhero
这个作者很懒,什么都没留下…
展开
-
为什么有时候程序在到达全局theApp时会先进入CWinApp呢?
工程名:Test按照一般的理解,加点调试时程序首先应该进入全局对象CTestApp theApp。但有时候我们却发现程序首先进入的是CWinApp(。。。),这就让我们很难理解?????进一步调试发现此时 this指向一个叫 _afxOleWinApp的对象。看名子应该是一个全局对象。搜一下进入到了DLLOLE.CPP里,发现它里面的却有一个 _afxOleWinApp对象转载 2009-09-01 23:36:00 · 781 阅读 · 0 评论 -
SetWindowsHookEx
SetWindowsHookEx( idHook: Integer; {钩子类型} lpfn: TFNHookProc; {函数指针} hmod: HINST; {包含钩子函数的模块(EXE、DLL)句柄; 一般是 HInstance; 如果是当前线程这里可以是 0} dwThreadId: DWORD {关联的线程; 可用 GetCurrentThreadId 获取当前转载 2009-09-02 21:11:00 · 401 阅读 · 0 评论 -
MFC消息的路由-钩子函数
用最基本的一句话概述,钩子函数起了很大作用。故事是这样的,有些漫长,也需要些耐心。MFC中消息分为3类: 1. WM_COMMAND:所有的UI组件和加速键都会产生这种消息,所有派生于CCmdTarget的类都有能力处理该消息 2. 标准消息:除WM_COMMAND之外的WM_xx消息都是标准消息,派生于CWnd的类都有能力处理该消息 3. 控件通知消息:用于子窗转载 2009-09-02 23:04:00 · 1223 阅读 · 0 评论 -
MFC的消息映射
MFC真可谓是件艺术品,不过刚开始学的时候一头雾水,竟不相信MFC是用C++的写出来的,最近有时间深入学习了MFC的消息映射,感觉收获不小,还是把学习成果记下来比较好。首先看看MFC的窗口类(如CWnd)与窗口过程。Windows是基于事件机制的,任何窗口都能发送和处理消息,每一个窗口都对应着自己的消息处理函数,即通常所说的窗口过程(WindowProc)。窗口过程通常是在WNDC转载 2009-09-03 00:12:00 · 649 阅读 · 0 评论 -
MFC 的生与死
MFCs Live:AfxWinMain()%1 //有My表示是自己的类 CWinApp * pApp=AfxGetApp(); AfxWinInit(...); pApp->InitApplication(); pApp->InitInstance();★//CWinApp的虚函数,你可以在这里对应用程序启动(如打开文件等)修改,CMyWinApp里转载 2009-09-03 11:12:00 · 535 阅读 · 0 评论 -
进入MFC讲坛的前言
在这里,我想谈谈自己学习MFC的一些体会。我是从1997年才开始在Window下编写程序的。在这之前,我编写过一些DOS程序,包括一个简单的全屏幕编辑器和一个带函数的表达式解释器,都是一些小的程序。Window 3.1流行后,我开始在它下面编写程序。从编写DOS程序到编写Window程序,需要从编程思想上作一个比较大的调整。在DOS下编写程序,程序的总体流程完全由应用程序自己控制;但在转载 2009-09-03 11:28:00 · 375 阅读 · 0 评论 -
窗口类、窗口类对象与窗口
我们可以发现,SDK程序中多了一个HWND类型的变量hwnd。该变量用来保存由CreateWindowEx函数创建的窗口句柄,并将其作为参数传递给随后的显示窗口操作(ShowWindow函数)和更新窗口操作(UpdateWindow函数)。而我们自定义的实现代码中,CWnd类定义了一个HWND类型的成员变量:m_hWnd转载 2009-09-03 11:00:00 · 1607 阅读 · 1 评论 -
消息处理
消息被寄送或者发送之后,将会按照一定的路线寻找合适的处理函数,以便得到处理,或者交由默认的窗口过程进行处理。本节将讨论消息在MFC中的处理过程。6.3.1 消息的接收寄送的消息一般存放在消息队列中,此消息队列在应用程序初始化时由操作系统所建立。通常,鼠标和键盘单击产生寄送消息,然后应用程序逐一地将它们从消息队列中删除,并将它们发送到被鼠标单击的窗口,或者按键按下时接收输入的窗口。Wi转载 2009-09-03 11:17:00 · 1135 阅读 · 1 评论 -
MFC-窗口封装
MFC对Window作了一层比较浅的封装,其创建过程基本与SDK差不多。它简化了窗口的注册,并将窗口过程与类关联起来;后者是比较重要的封装,它使消息能够分流给“类的窗口过程”,既而通过消息映射,才能到达各个处理函数。 使用传统的SDK来创建一个窗口有点繁琐,伪代码是这样的: if (Regis转载 2009-09-03 12:01:00 · 829 阅读 · 0 评论