WndX.h
资源名称:网络视频电话系统.rar [点击查看]
上传用户:oldpeter23
上传日期:2013-01-09
资源大小:1111k
文件大小:8k
源码类别:
IP电话/视频会议
开发平台:
Visual C++
- /*------------------------------------------------------------------------------*
- =============================
- 模块名称: WndX.h
- =============================
- [目的]
- 当我刚开始用VC编程的时候,VC+MFC是我的主要开发手段。在开发过程中,我越来越
- 发觉,MFC太复杂,而且速度又慢,虽然它在某些方面简化了Windows编程,但综合考虑其
- 它一些方面的问题,比如说控制的深入性等发面,MFC显然有些力不从新,我还觉得MFC把
- WINAPI封装得太严实了,很多细节都被隐藏了。
- 现在我一直用SDK,我喜欢SDK,虽然它被看来很麻烦。
- 我还没用写过什么大程序(大概超过10000行的就算大程序了吧),但是我已经发现代
- 码封装的必要性,SDK虽好,我总不能通篇的回调函数和事件响应函数吧。为此我决定写
- 一个我自己的窗口封装类,就象MFC中的CWnd一样,但首先应该明白的是,我的窗口封装类
- 只是MFC中窗口类的简化,而不是重复。有些人或许会说,微软的MFC不错啊,我已经说过,
- MFC太慢,我需要的是一个快速的窗口封装类,不要封得太严实。象CWnd类中的一些对窗口
- 操作的函数,如GetWindowText之类的,根本没有必要去封装,多写个句柄真有那么烦吗?
- [描述]
- 为了封装对窗口的操作,我需要一套组织模式和一组额外类,为了这些,我已经花了很
- 多时间、想了很多办法。最后我选择了该模块中的方案。模块中有一个CWndMgr类,看
- 表面意思好象觉得它的作用很大,其实不然,在不断的修改中,它的作用已经和我的本意
- 不符了,现在,它的唯一作用是:当窗口创建时在其中登记一下,当窗口接收到第一个消
- 息的时候就删掉。CWndX和MFC中的CWnd类似,它实现了最基本窗口的创建等功能,所有窗
- 口都由此派生。CWndX比较抽象,一般由它派生类,而不直接由此创建对象。
- 注意!!:
- 有几个很重要的全局函数和全局变量,这对外部是不公开的,不允许对这些对象直接访
- 问。
- [用法]
- CWndX类比较抽象,请不要直接用它创建对象,你可以从它派生一个类来扩充它的功能.
- 1.如何派生一个类
- 每个学过C++的人都知道,class YourClass:plublic CWndX
- 2.如何响应窗口消息
- 首先,在你派生得到的类中,一般来说应该有一个形为
- LRESULT WndProc(UINT uMsg,WPARAM wParam,LPARAM lParam)
- 的虚函数,这是消息的入口
- 如果你用SDK写过程序,那么这将变得很简单,用一个switch语句就可以搞定.在你派
- 生出的类中,应该有一个WndProc的虚函数,这个函数是WINDOWS消息的入口,就相当于
- SDK中的窗口过程函数.在这个函数中,你用一个switch来获得你想要的消息,并定义一
- 系列响应的函数
- [依赖性]
- CHash
- [修改记录]
- 版本: 1.01.01
- 日期: 01-9-19
- 作者: Brant Q
- 备注:
- 这个模块能工作了,而且工作得不错,我用它创建了几个窗口,还用它将一个基于MFC的
- 模块改写了,基本符合要求.
- 目前对外只有一个CWndX类,一个CEditX类,和一个CDialogX类,以后如还要用到一些基
- 本的控件或窗口,将临时扩充此模块.
- -----------------------------------
- 版本: 1.01.02
- 日期: 01-9-24
- 作者: Brant Q
- 备注:
- 加入了菜单类CMenuX
- 修正了好多BUG,下面是主要的两个
- 1.在多线程环境下,有可能出现CWndMgr中访问争夺 --已修正
- 2.窗口无法收到WM_CREATE及其之前的消息 --已修正
- -----------------------------------
- 版本: 1.01.02
- 日期: 01-10-12
- 作者: Brant Q
- 备注:
- 原先是用普通线性链表存储窗口对象的,现在改用hash表,由于只有当窗口创建时才涉及
- 到Hash表的访问,因此性能没有明显提高.
- [版权]
- 2000-2002 115软件工厂 版权所有
- *------------------------------------------------------------------------------*/
- #ifndef _WNDX_H_
- #define _WNDX_H_
- #include <Windows.h>
- #include <commctrl.h>
- #include "GDIX.h"
- #include "Hash.h"
- #define WND_OBJ_ID "@" //窗口对象标识
- #define WND_OLD_PROC "~" //旧窗口过程
- class CWndMgr; //窗口管理类
- class CObjectChain; //窗口对象表
- class CWndX; //窗口类(基础类)
- extern HINSTANCE hInstX; //程序实例句柄
- //负责消息派送
- LRESULT WINAPI MsgSender(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
- //消息预处理
- BOOL PreTranslateMessageX(MSG* pMsg);
- //初始化X系统
- void InitXSystem(HINSTANCE hInst);
- ///////////////////////////////////////////////////////////////////
- //CWndX
- class CWndX
- {
- protected:
- HWND m_hWnd;//窗口句柄
- public:
- CWndX();
- virtual ~CWndX();
- void operator =(HWND hWnd);
- operator HWND() const;
- HWND GetHwnd() const;
- //创建窗口,支持扩展风格
- virtual BOOL Create(DWORD dwExStyle,LPCTSTR lpszClassName,LPCTSTR lpszWindowName,DWORD dwStyle,
- const RECT& rect,HWND hParentWnd,HMENU hMenu,LPVOID lpParam=NULL);
- BOOL Attach(HWND hWnd);
- HWND Detach();
- friend class CWndMgr;
- friend class CObjectChain;
- friend LRESULT WINAPI MsgSender(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
- friend BOOL PreTranslateMessageX(MSG* pMsg);
- protected:
- WNDPROC m_OldProc;//旧窗口句柄
- virtual void OnNcDestroy();
- virtual BOOL PreTranslateMessage(MSG* pMsg);
- //窗口过程
- virtual LRESULT WndProc(UINT uMsg,WPARAM wParam,LPARAM lParam);
- private:
- };
- /////////////////////////////////////////////////////
- //CWndMgr
- class CWndMgr
- {
- public:
- CWndMgr();
- virtual ~CWndMgr();
- BOOL RemoveObject(CWndX* pWndObj);
- BOOL AddObject(CWndX* pWndObj);
- friend LRESULT WINAPI MsgSender(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
- friend BOOL PreTranslateMessageX(MSG* pMsg);
- protected:
- CRITICAL_SECTION m_cs;//临界区对象
- };
- /////////////////////////////////////////
- //CDialogX
- class CDialogX:public CWndX
- {
- public:
- CDialogX();
- virtual ~CDialogX();
- //创建一个非模式对话框
- BOOL Create(LPCTSTR lpszTemplateName,HWND hWndParent);
- //创建一个模式对话框
- virtual int DoModal(LPCTSTR lpszTemplateName,HWND hWndParent);
- protected:
- virtual BOOL OnCommand(WPARAM wParam,LPARAM lParam);
- //消息响应
- virtual void OnClose();
- virtual void OnNcDestroy();
- virtual void OnOK();
- virtual void OnCancel();
- //
- //窗口过程
- virtual LRESULT WndProc(UINT uMsg,WPARAM wParam,LPARAM lParam);
- private:
- BOOL m_bModal;//是否为模式
- };
- /////////////////////////////////////////////
- //CCtrlX 控件基础类
- class CCtrlX:public CWndX
- {
- public:
- //创建一个控件
- BOOL Create(DWORD dwStyleEx,LPCTSTR pszClass,LPCTSTR pszCaption,DWORD dwStyle, const RECT &rect, HWND hParentWnd, UINT nID);
- //与一个已存在控件关联
- BOOL Associate(HWND hWndParent,UINT uIDDlgItem);
- protected:
- virtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);
- private:
- };
- /////////////////////////////////////////////////
- //CButtonX
- class CButtonX:public CCtrlX
- {
- public:
- BOOL Create(LPCTSTR pszCaption,DWORD dwStyle, const RECT &rect, HWND hParentWnd, UINT nID);
- protected:
- private:
- };
- ////////////////////////////////////////////////
- //CEditX
- class CEditX:public CCtrlX
- {
- public:
- BOOL Create(LPCTSTR pszCaption,DWORD dwStyle,const RECT& rect,HWND hParentWnd,UINT nID);
- private:
- protected:
- };
- ///////////////////////////////////////////////
- //CStaticX
- class CStaticX:public CCtrlX
- {
- public:
- BOOL Create(LPCTSTR pszCaption,DWORD dwStyle,const RECT& rect,HWND hParentWnd,UINT nID);
- private:
- protected:
- };
- ///////////////////////////////////////////////
- //CComboBoxX
- class CComboBoxX:public CCtrlX
- {
- public:
- BOOL Create(LPCTSTR pszCaption,DWORD dwStyle,const RECT& rect,HWND hParentWnd,UINT nID);
- protected:
- private:
- };
- //////////////////////////////////////////////////
- //CListBoxX
- class CListBoxX:public CCtrlX
- {
- public:
- BOOL Create(LPCTSTR pszCaption,DWORD dwStyle,const RECT& rect,HWND hParentWnd,UINT nID);
- protected:
- private:
- };
- ///////////////////////////////////////////////////
- //CScrollBarX
- class CScrollBarX:public CCtrlX
- {
- public:
- BOOL Create(DWORD dwStyle,const RECT& rect,HWND hParentWnd,UINT nID);
- };
- ////////////////////////////////////////////////////
- //CStatusBarX
- class CStatusBarX:public CCtrlX
- {
- public:
- BOOL Create(LPCTSTR pszCaption,DWORD dwStyle, HWND hParentWnd,UINT nID);
- };
- ///////////////////////////////////////////////////
- //CToolBarX
- class CToolBarX:public CCtrlX
- {
- public:
- BOOL Create(DWORD dwStyle,HWND hParentWnd,UINT nID);
- };
- /////////////////////////////////////////////////
- //CMenuX
- class CMenuX
- {
- public:
- CMenuX();
- virtual ~CMenuX();
- HMENU GetHandle();
- BOOL Attach(HMENU hMenu);
- HMENU Detach();
- protected:
- HMENU m_hMenu;
- };
- #endif//#