1.1 codesguipreview_regex

[TOC]

1.1 研究H:_codes\GuiPreview_Regex

注:具体的分析文档在H:_codes\svn_repo\branches\Win\GuiPreview_Regex\笔记.txt

1.1 可以编译执行

H:_codes\GuiPreview_Regex\Demo\RegexDebugger\RegexDebugger.sln

1.2 分析执行流程

1.3 模块分析

1.1.1 执行流程

启动–》

WinMain

​ VL_WinClass

​ VL_WinApplication

​ VL_WinCommonDialogService

​ InitAccelerator

​ main

​ new RegForm:VL_WinForm

​ GetApplication->Run

1.1.2 UI类

​ VL_WinEdit

​ SetHScroll

​ SetReadonly

​ 。。。

​ VL_WinComboBox

​ AddString

​ SetSelectedIndex

​ VL_WinStatic

​ VL_WinButton

​ SetText

​ VL_WinTreeView

​ AddRootItem

​ OnItemSelected.Bind

​ Clear

​ 》VL_WinTreeViewItem

​ SetCustomData

​ InsertAtLast

​ VL_WinTab

​ AddPage

​ VL_WinTabPage

​ ApplyPlacement

1.1.3 UI Event handling

​ 每个control有些预先定义的event,该event可以band到指定回调函数

​ 比如 treeview在选择某项item时事件处理

​ tvMatchStructure->OnItemSelected.Bind(this,&RegForm::tvMatchStructure_OnItemSelected);

​ 其中OnItemSelected为VE_TreeViewItemEvent类型

​ 事件处理在各个类的ProcessMessage实现

UI event类型

​ VE_NotifyEvent 按钮点击

​ VE_TreeViewItemEvent

​ VE_TreeViewVerifyEvent

​ event用VL_DEFINE_VOID_EVENT定义,VL_IMPLEMENT_VOID_EVENT实现(如何实现??)

1.1.4 UI布局相关类(不全)

VL_Placement

​ pHorzFix1

​ pHorzScale

​ pVertFix1

​ pControl

​ pBlank

布局的实现

​ VL_WinContainer::ApplyPlacement

​ Placement->Apply

​ 有两个类_pControl,_pPart均实现了Apply函数(这两个类是做啥的?有什么不同?只用这两个类就王城了所有的placement?)

1.1.5 RegEx类(不全)

​ GeneralRegex

​ Match

​ MatchHead

​ MatchWhole

​ Search

​ Split

​ Cut

​ above functions return a VL_AutoPtr object

​ GeneralMatchList

​ GetCount

​ GetItem return a GeneralMatch object

​ IsSuccess

​ Text

1.1.6 类的继承关系(不全)

​ VL_Base 纯虚类

​ VL_WinControl 定义了基本元素(handle,鼠标进入推出状态,字体,父窗口,)和事件(enable,disable,移动,显示,隐藏,大小改变,paint,鼠标事件,键盘事件

​ VL_WinContainer 容器UI基类

​ VL_WinForm

​ VL_WinApplication

1.1.7 UI资源内存管理

​ 包含一个ControlMap,即所有句柄和对象的对应关系,对于application开发者,所有对象只需要new,而delete是由框架实现的

​ VL_WinContainer 里面包含一个VL_WinControlList类型的所有子对象列表,在 VL_WinContainer::Destroy时delete掉所有其child成员

​ VL_WinApplication里面包含一个ControlMap类型的所有顶级窗口列表(貌似不是!),在VL_WinControl::_CreateWindow里面GetApplication()->FControls.Add添加到application全局变量里面,在VL_WinControl::Destroy时application删除该句柄对应的list item(貌似没有delete该对象,这个map貌似只是为了查找窗口用的,而不是内存管理)

​ application内存管理用的变量是FMainForm和FForms,在VL_WinApplication::Terminate时会看到删除所有forms,在VL_WinForm::CreateForm会调用VL_WinApplication::RegisterForm将窗口加入application全局列表

Powered by Jekyll and Theme by solid

本站总访问量