Visual C++ 6.0 读书笔记

VC++工程的文件
l          *.dsw         工作区文件                 保存本工程所在的工作区的信息
l          *.opt          工作区选项文件         保存了用户为所建工作区所定制的一些选项
l          *.dsp                  工程文件                     保存了用户所建工程的有关信息
l          *.clw          类的信息文件             保存了工程中所有类的相关信息,Classwizard使用此文件对类进行编辑
l          *.ncb          非编译的浏览文件     包含了由分析起产生的一些信息,这些信息可被ClassViewWizardBar等使用
l          *.rcResource.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                 AddViewRemoveView
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
同步访问对象:CMultiLockCSingleLock
每个同步对象都有一个信号状态,可用时为有信号态,不可用时为无信号态。
 
 
 
 
 
同步对象:
CSyncObject包含了LockUnLock等基本的函数:
BOOL Lock ( DWORD dwTimeout )
BOOL UnLock()
多线程需要同步控制时,调用Lock函数获取对该同步对象的访问权,之后才能访问共享资源。如果其他线程正使用该资源,则dwTimeout指明了线程等待的实践,缺省INFINITE表示一直等待到同步对象可用。
在程序设计中,首先为需要控制对进程访问的资源创建同步对象,然后在不同的进程中根据需要使用LockUnLock函数即可。为了方便使用,可以创建CSingleLockCMulti
Lock对象来管理和使用这些同步对象。
CSemaphore 信号灯对象:
当应用程序的多个线程要访问资源时,可以使用CSemaphore类进行控制。CSemaphore类对象允许一定数目的线程访问共享资源。在访问资源之前,先要访问信号灯对象,在它成为有信号状态时再对资源进行访问。
CMutex 互斥量对象:
用于顺序地访问某一资源,在任一时刻只允许之多一个线程访问资源。
CEvent 事件对象:
  当应用程访问资源之前必须等待某事件的发生时,可以使用CEvent类进行控制。
CCriticalSection 临界区对象:
   可以将一段代码放入临界区,并制止多余一个线程同时进入,即只允许一个线程进入临界区。
CCriticalSection之外,其他的三种同步对象都可以在系统多个进程中使用。
创建一个同步对象时,调用他们的构造函数,如果系统中存在同名的对象并且类型相同,则返回该对象,如果同名但类型不同,则构造失败。
同步对象:封装对同步对象的访问。
CSingleLock:一次只等待一个同步对象时使用。
CMultiLock:当在某个时刻需要使用多个同步对象时使用。
可以使用LockIsLockUnLock等函数来控制对同步对象的访问。
l          使用消息队列
每个线程都有自己的消息队列,工作者线程也不例外。
用户界面线程:
发送消息:PostThreadMessage(UINT message, LPRARM lParam, WPARAM wparam)
处理消息:ON_THREAD_MESSAGE(messagememberFxn)
 
CSyncObject
CSemaphore
CMutex
CCriticalSection
CEvent

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值