深入浅出mfc读书笔记

合集下载

深入浅出数据分析读后感

深入浅出数据分析读后感

深入浅出数据分析读后感数据分析是指通过收集、整理、加工、分析和解释数据来获取有价值的信息和结论的过程。

数据分析已经成为当今社会中不可或缺的工具,在各个领域都发挥着重要作用。

阅读了《深入浅出数据分析》这本书后,我对数据分析有了更深入的理解,下面我将分享一些我的读后感。

首先,我非常喜欢这本书的写作风格。

作者以深入浅出的方式向读者解释了数据分析的概念和步骤。

他用简洁清晰的语言讲解复杂的概念,使得读者无需具备专业背景也能够轻松理解。

例如,在阐述数据收集的过程时,作者提到了各种常见的数据收集方法,比如调查问卷、实地观察和互联网采集等,并给出了每种方法的优缺点和适用场景。

这种将专业知识转化为生活中常见实例的方式,使我更加容易理解和应用所学。

其次,这本书还提供了丰富的案例分析,帮助读者将所学的理论知识应用到实际问题中。

每个案例都带有详细的数据描述和分析步骤,让读者能够跟随作者的思路,逐步解决问题。

这种实践性的学习方式不仅加深了对数据分析方法的理解,还培养了读者的分析和解决问题的能力。

我特别喜欢书中介绍的一个关于市场营销数据分析的案例。

作者通过对销售数据的分析,揭示了产品销售瓶颈的原因,并提出了解决方案。

这个案例让我明白了数据分析在市场营销决策中的重要性。

此外,这本书还特别强调了数据可视化的重要性。

作者认为,通过图表、图像等形式呈现数据分析结果,能够更好地将复杂的数据信息传达给他人。

他介绍了一些常用的数据可视化工具和技巧,比如使用柱状图、折线图和饼图等。

我对于数据可视化一直不太了解,但在阅读完这本书后,我学会了如何利用Excel等工具进行数据可视化,并在我的工作中应用了这些技巧。

我发现数据可视化不仅使数据分析结果更加直观和易于理解,还能够帮助我更好地与同事和客户进行沟通和交流。

最后,这本书还提到了一些数据伦理和隐私保护的问题。

作者强调了在进行数据分析时应该遵守的伦理原则,同时也介绍了一些常见的隐私保护措施。

这些内容让我更加意识到数据分析工作中的道德和责任,以及保护个人隐私的重要性。

c++ 学习路线与推荐书籍

c++ 学习路线与推荐书籍
个人认为真正想学习C的人,看清楚了,真正想学习C的人啊,不是路过的人,应该看一下《C primer plus》,这本书有些罗嗦,但是讲的很全面,可以当字典使用。
3.API
这部分的话,其实是慢慢积累的,你去Google查一下什么是API就好了,学习Windows原理的时候你会理解到是个什么东西的,大概说起来就 是微软给我们提供了一些封装好了的函数,我们可以调用过来实现一些简单而且常用的功能,比如MessageBox是弹出一个窗口,你只要在他的参数里自己 设定大小啊和现实什么啊就是了。
我的看法是:如果你不理解其中的条款,记忆,并且照做;如果你理解其中的条款,我猜你一定会同意书中的观点。我认为这本书中的内容至少在2009年以前都不会过时,人们将广为传诵它制定的101条戒律。
还不知道他的简称,也许“101”会成为一个候选者?
提到《Effective C++》,那么另外三本书一一浮出水面:
你对C++不满吗?这本书可以部分地帮你完成抱怨的目标。也许它还可以让你不迷信C++。
最后,一份C++标准文档也是应该加以咀嚼的。
还有一些书籍,并不能简单的归于C++,也难以在纯粹的书本学习中加以掌握。《Design Patterns》/《设计模式》一书就归于此类。
所有上述的书籍,要么谈论C++语言本身,要么谈论STL的,要么兼而有之(当然严格讲STL也是C++语言非常重要的一部分)。偶尔,某些书中条目也会涉及实际工程。这些书并不是C++软件开发的全部,但是他们很重要。阅读这些书,未必需要化费太多的精力,有时候是会困难,但也有时候会很快速。
这本书及其中文版传言好坏都有,没有认真看过,不做评价,如果确有兴趣,不妨尝试一下该书。

[深入浅出]深入浅出、深入深出、浅入浅出、浅入深出

[深入浅出]深入浅出、深入深出、浅入浅出、浅入深出

[深入浅出]深入浅出、深入深出、浅入浅出、浅入深出[深入浅出]深入浅出、深入深出、浅入浅出、浅入深出篇一 : 深入浅出、深入深出、浅入浅出、浅入深出在网上读到这样一段话:世界上有四种老师,第一种是讲课能深入浅出,很深奥的道理,他能讲得浅显易懂,很受学生的欢迎,这是最好的老师;第二种是深入深出,这样的老师很有学问,但缺乏好的教学方法,不能把深奥的学问讲得浅显易懂,学生学起来就费劲,这也算是好老师;第三种是浅入浅出,这样的老师本身学问不深,但却实事求是,把自己懂的东西讲出来,这也能基本保证质量,也算是个好老师;最糟糕的是第四种老师,浅入深出,本身并无多大学问,却装腔作势,把本来很浅近的道理讲得玄而又玄,让人听不懂。

对比一下,我大概属于第三种。

一般我搞不懂的东西,我会避开不讲,只讲自己弄懂的东西;弄懂多少就讲多少。

学生问我问题,我会结合自己的切身经历告诉他自己碰到同样的问题会怎么做,甚至恨不得亲自示范给他/她看。

我知道有一种老师,他们总是能站在更高的地方给学生方法论方面的指导;我也见过另一种老师,他们对学生提出的问题总不正面回答,而是大谈一番似是而非不着边际的话题。

譬如学生问:老师,我想去云南自助游,应该怎么走,我会告诉他,我去过丽江,当年我是怎么走的。

但学生也许想去的是卢沽湖,我会说那里我没去过,但你可以先到丽江再打听怎样去卢沽湖,或者参照我当年的方法去寻找路线;另一种老师会这样回答:你可以到某某网站或某本书上去了解去那里的路线,并告诉他如何找到那个网站或那本书和出行的注意事项;还有一种老师会说:我写过一篇《自助游的兴起、演变、未来趋势和宏观管理战略》的文章,反响很大,你去找来看看吧,看完就知道怎么去了。

呵呵!篇二 : 深入浅出WinDbg——利用快速定位错误Sharepoint代码的某方法LoadLines中使用了SPSecurity.RunWithElevatedPrivileges此方法两次调用了Common.GetLookupValue,并且问题可能出在这里。

mfc windows程序设计pdf

mfc windows程序设计pdf

mfc windows程序设计pdf
请注意,我的编程能力无法判断某个PDF文档是否存在或者其内容是否涉及版权问题,请您自行查询和判断相关内容的合法性。

