Visual C++ 6.0 读书笔记

VC++ 工程的文件
l          *.dsw         工作区文件                  保存本工程所在的工作区的信息
l          *.opt          工作区选项文件          保存了用户为所建工作区所定制的一些选项
l          *. dsp                  工程文件                      保存了用户所建工程的有关信息
l          *.clw          类的信息文件              保存了工程中所有类的相关信息, Classwizard 使用此文件对类进行编辑
l          *.ncb          非编译的浏览文件      包含了由分析起产生的一些信息,这些信息可被 ClassView WizardBar 等使用
l          *.rc Resource.h                   主要资源文件及其头文件             其中还包含了标准的 MFC 资源文件 Afxres.rc
l          *.rc2           工程的资源文件          用于 VC++ 不能直接进行编辑的资源,以及被多个工程使用的资源。
 
应用程序的运行过程
当运行用户应用程序时,程序中的应用程序框架最先获取控制权。然后依次执行以下功能:
l          做部分初始化工作
l          构造应用程序的唯一应用类对象
l          调用 WinMain 函数
n          获取唯一的应用类对象指针
n          进行一些内部初始化
n          进行应用程序初始化,也就是调用应用类的 InitApplication 进行初始化。
n          进一步初始化应用程序,也就是调用应用类的 InitInstance 函数进行初始化;
n          调用应用类的 Run 函数,运行消息,不断的获取消息和处理消息,知道获取 WM_QUIT 消息;
n          调用应用类的 ExitInstance 函数
n          退出应用程序之前的首尾工作。
l          WinMain 函数返回后,删除唯一的应用程序对象,
l          终止应用程序
 
应用程序窗口
l          边框窗口
n          SDI            边框窗口就是主窗口                     CMainFrame 派生
n          MDI          边框窗口   
主边框窗口                                     CMDIFrameWnd 派生
子边框窗口                                     CMDIChildWnd 派生
l          视图窗口
 
文档模板类
InitInstance 方法内的主要操作就是:文档模板类的创建。
文档负责数据的存储,视图负责显示。文档通过视图和用户打交道。
l          单文档模板
l          多文档模板
App 对象通过并不直接管理文档模板类,而是通过一个内部类 CDocManager 来管理。 CWinApp 类包含有一个 CDocManager 类的对象 m_pDocManager ,它是指向 CDocManager 类对象的指针,在 CDocManager 类中定义了一个指针列表,列表中的每一项都是一个指针,指向每一个文档模板对象。 AddDocTemplate(pDocTemplate ) 就是将文档模板对象的指针添加到列表中。
 
CDocManager 对象 m_pDocManager                                         ---------------------------           文档类
App 对象            ---------------------------------------------     文档模板对象              ---------------------------           视图类
                                                                                                                                   ---------------------------           窗口类
 
                                                                                             GetFirstDocPosition             GetFirstViewPosition
GetFirstDocTemplatePosition                          GetNextDoc                          GetNextView
App 对象  ------------------------------------ 文档模板对象 --------------------------- 文档类 --------------------------- 视图类
                   GetNextDocTemplate                                       AddDocument                       UpdateAllViews
                                                                                             RemoveDocument                 AddView RemoveView
l          单文档模板类只有一个文档对象
l          多文档模板类有一个文档对象列表
l          文档对象有一个视图列表
AfxGetApp                          
AfxGetInstanceHandle         
AfxGetResourceHandle        
AfxGetAppName                 
 
消息
三种类型的消息:
l          标准的 Windows 消息                    WM_ 为前缀的那些消息( WM_COMMAND 除外)
l          控件通知消息                        由编辑框,列表框等控件或者子窗口发给父窗口的通知消息,以 WM_COMMAND 为消息名,在消息中含
                                                        有消息的通知码,以区分不同的控件通知消息
l          命令消息                                由菜单,工具条,加速键等三种用户接口对象发出的消息,以 WM_COMMAND 为消息名,在消息中含有
命令的标识符。
其中,标准的 Windows 消息和控件通知消息必须由窗口类的对象接受,也就是直接或者间接的由 CWnd 类或者其派生类来处理。命令消息则可以由文档类,窗口类,文档模板类以及应用类等对象来处理。所以下面就涉及到命令消息的处理过程。
命令消息的传递途径:
l          MDI 主边框窗口首先接收到此命令消息;
l          主窗口消息将处理命令的机会让给当前活动的 MDI 活动子窗口来处理;
l          子窗口消息将处理命令的机会让给当前活动的视图;
l          视图搜索自己的消息映射,查找对应的处理函数,没有则将消息传递给此视图相关联的文档;
l          文档搜索自己的消息映射,查找对应的处理函数,没有则将消息传递给此文档相关联的文档模板对象;
l          文档模板对象搜索自己的消息映射,查找对应的处理函数,没有则将消息回传给子边窗口;
l          子边窗口搜索自己的消息映射,查找对应的处理函数,没有则将消息回传给主边框窗口;
l          主边框窗口搜索自己的消息映射,查找对应的处理函数,没有则将消息回应用对象;
l          如果其中的某个对象处理了命令,则命令传递终止,不再继续。
l          如果所有的对象都没有命令的处理函数,则默认情况下,应用程序框架会禁止使用该命令对象。
 
