最近由于项目的需要学习了一下DirectUI方面的东西,主要借鉴的是一个国外程序员写的代码(见引用一),看了后发现它更多的是探讨一种实现的可能性和思路,和实际应用还是有距离的,不过其实现还是很有意思的。在写此小结的时候又发现国内一个程序员将这个代码部分移植到WINCE下的代码(见引用二),因为平台的差异性要完全开发一个WINCE下的实际代码还是需要时间的。
由于本人GUI开发做得少,工作中有关这方面的东西主要是提供思路和方法,学习DirectUI的主要目的是为了更新知识学习思路,文章中难免出现错误。
一、核心
1 、CWindowWnd: 窗口对象类(窗口实例对象父类)
2 、CDialogBuilder: 创建控件类,分析脚本并用递归方式(_Parse函数)创建所有控件实例
3 、CPaintManagerUI: 窗口消息及图形绘制管理器类
4 、CGUIRenderEngineUI: 图形渲染引擎类,在离屏DC中生成最终显示的图形,可根据需要扩展多种图形效果显示。
5 、INotifyUI: 事件通知抽象类
6 、IMessageFilterUI: 消息过滤抽象类
二、控件
CControlUI: 控件管理抽象父类,父类INotifyUI
1 、button
CButtonUI: 按钮控件
COptionUI: 选择按钮控件
2 、combox
CSingleLinePickUI:
CDropDownUI: 下拉控件,父类另有CContainerUI和IListOwnerUI
3 、decoration
CTitleShadowUI: 阴影效果
CListHeaderShadowUI
CSeparatorLineUI
CFadedLineUI
4 、edit
CSingleLineEditUI: 单行编辑框控件
CMultiLineEditUI: 多行编辑框控件
5 、label
CLabelPanelUI: 可设置背景色和文字色的静态标签控件
CGreyTextHeaderUI
6 、list
第一种:
CListUI: 列表控件,包含以下几个子控件
( 1 )CListHeaderItemUI: 列表头
( 2 )CListExpandElementUI: 列表项
第二种:用法不明
CListHeaderUI: 列表头
CListElementUI: 列表项,父类另有IListItemUI
CListLabelElementUI: 列表项,父类CListElementUI
CListTextElementUI: 列表项
CListFooterUI: 列表尾
7 、panel
CTextPanelUI: 父类CLabelPanelUI
CTaskPanelUI:
CNavigatorPanelUI: 导航面板,父类另有IListOwnerUI,包含CNavigatorButtonUI子控件
CSearchTitlePanelUI:
CImagePanelUI: 图片显示
CWarningPanelUI: 警告提示,父类CTextPanelUI
CPaddingPanelUI: 填充栏
8 、tab
CTabFolderUI: 父类另有CContainerUI和IListOwnerUI
CTabPageUI: 父类另有CContainerUI
9 、toolbar
CToolbarUI: 工具栏,包含以下几个子控件
( 1 )CToolButtonUI: 图形按钮
( 2 )CToolSeparatorUI: 分隔符
( 3 )CToolGripperUI: gripper
10 、title
CToolbarTitlePanelUI:
11 、statusbar
CStatusbarUI: 状态栏,父类另有CContainerUI
12 、anim
CAnimJobUI: 动画显示类
13 、ActiveX
CActiveXUI:
三、容器:
CContainerUI: 容器类,父类CControlUI和IContainerUI。可以认为容器是特殊的控件(见上面控件类关于父类的说明),其目的之一是具有容器特性的控件可以容纳其它控件,这样可以方便的实现控件的叠加;目的之二实际的窗口只有一个,对于叠加的控件必须要进行层次管理才能正确绘图和事件分发。另外可参见引用三
1 、画布: CCanvasUI(父类CContainerUI),可绘制背景色、画线、贴图
CWindowCanvasUI: 父类CCanvasUI
CControlCanvasUI: 父类CCanvasUI
CWhiteCanvasUI: 父类CCanvasUI
CDialogCanvasUI: 父类CCanvasUI
CTabFolderCanvasUI: 父类CCanvasUI
2 、布局: 管理不同层次的控件
CDialogLayoutUI: 父类CContainerUI
CVerticalLayoutUI: 父类CContainerUI
CHorizontalLayoutUI: 父类CContainerUI
CTileLayoutUI: 父类CContainerUI
四、通用
1 、script
CMarkup
CMarkupNode
2 、language
CUIUtility
3 、multi - thread
CriticalSection
AutoCriticalSection
CMutex
CAutoMutex
CEvent
CAutoEvent
CManualEvent
五、主要数据成员
1 、CPaintManagerUI
CControlUI * m_pRoot: 如果控件是叠加的则存放最下层的控件对象,否则存放第一个创建的控件对象
CControlUI * m_pFocus: 存放获得焦点的控件对象指针
CControlUI * m_pEventHover: 存放当前有鼠标移进移出事件的控件对象指针
CControlUI
由于本人GUI开发做得少,工作中有关这方面的东西主要是提供思路和方法,学习DirectUI的主要目的是为了更新知识学习思路,文章中难免出现错误。
一、核心
1 、CWindowWnd: 窗口对象类(窗口实例对象父类)
2 、CDialogBuilder: 创建控件类,分析脚本并用递归方式(_Parse函数)创建所有控件实例
3 、CPaintManagerUI: 窗口消息及图形绘制管理器类
4 、CGUIRenderEngineUI: 图形渲染引擎类,在离屏DC中生成最终显示的图形,可根据需要扩展多种图形效果显示。
5 、INotifyUI: 事件通知抽象类
6 、IMessageFilterUI: 消息过滤抽象类
二、控件
CControlUI: 控件管理抽象父类,父类INotifyUI
1 、button
CButtonUI: 按钮控件
COptionUI: 选择按钮控件
2 、combox
CSingleLinePickUI:
CDropDownUI: 下拉控件,父类另有CContainerUI和IListOwnerUI
3 、decoration
CTitleShadowUI: 阴影效果
CListHeaderShadowUI
CSeparatorLineUI
CFadedLineUI
4 、edit
CSingleLineEditUI: 单行编辑框控件
CMultiLineEditUI: 多行编辑框控件
5 、label
CLabelPanelUI: 可设置背景色和文字色的静态标签控件
CGreyTextHeaderUI
6 、list
第一种:
CListUI: 列表控件,包含以下几个子控件
( 1 )CListHeaderItemUI: 列表头
( 2 )CListExpandElementUI: 列表项
第二种:用法不明
CListHeaderUI: 列表头
CListElementUI: 列表项,父类另有IListItemUI
CListLabelElementUI: 列表项,父类CListElementUI
CListTextElementUI: 列表项
CListFooterUI: 列表尾
7 、panel
CTextPanelUI: 父类CLabelPanelUI
CTaskPanelUI:
CNavigatorPanelUI: 导航面板,父类另有IListOwnerUI,包含CNavigatorButtonUI子控件
CSearchTitlePanelUI:
CImagePanelUI: 图片显示
CWarningPanelUI: 警告提示,父类CTextPanelUI
CPaddingPanelUI: 填充栏
8 、tab
CTabFolderUI: 父类另有CContainerUI和IListOwnerUI
CTabPageUI: 父类另有CContainerUI
9 、toolbar
CToolbarUI: 工具栏,包含以下几个子控件
( 1 )CToolButtonUI: 图形按钮
( 2 )CToolSeparatorUI: 分隔符
( 3 )CToolGripperUI: gripper
10 、title
CToolbarTitlePanelUI:
11 、statusbar
CStatusbarUI: 状态栏,父类另有CContainerUI
12 、anim
CAnimJobUI: 动画显示类
13 、ActiveX
CActiveXUI:
三、容器:
CContainerUI: 容器类,父类CControlUI和IContainerUI。可以认为容器是特殊的控件(见上面控件类关于父类的说明),其目的之一是具有容器特性的控件可以容纳其它控件,这样可以方便的实现控件的叠加;目的之二实际的窗口只有一个,对于叠加的控件必须要进行层次管理才能正确绘图和事件分发。另外可参见引用三
1 、画布: CCanvasUI(父类CContainerUI),可绘制背景色、画线、贴图
CWindowCanvasUI: 父类CCanvasUI
CControlCanvasUI: 父类CCanvasUI
CWhiteCanvasUI: 父类CCanvasUI
CDialogCanvasUI: 父类CCanvasUI
CTabFolderCanvasUI: 父类CCanvasUI
2 、布局: 管理不同层次的控件
CDialogLayoutUI: 父类CContainerUI
CVerticalLayoutUI: 父类CContainerUI
CHorizontalLayoutUI: 父类CContainerUI
CTileLayoutUI: 父类CContainerUI
四、通用
1 、script
CMarkup
CMarkupNode
2 、language
CUIUtility
3 、multi - thread
CriticalSection
AutoCriticalSection
CMutex
CAutoMutex
CEvent
CAutoEvent
CManualEvent
五、主要数据成员
1 、CPaintManagerUI
CControlUI * m_pRoot: 如果控件是叠加的则存放最下层的控件对象,否则存放第一个创建的控件对象
CControlUI * m_pFocus: 存放获得焦点的控件对象指针
CControlUI * m_pEventHover: 存放当前有鼠标移进移出事件的控件对象指针
CControlUI