参考内容:
1. 《Windows程序设计(第5版)》PDF,作者:Charles Petzold
2. 《深入浅出MFC》PDF,作者:侯捷
3. 《MFC程序设计基础》PDF,作者:熊安泉
4. 《Windows编程从入门到精通》PDF,作者:王道培
5. 《Visual C++ GUI编程基础》PDF,作者:罗远航
6. 《MFC程序设计实例解析》PDF,作者:朱睿
7. 《MFC程序设计教程》PDF,作者:谢彬彬
8. 《Windows图形界面程序设计》PDF,作者:王绍琛
9. 《Visual C++ MFC程序设计技巧与实例》PDF,作者:Geoffrey T. LeBlond
10. 《MFC程序设计指南》PDF,作者:周邦新
11. 《MFC程序设计高级技巧与例解》PDF,作者:孙加帆
12. 《Windows程序开发实战》PDF,作者:何应钦
以上仅供参考,如有需要请自行搜索下载。

深入浅出话vc(2)mfc本质

深入浅出话vc(2)mfc本质

一、引言上一专题中,纯手动地完成了一个Windows应用程序,然而,在实际开发中,我们大多数都是使用已有的类库来开发Windows应用程序。

MFC(Microsoft Foundation Class, 微软基础类库)是微软为了简化程序员的开发工作而将Windows API 封装到C++类中,利用这些类,程序员可以有效地完成Windows平台下应用程序的开发。

本专题将详细剖析它。

二、利用向导创建一个MFC程序用于帮助有效地开发Windows应用程序的类库除了MFC外,还有其他开源类库提供,比如说QT,只是QT不是微软开发的罢了,为了更好地剖析MFC,下面让我们用Visual Studio 中的MFC模板和向导工具来创建一个基于MFC的单文档(SDI)应用程序。

1.启动Visual studio 2010,单击文件(FIle)菜单——>新建项目——>项目,在出现的项目窗口中选择Visual C++ 语言,然后选择MFC应用程序,并输入项目的名称为SDIMFC,具体如下图所示。

2.输入项目名称后点击确定按钮,将出现MFC应用程序向导窗口,点击下一步,应用程序类型选择:单个文档,如下图所示:3. 点击下一步,出现MFC向导的第三个对话框,复合文档支持保持默认选择,然后在出现的对话框中一直点击下一步来完成一个单文档MFC应用程序的创建。

下面,按下Ctrl+F5来运行MFC应用程序,之后将看到我们创建的MFC 应用程序界面,具体如下图所示:在上面的程序中,我们并没有编写任何代码,运行它后就生成了一个带标题栏,系统菜单,具有最大化、最小化框和一个可调边框的应用程序,这一切的工作都是由MFC的向导工具帮我们完成,即该向导工具为我们生成了很多代码,下面就以这个简单的MFC程序来分析下MFC框架。

三、MFC框架详细解析我们看下用MFC向导工具帮我们生成的哪些代码。

你可以在VS中点击类视图选项卡(如果VS界面上没有看到类视图的,可以通过菜单栏视图—>类视图的方式显示出来),就可以看到如下图所示的类。

深入浅出MFC一解析

深入浅出MFC一解析