对话框
l          消息对话框:
MessageBox(
                            HWND hWnd,
                            LPCTSTR lpText,
                            LPCTSTR lpCaption,
                            UINT nType
                   );
风格:
l          一般对话框
n          模态对话框
n          非模态对话框
l          属性页对话框
n          一般属性页对话框
n          向导对话框
l          通用对话框
n          文件对话框
n          颜色对话框
n          字体对话框
n          页面设置对话框
n          打印对话框
n          查找和替换对话框
n          OLE 通用对话框
 
控件
l          Picture 控件
l          Static Text 控件
l          Edit Box 控件
l          Spin 控件
l          Combo Box 控件
l          Group Box 控件
l          Radio Botton 控件
l          Check Box 控件
l          Button 控件
l          Slider 控件
l          ScrollBar 控件
l          Tab 控件
l          Tree 控件
l          List 控件
l          Progress 控件
l          Animate 控件
 
控件栏
l          工具栏
l          状态栏
l          对话框栏
类图结构:
 
 
 
 
进程和线程

进程
 
线程
I
 
线程
II
 
线程
III
 
线程
X
代码
数据
地址空间
进程间的通讯:
l          使用同步类控制访问共享数据
七个多线程的同步类:
同步对象: CSyncObject, CSemaphore, CMutex, CCriticalSection, CEvent
同步访问对象: CMultiLock CSingleLock
每个同步对象都有一个信号状态,可用时为有信号态,不可用时为无信号态。
 
 
 
 
 
同步对象:
CSyncObject 包含了 Lock UnLock 等基本的函数:
BOOL Lock ( DWORD dwTimeout )
BOOL UnLock()
多线程需要同步控制时,调用 Lock 函数获取对该同步对象的访问权,之后才能访问共享资源。如果其他线程正使用该资源,则 dwTimeout 指明了线程等待的实践,缺省 INFINITE 表示一直等待到同步对象可用。
在程序设计中,首先为需要控制对进程访问的资源创建同步对象,然后在不同的进程中根据需要使用 Lock UnLock 函数即可。为了方便使用,可以创建 CSingleLock CMulti
Lock 对象来管理和使用这些同步对象。
CSemaphore 信号灯对象:
当应用程序的多个线程要访问资源时,可以使用 CSemaphore 类进行控制。 CSemaphore 类对象允许一定数目的线程访问共享资源。在访问资源之前,先要访问信号灯对象,在它成为有信号状态时再对资源进行访问。
CMutex 互斥量对象:
用于顺序地访问某一资源,在任一时刻只允许之多一个线程访问资源。
CEvent 事件对象:
   当应用程访问资源之前必须等待某事件的发生时,可以使用 CEvent 类进行控制。
CCriticalSection 临界区对象:
   可以将一段代码放入临界区,并制止多余一个线程同时进入,即只允许一个线程进入临界区。
CCriticalSection 之外,其他的三种同步对象都可以在系统多个进程中使用。
创建一个同步对象时,调用他们的构造函数,如果系统中存在同名的对象并且类型相同,则返回该对象,如果同名但类型不同,则构造失败。
同步对象:封装对同步对象的访问。
CSingleLock :一次只等待一个同步对象时使用。
CMultiLock :当在某个时刻需要使用多个同步对象时使用。
可以使用 Lock IsLock UnLock 等函数来控制对同步对象的访问。
l          使用消息队列
每个线程都有自己的消息队列,工作者线程也不例外。
用户界面线程:
发送消息: PostThreadMessage(UINT message, LPRARM lParam, WPARAM wparam)
处理消息: ON_THREAD_MESSAGE(message memberFxn)
 
CSyncObject
CSemaphore
CMutex
CCriticalSection
CEvent

 
 
 
 
 
 
用户界面线程
工作者线程
创建
CWinThread 派生,必须使用 DECLARE_DYNCREARE IMPLEM
ENT_DYNCREARE ,必须重载一些成员函数,
 
启动
AfxBeginThread
AfxBeginThread
终止
l          PostQuitMessage
l          AfxEndMessage
l          TerminateThread
 
状态
ResumeThread SuspendThread
 
优先级
SetThreadProority GetThreadProority
 
其他
CWinThread 线程和窗口相关,成员 m_pMainWnd 指向主窗口的指针。
可以通过 AfxGetMainWnd() 来获取线程的主窗口指针。
 
获取线程的退出码: GetExitCodeThread
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值