第二章 MFC简介
3.2 MFC中的类
MFC中的类可分为两大部分:一部分类是从CObject类派生而来的,另一部分不是从Cobject类派生来的。
这些类按照功能可以分为下面几部分:
跟应用结构相关的类:包括GUI线程类(CWinThread)、应用程序类(CwinApp)、文档类(Cdocument)、文档模板类(CdocTemplate)等。
跟窗口相关的类:包括窗体类(CWnd)及从CWnd派生的框架窗口类(CframWnd)、控制条类(CcontrolBar)、对话框类(Cdialog)、视图类(Cview)和各种窗口控制类(如Cbutton、Cedit)等。
上两种类型的类都是从CcmdTarget类派生而来的。CcmdTarget类提供了将消息或命令路由到其成员函数的能力。
跟异常处理相关的类:包括CException基类及其派生的若干异常类。
跟文件服务相关的类:包括文件类CFile及其派生类。
跟绘图相关的类:包括设备上下文类CDC及其派生类,用户界面对象类CGdiObject及其派生类。
跟数据库相关的类:包括支持ODBC和DAO数据访问接口的类。
跟Internet服务相关的类:这些类包括CInternetSession、CInternetConnection、CFileFind等。
跟Windows Socket相关的类:包括CAsyncSocket及其派生类CSocket。
跟线程同步相关的类:包括CSyncObject及其派生类。
跟菜单相关的类:包括CMenu类。
跟集合相关的类:包括数组类CArray及其派生类、列表类CList及其派生类、映射类CMap及其派生类。
实用类:包括字符串CStringT、矩形类CRect、点类CPoint、时间类CTime、CTimeSpan等。
一般支持类:如矩形跟踪类CRectTracker、等待光标类CWaitCursor、图形类CImage、域交换类CFieldExchange等。
运行时对象模型支持类:包括CArchive类、CRuntimeClass类、CDumpContext类。
OLE自动化支持类:OLE货币类COleCurrency、OLE时间类COleDateTime、COleTimeSpan、OLE变体类COleVariant。
同步支持类:包括CMutiLock和CSingleLock。
类型化的集合模板:包括CTypedPtrArray类、CTypedPtrList类、CTypedPtrMap类。
其它。
3.3 MFC中的窗口管理
1 C++窗口对象和Windows窗体之间的关系
MFC用一个CWnd对象来管理窗口。CWnd对象是一个C++窗口对象,与表示Windows窗口的HWnd是不同的。CWnd对象只有依附到具体的HWnd之后,才表示一个真正的窗口。如果需要,可以在运行过程中让同一个CWnd对象依附到不同的HWnd,然后利用CWnd对象来管理它所依附的窗体。
2 创建窗口
MFC中创建窗口分为两步:第一步是创建CWnd实例,第二步是创建窗口,并把该窗口句柄保存到CWnd实例的m_hWnd成员当中。MFC中销毁窗口也要确保销毁窗口对象以及与之有关联的C++对象——CWnd实例。
用CWnd或其派生类来创建窗口
演示代码: P72
CFrameWnd的Create函数声明如下:
Virtual BOOL Create(
LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle = WS_OVERLAPPEDWINDOW,
Const RECT& rect = rectDefault,
CWnd* pParentWnd = NULL,
LPCTSTR lpszMenuName = NULL,
DWORD dwExStyle = 0,
CcreateContext* pContext = NULL
);
第一个参数为窗体类名,如果将其设为NULL,则表示使用CFrameWnd默认的类名,第二个参数表示窗体名,其它参数都是可以省略的。如果要设置菜单,则传入菜单资源的字符串名字,如果不是字符串而是资源ID,需要用MAKEINTRESOURCE将其转化为字符串。
销毁窗体
可以直接用API函数DestroyWindow来销毁一个窗口,但如果该窗口已经被附 加到了一个CWnd对象中,在它的析构函数中会自动调用CWnd的DestroyWindow 成员函数来销毁窗体。
00oo.. 发表于 2005/11/8 17:26:11
|
|