深入浅出MFC一Contents[Trial version] 目录[Trial version] 第0章你一定要知道(导读)[Trial version] 第1章Win32基本程序观念[Trial version] 第2章C++的重要性质[Trial version] 第3章MFC六大关键技术之模拟[Trial version] 第5章总观AlicationFramework[Trial version] 第6章MFC程序设计导论[Trial version] 第7章简单而完整:MFC骨干程序[Trial version] 第8章Document-View深入探讨[Trial version] 第9章消息映射与命令绕行[Trial version] 第10章MFC与对话框[Trial version] 第11章View功能之加强与重绘效率之提升[Trial version] 第12章打印与预览[Trial version] 第13章多重文件与多重显示[Trial version] 第14章MFC多线程程序设计[Trial version] 第15章定制一个AWizard[Trial version] 第16章站上众人的肩膀--使用Comonents&am;amActiveXControls[Trial version] 附录A无责任书评[Amber demo]owered By Gisun htt://目录第0章你一定要知道(导读)/1这本书适合谁/1你需要什么技术基础/1你需要什么软硬件环境让我们使用同一种语言本书符号习惯/3磁盘内容与安装范例程序说明第一篇勿在浮砂筑高台- 本书技术前提/3 第1章Win32 程序基本观念/3Win32程序开发流程/4需要什么函数库(.LIB)/4需要什么头文件(.H)/4以消息为基础以事件驱动之/5一个具体而微的Win32 程序/5程序进入点WinMain/10窗口类之注册与窗口之诞生/11 消息循环/12窗口的生命中枢—窗口函数/12 消息映射(Message Ma)雏形/13 对话框的运作/14模块定义文件(.DEF)/14资源描述文件(.RC)/15 Windows 程序的生与死/15闲置时间的处理:OnIdle /16 Console 程序/17Console 程序与DOS 程序的差别/17 Console 程序的编译链接/18JBACKU:Win32 Console 程序设计/19 MFCCON:MFC Console 程序设计/20什么是C Runtime Library 的多线程版本/22 进程与线程(rocess and Thread)/22核心对象/22一个进程的诞生与死亡/23产生子进程/23一个线程的诞生与死亡/24以_beginthreadex取代CreateThread/25线程优先权(riority)/26多线程程序设计实例/27第2章C++ 的重要性质/29类及其成员—谈封装(encasulation)/29基类与派生类—谈继承(Inheritance)/29this 指针/31虚函数与多态(olymorhism)/32类与对象大解剖/40Object slicing 与虚函数/42静态成员(变量与函数)/44C++程序的生与死:兼谈构造函数与析构函数/46四种不同的对象生存方式/47所谓“Unwinding”/48运行时类型信息(RTTI)/48动态生成(Dynamic Creation)/50异常处理(Excetion Handling)/50 Temlate /53Temlate Functions /53Temlate Classes /54Temlates 的编译与链接/56第3章MFC六大关键技术之模拟/57MFC类阶层/57Frame1范例程序/57MFC程序的初始化过程/59Frame2范例程序/61RTTI(运行时类型辨识)/65 CRuntimeClass与类型录/65DECLARE_DYNAMIC / IMLEMENT_DYNAMIC宏/66 Frame3 范例程序/71IsKindOf(类型辨识)/77Frame4 范例程序/77Dynamic Creation(动态生成)/78DECLARE_DYNCREATE / IMLEMENT_DYNCREATE 宏/79 Frame6 范例程序/84ersistence(永续生存)机制/91Serialize(数据读写)/91DECLARE_SERIAL/IMLEMENT_SERIAL 宏/95没有范例程序Message Maing(消息映射)/97Frame7 范例程序/104Command Routing(命令循环)/112Frame8 范例程序/119本章回顾/130第二篇欲善工事先利其器-Visual C++ 5.0 开发工具第4章Visual C++ - 整合性软件开发环境安装与组成四个重要的工具内务府总管:Visual C++ 整合开发环境关于roject关于工具设定Source BrowserOnline Hel除错工具VC++ 除错器Excetion Handling程序代码产生器—AWizard东圈西点完成MFC 程序骨干Scribble Ste0威力强大的资源器Icon 器Cursor器Bitma器ToolBar器VERSIONINFO资源器String Table器Menu 器Accelerator 器Dialog 器Console 程序的项目管理第三篇浅出MFC程序设计第5章总观Alication Framework /130 什么是Alication Framework /130侯捷怎么说/130我怎么说/131别人怎么说/133为什么使用Alication Framework /134 Microsoft Foundation Class(MFC)/136 白头宫女话天宝:Visual C++与MFC/137 纵览MFC /138General urose classes /138Windows AI classes /139Alication framework classes /140High level abstractions /140Afx全局函数/140MFC宏(macros)/141MFC数据类型(data tye)/142第6章MFC程序设计导论——MFC程序的生死因果/144 不二法门:熟记MFC类的阶层架构/144需要什么函数库(.LIB)/146需要什么含入文件(.H)/146简化的MFC程序架构—以Hello MFC为例/148Hello 程序原始代码/148MFC 程序的来龙去脉/152我只借用两个类:CWinA和CFrameWnd /152 CWinA—取代WinMain的地位/152CFrameWnd—取代Wndroc的地位/154引爆器—Alication object /155隐晦不明的WinMain /156AfxWinInit - AFX 内部初始化动作/158CWinA::InitAlication /160CMyWinA::InitInstance /160CFrameWnd::Create 产生主窗口(并注册窗口类)/161 奇怪的窗口类名称Afx:b:14ae:6:3e8f/168 窗口显示与更新/170CWinA::Run - 程序生命的活水源头/170把消息与处理函数串接在一起:Message Ma机制/172来龙去脉总整理/173Callback 函数/174闲置时间(idle time)的处理:OnIdle/176 Dialog 与Control/178通用对话框(Common Controls)/178本章回顾/179第7章简单而完整:MFC 骨干程序/180 不二法门:熟记MFC 类的阶层架构/180 MFC程序的UI新风貌/180Document/View 支撑你的应用程序/181 利用Visual C++工具完成Scribble ste0 /183骨干程序使用哪些MFC类?/183Document Temlate的意义/187Scribble的Document/View 设计/190主窗口的诞生/192工具列和状态列的诞生(Toolbar &am; Status bar)/193 鼠标拖放(Drag and Dro)/195消息映射(Message Ma)/196标准菜单File/Edit/View/Window/Hel/196对话框/199改用CEditView /199第四篇深入MFC程序设计/199第8章Document-View 深入探讨/200为什么需要Document-View(形而上)/200 Document /200View /201Document Frame(View Frame)/202Document Temlate /202CDocTemlate 管理CDocument / CView / CFrameWnd /202 Scribble Ste1 的Document(数据结构设计)/207 MFC Collection Classes 的选用/207Temlate-Based Classes /208Temlate-Based Classes 的使用方法/209CScribbleDoc 的修改/209 SCRIBBLEDOC.H /211 SCRIBBLEDOC.C /212文件:一连串的线条/215 CScribbleDoc 的成员变量/215 CObList /215CScribbleDoc 的成员函数/215 线条与坐标点/217CStroke 的成员变量/217 CArray<Coint, Coint> /217 CStroke 的成员函数/217Scribble Ste1 的View:数据重绘与/218 CScribbleView 的修改/218 SCRIBBLEVIEW.H /219SCRIBBLEVIEW.C /220View 的重绘动作—GetDocument和OnDraw /222 CScribbleView的成员变量/222 CScribbleView的成员函数/223View 与使用者的交谈(鼠标消息处理实例)/223 ClassWizard 的辅佐/224WizardBar 的辅佐/225Serialize:对象的文件读写/225Serialization以外的文件读写动作/226 台面上的Serialize动作/227台面下的Serialize写文件奥秘/231台面下的Serialize读文件奥秘/233 DYNAMIC / DYNCREATE / SERIAL 三宏/240 Serializable 的必要条件/244CObject 类/245IsKindOf/245IsSerializable/245CObject::Serialize/245CArchive类/246oerator<<和oerator>>/246效率考虑/250自定SERIAL宏给抽象类使用/250在CObList中加入CStroke 以外的类/250 Document与View 交流—为Scribble Ste4做准备/254 第9章消息映射与命令循环/255到底要解决什么/255消息分类/256万流归宗Command Target(CCmdTarget)/256三个奇怪的宏一张巨大的/257 DECLARE_MESSAGE_MA 宏/257消息映射的形成:BEGIN_/ON_/END_ 宏/258米诺托斯(Minotauros)与西修斯(Theseus)/261 两万五千里长征—消息的流窜/265直线上溯(一般Windows 消息)/265拐弯上溯(WM_COMMAND 命令消息)/268罗塞达碑石:AfxSig_xx 的秘密/273Scribble Ste2:UI 对象的变化/277改变菜单/277改变工具列/278利用ClassWizard连接命令项识别代码与命令处理函数/280 维护UI对象状态(UDATE_COMMAND_UI)/282本章回顾/285第10章MFC 与对话框/285对话框器/286利用ClassWizard 连接对话框与其专属类/288ENDLG.H /290ENDLG.C /291对话框的消息处理函数/292MFC中各式各样的MA /294对话框数据交换与查核(DDX &am; DDV)/294MFC中各式各样的DDx_函数/297如何唤起对话框/297本章回顾/299第11章View功能之加强与重绘效率之提升/299同时修改多个Views:UdateAllViews 和OnUdate/300 在View中定义一个hint/302把hint传给OnUdate/304利用hint增加重绘效率/305可卷动的窗口:CScrollView /307大窗口中的小窗口:Slitter /313分裂窗口的功能/313分裂窗口的程序概念/314分裂窗口之实现/315本章回顾/317第12章印表与预览/317概观/317打印动作的后台原理/320MFC预设的打印机制/324Scribble打印机制的补强/333打印机的页和文件的页/333配置GDI绘图工具/334尺寸与方向:关于映射模式(坐标系统)/334分页/336表头(Header)与表尾/338动态计算页代码/338打印预览(rint review)/339本章回顾/339第13章多重文件与多重显示/339 MDI 和SDI /340多重显像(Multile Views)/340窗口的动态分裂/342窗口的静态分裂/343 CreateStatic 和CreateView /343窗口的静态三叉分裂/345Grah 范例程序/346静态分裂窗口之观念整理/354同源子窗口/355 CMDIFrameWnd::OnWindowNew/355 Text 范例程序/356非制式作法的缺点/361多重文件/361新的Document类/362新的Document Temlate /363新的UI系统/364新文件的文件读写动作/365第14章MFC多线程程序设计(Multi-threaded rogramming in MFC)/367从操作系统层面看线程/367三个观念:模块、进程、线程/367线程优先权(riority)/368线程排程(Scheduling)/369Thread Context /370从程序设计层面看线程/371Worker Threads 和UI Threads /371错误观念/372正确态度/372MFC多线程程序设计/372探索CwinThread/372产生一个Worker Thread/374产生一个UI Thread /375线程的结束/376线程与同步控制/376 MFC多线程程序实例/378第15章定制一个AWizard /380到底Wizard是什么?/381Custom AWizard 的基本操作/381剖析AWizard Comonents /385Dialog Temlates 和Dialog Classes /385Macros /386Directives /387动手修改To Studio AWizard/387利用资源器修改IDD_CUSTOM1对话窗画面/387 利用ClassWizard 修改CCustom1Dlg类/388改写OnDismiss 虚函数在其中定义macros /389 修改text temlate/389To Studio AWizard执行结果/390更多的信息/390第16章站上众人的肩膀—使用Comonents和ActiveX Controls/391 什么是Comonent Gallery /391使用Comonents /393Slash screen /393System Info for About Dlg /394Tis of the Day /394Comonents实际运用:ComTest 程序/395修改ComTest 程序内容/409使用ActiveX Controls /411ActiveX Control 基础观念:roerties、Methods、Events/411ActiveX Controls 的五大使用步骤/412使用“Grid”ActiveX Control:OcxTest 程序/413[Amber demo]owered By Gisun htt://第0章你一定要知道(导读)这本书适合谁深入浅出MFC是一本介绍MFC(Microsoft Foundation Classes)程序设计技术的书籍。

Visual C++:窗口重绘、鼠标、键盘

Visual C++:窗口重绘、鼠标、键盘

本文作者:黄邦勇帅(原名:黄勇)本文不会对C++语法进行讲解,本文假设读者已经很熟悉C++语法了,若读者对C++语法不熟悉,请参阅本人所著《C++语法详解》一书。

本文对窗口的重绘原理、有效区域、无效区域、鼠标和键盘消息作了细致全面的讲解,本文图文并茂讲解详细细致,由浅入深,内容较为全面。

本文使用VS2005、VS2010、VS2015编译器进行讲解,本文内容完全属于个人见解与参考文献的作者无关,限于水平有限,其中难免有误解之处,望指出更正。

声明:禁止抄袭、复印、转载本文,本文作者拥有完全版权。

主要参考文献:1、深入浅出MFC(第2版) 侯俊杰著华中科技大学出版社出版日期不祥2、VC++深入详解孙鑫余安萍编著电子工业出版社2006年6月3、windows程序设计(第5版珍藏版) [美]Charles Petzold著方敏张胜梁路平赵勇等译清华大学出版社2010年9月4、Visual C++2013入门经典(第7版) [美] Ivor Horton著李周芳江凌译清华大学出版社2015年1月5、windows图形编程[美] Feng Y uan著英宇工作室译机械工业出版社2002年4月6、MFC windows程序设计(第2版) [美] Jeff Prosise著北京博彥科技发展有限责任公司译清华大学出版社2007年5月7、Visual C++.NET宝典[美]Tom Archer, Andrew Whitechapel著马云叶喜涛张毅峰等译电子工业出版社2003年2月8、Visual C++ 2010开发权威指南尹成颜成钢编著人民邮电出版社2010年8月第4章窗口重绘原理本章需要了解第1部分的内容。

为方便测试,可使用以下方法让MFC程序在控制台输出信息1、包含头文件<conio.h>2、在需要使用控制台输出的地方使用以下语句AllocConsole(); //开启控制台,注意检查返回值_cprintf("ddd"); //输出信息到控制台,该函数与C语言的printf类似。

深入浅出统计学的读后感10篇

深入浅出统计学的读后感10篇

深入浅出统计学的读后感10篇《深入浅出统计学》是一本由DawnGriffith著作,电子工业出版社出版的平装图书,本书定价:89.00元,页数:677,特精心从网络上整理的一些读者的读后感,希望对大家能有帮助。

《深入浅出统计学》读后感(一):通俗易懂,适合非统计学人士优点:(1)此书比较通俗易懂,适合非专业人士的统计学入门;(2)书中的很多案例和习题比较好,能从简单的角度阐述复杂的概率统计的理论知识;(3)本书比较内容相对连贯,读下去一气呵成缺点:(1)有少许印刷错误《深入浅出统计学》读后感(二):期望,均值,方差~好吧我撕开了读的吞不太认同这种毁书的阅读方式,可这个厚度真不合适地铁,撕开后还是很有成果的,新问题是如何装订回去?正题:均值是发生了的期望的话,方差计算的一致性就可以解释了,现在再开始几何分布的期望速算方式就好理解点儿了,这次是要feel几何分布的方式不是推理《深入浅出统计学》读后感(三):苏格拉底助产术之统计入门这是一本非常适合入门的统计书:1.内容轻重得当,可高效窥见统计学全貌:可视化;度量集中与分散(均值、距、差);概率计算、描述(四类分布)与预测(期望、方差);用样本(抽取样本)预估总体(抽样分布、点估计量、置信区间)、以及进行假设检验(拒绝域);多变量之间的独立性(某分布)、相关性、线性回归、非线性回归。

2.叙事方式采用苏格拉底助产术,引导读者思考得出结论,学习效果好。

TW,headfirt系列的叙事风格非常值得学习,尤其在这轮内容消费的浪潮下。

《深入浅出统计学》读后感(四):有趣且清晰的入门书目本科时上过统计和测量的课,还有p,tata这些课程,考研时专业课里也有教育统计,但我觉得到看这本书之前都没有学明白统计的一些基本概念。

之前的学习方式都是从干巴巴的概念入手,加以枯燥的题目训练,本科的时候不知道学这些有什么用,后来也是想起来头就痛。

这本书非常适合像我这样文科背景数学小白的学生来作为入门的自学教材,相见恨晚啊。

《深入浅出Embedding 原理解析与应用实践》读书笔记思维导图

《深入浅出Embedding 原理解析与应用实践》读书笔记思维导图
类特...
第11章 用 Embedding提升机
器学...
第12章 用 Tr a n s f o r m e r 实 现 英...
第13章 Embedding技术在 推荐系...
第15章 用GPT-2生 成文本
第14章 用BERT实 现中文语句分类
第16章 Embedding技术
总结
10.2 TensorFlow 2详细实...
《深入浅出 Embedding 原理解析
与应用实践》
最新版读书笔记,下载可以直接修改
思维导图PPT模板
本书关键字分析思维导图
系统
可视化
技术
实例
性能
原理
安装
小结
第章
应用 数据
训练
模型
使用
处理
方法
实践
推荐
学习
目录
01 第一部分 Embedding基础知 识
03 附录A 基于GPU的 Te n s o r F l o w. . .
04
7.4 可视 化GPT原 理
06
7.6 小结
05
7.5 GPT3简介
8.1 可视化XLNet 原理
8.2 ALBERT方法
8.3 ELECTRA方法 8.4 小结
9.1 推荐系统概述 9.2 协同过滤
9.3 深度学习在推荐 系统中的应用
9.4 小结
第二部分 Embedding应用实例
第10章 用 Embedding表现分
5.6 使用PyTorch 构 建 Tr a n s . . .
5.7 Reformer 5.8 小结
6.2 可视化ELMo原 理
6.1 从word2vec到 ELMo

《深入浅出通信原理》读后感

《深入浅出通信原理》读后感

《深入浅出通信原理》读后感After reading "深入浅出通信原理", I was deeply impressed by the comprehensive and detailed explanation of essential communication principles in the book. 读完《深入浅出通信原理》,我深受书中对通信原理的全面而详细的解释所感动。

The author did an excellent job of breaking down complex concepts into easy-to-understand explanations, making it accessible even for readers with limited technical knowledge. 作者将复杂的概念分解成易于理解的解释,即使对技术知识有限的读者也能理解。

One aspect that I found particularly engaging was the historical background provided for each communication principle discussed in the book. 书中讨论的每个通信原理所提供的历史背景是我特别感兴趣的一点。

By understanding the historical context in which these principles were developed, I gained a deeper appreciation for the evolution of communication technology over time. 通过理解这些原理发展的历史背景,我更加欣赏通信技术随着时间的推移而演变的过程。

Additionally, the real-world examples and case studies included in the book helped to illustrate the practical applications of the concepts discussed. 此外,书中包含的真实世界例子和案例研究有助于说明所讨论概念的实际应用。

MFC的子类化

MFC的子类化

走出MFC子类化的迷宫:子类化,SUBCLASSWINDOW ,MFC消息机制---(摘自CSDN论坛)许多Windows程序员都是跳过SDK直接进行RAD开发工具[或VC,我想VC应不属于RAD]的学习,有些人可能对子类化机制比较陌生。

我们先看看什么是Windows的子类化。

Windows给我们或是说给它自己定义了许多丰富的通用控件,如:Edit、ComboBox 、ListBox……等,这些控件功能丰富,能为我们开发工作带来极大方面,试想:我们单单是自己实现一个EDIT控件是多么的艰难!但是,在实际开发中还是有些情况这些标准控件也无能为力,比如:在我们的应用中要求一个EDIT 得到老师对学生的评价A、B、C[不要对我说你想用ComboBox实现J],这时,要求在Edit 中禁止对其它字母、数字的输入操作,怎么办?EDIT控件本身没有提供这种机制,我们就可以采用子类化很好的解决这类问题。

我们知道,每一个Windows窗口[这里是EDIT]都有一个窗口处理函数负责对消息处理,子类化的办法就是用我们自己的消息处理函数来替代窗口原有的、标准的处理函数。

当然我们自己的窗口处理函数只是关心那些特定的消息[在这里当然是WM_CHAR了],而其它消息,再发给原来的窗口函数处理。

在SDK中的实现方法是调用函数SetWindowLong :WNDPROC * oldWndProc = (WNDPROC)SetWindowLong(hWnd, GW L_WNDPROC,(DWORD)AfxGetAfxWndProc());其中AfxGetAfxWndProc()是我们自己的窗口处理函数,在其中处理过我们感兴趣的消息后就可能通过返回的原窗口处理函数指针oldWndProc来把其它消息按标准方法处理掉,具体做法请查阅相关资料。

但到了MFC“时代”,一切都被包装起来了,原来的窗口类注册、窗口函数都不见了[或是说隐身了],我想对于那些“刨根问底”的程序员有兴趣了解在MFC中的子类化机制,本人就自己做的一点“探索”作出总结,希望能给大家点启示。

深入浅出书籍

深入浅出书籍

深入浅出书籍1. 什么是深入浅出书籍深入浅出书籍是一种以简单易懂的方式解释复杂概念和知识的图书。

它们通常通过使用生动的例子、直观的比喻和简洁明了的语言,将复杂的主题转化为容易理解和消化的内容。

这类书籍旨在帮助读者快速掌握某个领域或主题,并在不失深度的同时提供实际应用。

2. 深入浅出书籍的特点2.1 清晰明了深入浅出书籍以简洁明了的语言表达复杂概念,避免使用过于专业或晦涩难懂的术语。

作者会尽可能地采用通俗易懂的词汇,使读者能够轻松理解和消化所学内容。

2.2 生动有趣为了增加读者对内容的吸引力,深入浅出书籍通常会使用生动有趣、富有想象力的例子来解释抽象概念。

这样做不仅可以提高读者记忆和理解能力,还能使学习过程更加有趣和愉快。

2.3 实用性强深入浅出书籍注重将知识转化为实际应用。

作者会提供实际案例、技巧和建议,帮助读者将所学知识应用到实际生活或工作中。

这种实用性的设计使得读者能够更好地掌握并运用所学内容。

2.4 适合各种读者深入浅出书籍的写作风格通常简单明了,不需要读者具备过多的背景知识。

这使得这类书籍适合各个层次的读者,无论是初学者还是专业人士,都可以从中获益。

3. 深入浅出书籍的优势3.1 提高学习效率深入浅出书籍通过简化和解释复杂的概念,帮助读者更快地理解和消化知识。

相比于繁琐的教科书或专业论文,这类书籍能够以更轻松、愉快的方式进行学习,提高学习效率。

3.2 培养兴趣和动力深入浅出书籍往往会使用生动有趣的例子来解释抽象概念,这样能够吸引读者的兴趣并激发学习的动力。

相比于枯燥的理论知识,这种有趣的学习方式可以让读者更加主动地投入学习过程。

3.3 拓宽知识面和视野深入浅出书籍涵盖了各个领域的知识和内容,可以帮助读者拓宽自己的知识面和视野。

通过阅读这类书籍,读者可以了解不同领域的基本概念和原理,从而增加对世界的认知和理解。

3.4 增强实际应用能力深入浅出书籍注重将知识转化为实际应用。

通过学习实际案例、技巧和建议,读者能够更好地将所学知识应用到实际生活或工作中,提高自己的实际应用能力。

深入浅出MFC

深入浅出MFC

CShape::setcolor(2, (CRect*)&rect1); CShape::setcolor(3, (CRect*)&rect2);
Index

類別及其成員-談封裝(encapsulation) 基礎類別與衍生類別-談繼承(Inheritance) This指標


Example(cont’)
#0028 class CSquare : public CRect #0029 #0030 public: #0031 void display() { ... } #0032 }; // 四方形是一種矩形
Example(cont’)
CSquare square; //宣告一個矩形名為square CRect rect1, rect2; //宣告兩個四方形 CCirclቤተ መጻሕፍቲ ባይዱ circle;
compile
class CShape { ... public: void setcolor(int color, (CShape*)this) { this->m_color = color; } };
CRect::setcolor(2, (CRect*)&rect1); CRect::setcolor(3, (CRect*)&rect2);

四方形(Csquare)


color(資料) Display(行為)
Example-Csquare (cont’)

{
對Csquare物件的描述:
class CSquare // 常常我們以C 作為類別名稱的開頭
private:
int m_color; public: void display() { ... } // 通常我們以m_ 作為成員變數的名稱開頭

《深入浅出ASP.NETCore》读书笔记(一)

《深入浅出ASP.NETCore》读书笔记(一)

《深⼊浅出Core》读书笔记(⼀)前⾔:本来是奔着.NET5去找书的,不过好像确实太新了,版本升级才没多久,想看实体书有点着急了。

寻思了半天,发现《深⼊浅出 Core》,内容是真不错,版本是 3.1,本来是当⼯具书备阅,最后决定从头到尾把基础再夯实⼀遍,毕竟3.1也没系统的学习过。

⽽且⾃⼰平时学都是踩着坑绕着弯的,这次把书⾥基础的知识点记录下来,也帮助像我⼀样不爱看书的野路⼦学习⽅法,把坑填上,减少弯路学习⼯具: Visual Studio 20192.16号学习记录创建MockSchoolManagement空项⽬( Core Web应⽤程序)项⽬⽂件(.csproj) (PS:双击项⽬或者项⽬上⿏标右键->编辑项⽬⽂件)配置项说明[TargetFramework:⽬标框架,当前是net5.0,书本是netcoreapp3.1],[AppendTargetFrameworkToOutputPath:项⽬发布时,是否将框架版本号追加到指定的输出路径下],[AspNetCoreHostingModel:指定托管类型InProcess,OutOfProcess];LaunchSettings.json: 环境类型[Development(开发环境), Staging(演⽰环境), Production(⽣产环境)],这⾥设置好参数,appsettings.json就会调⽤相应的配置Secrets.json: 对应.csproj⽂件中(PS:双击项⽬或者项⽬上⿏标右键->编辑项⽬⽂件)的UserId,就是个json⽂件,花括号⾥可以写很多条键值对appsettings.json: 配置⽂件Iconfiguration: Startup.cs⽂件中,Startup构造函数依赖注⼊该接⼝,实现加载配置⽂件。

_configuration["key"] 读取值,读Secrets.json⽂件的值也这么操作UseStaticFiles(): 静态⽂件中间件StaticFilesOptions():静态⽂件中间件参数配置类,⽐如静态⽂件夹名字,默认是wwwroot,vs2019中会⾃动修改显⽰图标。

C++学习由浅入深过来人图书指导

C++学习由浅入深过来人图书指导
2、《Windows程序设计》——了解Windows编程的本质,相关的API使用,Windows程序结构、消息传递机制。如果你想在Windows上开发你的COM程序了解一点本深入浅出MFC》——学习MFC的相关知识,了解MFC的封装知识,MFC的框架。个人认为通过本书学习作者对程序的剖析方法才至为重要,那样会帮你在ATL的各种Wizard产生的代码中不至于迷失方向。
6、《COM本质论》——让你透过现象看本质,如果学习COM不读此书真是让我不敢相信你是做COM编程的。个人认为此书是学习COM的最好的一本书,太精彩了,尤其是前几章一定会让你眼前一亮。书中对套间的描述更让我迷茫很久的问题,得到了最好的解决。但是学习本书一定要有良好的C++基础和对外国人叙述事物的语言的良好领悟能力。
10、ATL开发指南
首先声明本人并非COM/ATL高手,尽管本人接触他们已经有4年了,但是因为工作中的一些原因一直未能深入研究和广泛的实际的使用它们。不过回想学习它们的痛苦经历,实在是有点不堪回首。在此仅以此文和大家探讨一下学习它们的路径,以让后来人少走弯路。
我个人认为学习COM是一件不简单的事情,只有一步一个脚印踏踏实实的理解每个观点和理论才能真正懂得其精髓。那样才能在发生错误的时候,依靠自己的知识解决问题。我个人认为如果要学好COM/ATL没有一年的时间是肯定不行的,也许是我比较愚笨。个人认为需要COM/ATL的应该循序渐进,可以参考的书目有:
1、《C++ Primer》——学习C++语言。主要理解其中的继承、重载、多态、多重继承、虚函数、纯虚函数、C++模板,这些都是以后学习COM的基础。因为C+ +对COM的实现是完全支持的,只有在C++上才能实现COM所有功能,体现其无穷魅力。很多书在说明COM原理的时候也是使用C++给予说明的。《COM技术内幕》中为了说明COM的使用了C++的多重继承和纯虚函数,MFC使用了嵌套类实现COM,ATL使用多重继承实现COM。不要认为这些基础不重要,在很多的满口继承和重载的C++高手中,很多人都不知道什么叫纯虚函数?虚函数表是什么东西?它在内存中是怎么存储的?派生类中又如何?

百度客户端部推荐读物

百度客户端部推荐读物

百度客户端部推荐读物C++开发1.《C++ Primer》:全面学习C++的必备书籍2.《Thinking in C++》:了解C++背后的一些机制3.《深度探索C++对象模型》:深入了解C++,也是学习COM的必经之路Windows平台入门1.《Windows程序设计》:这本书主要讲的是Windows API的使用,是Windows编程入门书籍。

上册涉及到的知识基本上就够用了,时间不充裕的话阅读上册即可。

2.《Win32多线程程序设计》:Windows下多线程编程必备3.《Windows核心编程》:Window平台基础知识:消息机制,内存管理,多线程,动态链接库等4.《Windows网络编程》:介绍Windows下各种网络协议的开发和并发处理模型。

进阶1.《深入浅出MFC》:Windows下编程,MFC虽然有些过时,但其机制还是有学习的价值。

重点学习书中提到的MFC 6大机制2.《COM本质论》:COM是Windows构建用户态的重要技术之一,Windows开发必修课,本书对COM的设计动机作了深入阐述3.《深入解析ATL》:ATL全名Active Templete Library,是用C++的模版封装了COM,这本书主要讲的是对源码分析4.《WTL White Paper》:WTL源自微软,基于ATL的一套开源模版库,主要用于界面编程和工具类的使用5.《代码大全》:这边书主要讲的是工程编码规范高级1.《深入解析Windows操作系统》:Windows大牛书籍,讲的主要是Windows操作系统的内核原理调试技术1.《软件调试》2.《Windows高级调试》3.《windows用户态程序高效排错》Linux平台Linux内核1.《Linux Kernel Development》/《Linux内核设计与实现》:Robert Love的著作,不厚的一本书,深入浅出地将Linux内核娓娓道来Linux使用和Shell编程1.《sed & awk》/《sed与awk》:sed与awk都是Linux下常用的日志分析利器Linux编程1.《Beginning Linux Programming》/《Linux程序设计》:老牌的Linux编程入门书2.《Advanced Programming in the Unix Environment》/《Unix环境高级编程》:对Unix编程环境做了细致的总结,涵盖了进程间通讯、网络通讯、文件系统等各方面的知识网络编程1.《TCP/IP Illustrated, Volume I》/《TCP/IP详解,卷一》:对理解TCP/IP协议的设计理念和协议细节有显著的帮助。

深入浅出MFC文档视图架构之相互关系

深入浅出MFC文档视图架构之相互关系

深入浅出MFC文档/视图架构之相互关系1、模板、文档、视图、框架的关系连载1~5我们各个击破地讲解了文档、文档模板、视图和框架类,连载1已经强调这些类有着亲密的内部联系,总结1~5我们可以概括其联系为:(1)文档保留该文档的视图列表和指向创建该文档的文档模板的指针;文档至少有一个相关联的视图,而视图只能与一个文档相关联。

(2)视图保留指向其文档的指针,并被包含在其父框架窗口中;(3)文档框架窗口(即包含视图的MDI子窗口)保留指向其当前活动视图的指针;(4)文档模板保留其已打开文档的列表,维护框架窗口、文档及视图的映射;(5)应用程序保留其文档模板的列表。

我们可以通过一组函数让这些类之间相互可访问,表6-1给出这些函数。

表6-1 文档、文档模板、视图和框架类的互相访问我们列举一个例子,综合应用上表中的函数,写一段代码,它完成遍历文档模板、文档和视图的功能:由此可见,下面的管理关系和实现途径都是完全类似的:(1)应用程序之于文档模板;(2)文档模板之于文档;(3)文档之于视图。

图6.1、6.2分别给出了一个多文档/视图框架MFC程序的组成以及其中所包含类的层次关系。

图6.1 多文档/视图框架MFC程序的组成图6.2 文档/视图框架程序类的层次关系关于文档和视图的关系,我们可进一步细分为三类:(1)文档对应多个相同的视图对象,每个视图对象在一个单独的MDI 文档框架窗口中;(2)文档对应多个相同类的视图对象,但这些视图对象在同一文档框架窗口中(通过"拆分窗口"即将单个文档窗口的视图空间拆分成多个单独的文档视图实现);(3)文档对应多个不同类的视图对象,这些视图对象仅在一个单独的MDI 文档框架窗口中。

在此模型中,由不同的类构造成的多个视图共享单个框架窗口,每个视图可提供查看同一文档的不同方式。

例如,一个视图以字处理模式显示文档,而另一个视图则以"文档结构图"模式显示文档。

山高月小,水落石出

山高月小,水落石出

山高月小,水落石出
读过候俊杰先生的《深入浅出MFC》的朋友都应该还记得的这句话。

这句话在这本书中出现多次,这似乎是侯先生的做人哲学,似乎是候老师想向读者传递些什么。

一开始我并不了解清楚。

“山高月小,水落石出”。

有月亮的时候一般都是在晚上,不妨想象一轮明月挂在高山之顶,而你正独坐家门口,遥望星空。

此情此景,安敢舍此良景入睡?而身处山之脚,心念山顶之明月,是否会有一种冲动,一种想到山顶观月的想法呢。

有!那就行动吧,而此时你就变成了一个登山者。

背起行囊,踏着夜色,向着山顶的明月出发了。

但山是如此的高,登上山顶摘得明月必定是困难重重。

后半句“水落石出”,正是对你追求过程中克服困难的一贴草药。

“水落石出”,是一场滴水与磐石的较量。

滴水为柔,而磐石为坚。

柔何以克坚,古人告诉我们有两种方法一是攻其一点,持之以恒;二是凝聚力量,于敌要害致命一击。

我想此处应该是第一种方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上面说过,在动态识别一个类时不需要 pFirstClass 链表,因为类是沿着它的同宗路线比较(这 也是一种隐含的链表)。但是动态创建就需要了,因为它也不知道自己是什么类型,因此要 遍历 pFirstClass 链表中所有的已知的类,直到找到与自己相符的类型。如果查找成功则通过 指针调用初始化函数来创建对象(指针为 NULL 则不能创建),否则就无法动态创建。
由于_init_classname 是静态的 AFX_CLASSINIT 类型,因此在定义的时候自动的调用 AFX_CLASSINIT 初 始 化 操 作 从 而 将 pNewClass 神 不 知 鬼 不 觉 地 插 入 到 了 CRuntimeClass::pFirstClass 链表的开头(这个 pFirstClass 链表在动态识别中还用不着)!
size_t n, size_t size, int (*cmp)(const void *keyval, const void *datum)); 想一想开发 bsearch 函数的人怎么会知道两个元素的是什么,怎么比较大小呢?因此就必须 留给用户要自己定义 cmp 函数了! 回调函数一般都有固定的格式(不知道是否会用变参数的情况),不然可能会发生错误。回
在 MFC 中保存了一棵类的家族树,CObject 是根结点,其他的类都是他的后代(有几个特 殊的除外,如: CPoint 等)。由于类的家族树存放的是类的信息——不是对象的信息,因此 只需要保存一个就够了,所以 MFC 将这棵树保存为 static 类型。
MFC 类的家族树和数据结构中的树并不相同,普通的树通过跟结点就可以访问所有的结点 (包括叶子)。但在 MFC 中却不行——它只能逆向地从叶子结点向根结点方向访问(从父 结点访问不到子结点)。
};
AFX_CLASSINIT::AFX_CLASSINIT(CRuntimeClass *pNewClass) {
pNewClass->m_pNextClass = CRuntimeClass::pFirstClass; CRuntimeClass::pFirstClass = pNewClass; }
以前很多人用 C 语言(现在也有好多人用 C 入门),对 C 的执行机制很熟悉。C 语言是一种 高级的汇编语言,写一段代码就是一段代码,编译器不会暗中给你做什么手脚。即使编译器 做也就是在初始化和退出的时候调用一些函数,这些用户都知道(fork、exec、exit……)。ห้องสมุดไป่ตู้
关于函数这一块也一样: 函数参数是值传递——数组除外(数组传地址),为了支持变参数,参数是从右到左进栈, 函数名就代表一个函数的入口地址,比较复杂一些的就是函数指针。
第三章 MFC 六大关键技术之仿真
其实除了消息外,其他的几个技术细节都可以看作是面向对象语言的特征。例如:对象的产
生过程、动态识别 ……。动态识别、动态创建、序列化特征已经在 JAVA 等新的面向对象 语言中得到支持了。如果不想了解编译器的实现细节的话,也可以不看。MFC 本身特有的 东西应该是消息的传播机制。当然这里还是要全部总结一下了(毕竟也是这本书最有特色的 地方了)。 1 对象创建 MFC 中所有的类都继承自 CObject,创建对象时要考虑其父类的创建。个人觉得是这样一个 规则(不知道对不对):创建对象之前要先创建父类,除非它没有父类!构造的函数的调用 规则也是这样:如果有就先调用父类的构造函数(这是 MFC,不是 C++,不考虑多重继承 的情况)。 这就像人类的繁衍:一个人要出生,他的爸爸妈妈肯定要先出生,除非他是第一个进化成人 类的(或者是人工合成的)。 2 运行时类型识别
我觉得这里的识别有两种级别,打个比方:X 是某个人,还是具有某个人的血统? 这个问题该问谁,怎么问?问 X 的爸爸妈妈、爷爷奶奶还是 X 自己?如果李四想知道自己
身上是否有李世民的血统,是要亲自问李世民吗(他怎么会知道自己有多少后代)?
正确的办法是: 1. 把 X 设为李四。 2. X 是不是李世民? 3. 如果 X 是就停止,并输出结果是。 4. 如果 X 不是,但 X 有爸爸,就 X 设成 X 的爸爸,然后转到 2。 5. 如果 X 没有爸爸就停止,输出结果否。
例如:
class A { public:
virtual void display() { cout << "class A" << endl; } };
class B: public A { public:
virtual void display() { cout << "class B" << endl; } };
这很有点像一种静态的初始化操作——AFX_CLASSINIT 在运行之前已经被自动地完成了。 当然 AFX_CLASSINIT 和静态初始化还是有些区别的:我感觉静态初始化应该是在编译时 被调用,而不是在执行时被调用。这应该算是 C++中一些很晦涩的技巧吧
pFirstClass 链 表 是 通 过 AFX_CLASSINIT 自 动 初 始 化 的 。 但 是 class_name::classclass_name::m_pBaseClass 指向的同宗链表则完全是手工初始化的(通过宏 传递的参数)。在同宗链表中每个类和它的父类都可以用确定名称直接访问(静态的类别型 录网中的每个 CRuntimeClass 都可以通过一个确定的名称直接访问——不必要从 pFirstClass 开始遍历)。
补充一点:定义 CObject 类时要手工生成 pFirstClass 链表和手工初始化 CRuntimeClass。
3 动态创建
MFC 也定义了 2 个宏:DEALARE_DYNCREATE 和 IMPLEMENT_DYNCREATE。
要动态的生成对象,首先要知道对象的初始化函数,在 MFC 中采用在 CRuntimeClass 中保 存函数指针的方法来实现。保存指针等操作的代码也是在宏中加入的(MFC 要求要有一个 空参数的构造函数,个人觉得也可以让它们传递一个 void 型指针)。
回调函数在 windows 开发中得到推广应该是由其“以消息为基础的事件驱动系统”本质决 定的。用用户要实现某个操作,但是不知道什么时候开始执行(因为不知道什么时候能收到 相应的消息);系统则知道什么时候触发操作(因为消息由系统发出),但是又不知道操作的 具体细节(操作是用户自己定义的)。在这种时候回调函数就成了用户和系统之间沟通的桥 梁——用户自己定义操作的细节,但是由系统在适当的时刻帮助调用。
MFC 为 了 隐 藏 类 的 家 族 树 的 实 现 细 节 , 定 义 了 2 个 宏 : DEALARE_DYNAMIC 和 IMPLEMENT_DYNAMIC。DEALARE_DYNAMIC 用于定义变量,IMPLEMENT_DYNAMIC 则进行相应的初始化,宏的具体细节可以参考书中代码。
在强调一点:这是 MFC——不是 C++,所有的类都是从 COject 继承而来(个别类除外), 因此他们如果存在就一定被保存在 pFirstClass 链表中。如果你要是另起炉灶,随便派生自一 个类,又使用了 DEALARE_DYNCREATE 和 IMPLEMENT_DYNCREATE 宏,那情况就糟 糕了,pFirstClass 链表可能被彻底的破坏,那 COject 的什么特性就都没了(切记)!!!
我自己把这种树叫做逆树(和通常的树相反,好象是反物质一类的东东)。 其实在所有关于 指针的数据结构中都有这种逆*的存在。你可以想象在一个单向链表中,从一个结点移动到 后一个结点时,就回不到之前的结点了(除非你另外保存了它的地址)。在现实中也有很多 这种情况:你可以知道你所认识的人,但却很难知道所有认识你的人——这是指针的不可逆 性造成的。
调函数一般都是由 windows 系统来调用,不是用户自己调用。在用户使用 bsearch 函数时, 用户自己定义的 cmp 函数也是由 C 函数库来调用,不是自己调用。
回调函数的概念虽然在 C 语言中就已经存在,但使用的范围远没有 windows 中的这么广(其 实在设计接口时,遇到某些有共性的未知操作就可以用传递一个函数的方法解决——例如遍 历某个未知集合中的每个元素)。
因此,回调函数就成了“以消息为基础的事件驱动系统”系统平台上程序开发的核心!
为了向面向对象思想看齐,一般把回调函数也设计成类的成员。又因为回调函数有固定格式, 不能随便修改,因此在类中要把它声明为 static 类型函数(这是利用了 C++编译器不会为类 中 static 函数添加 this 指针参数的隐含特征)。
《深入浅出 MFC》学习笔记
学习时间:2006.3.19 - 2006.2.30 柴树杉 2006.2.30 整理于 VisionTek
第一章 win32 基本程序概念
windows 是一个“以消息为基础的事件驱动系统”。当系统内核捕捉到外围设备发生的事件 后,将以一种特定的消息传递出去。而用户程序在接收到相应的消息后再做出相应的处理(否 则系统以默认函数处理)。处理窗口过程的一般是窗口函数(window procedure)。Windows 程序的执行流程如上图。 窗口函数习惯上称作回调函数,回调函数类似于 C 语言中 bsearch(二分法查找)函数的 cmp (用于比较两个元素的大小)参数: // #include <stdlib.h> void *bsearch(const void *key, const void *base,
void main() {
A *pa = new B; pa->display(); }
执行的结果却打印是:class B
让人感觉不解的地方就是 pa 明明是类 A 的指针,却是执行了类 B 的函数(不可原谅)!!! 其实有这种感觉的人在不知不觉中就犯了一个形而上的错误:用 C 语言的函数行为来套用 display()的行为。在此我想提醒一点:把 C++当作一个新的语言,C 只是参考,不是金科玉 律,切记!!!
相关文档
最新文档