窗体分割模块详细设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
项目名称:Neusoft Media Player
项目编号: NEU-TRAINING-2008001
文档编号:D09-PMT08004
窗体分割模块详细设计
目录
1 文档概述 (1)
1.1 文档目的和范围 (1)
1.2 术语/缩略语 (1)
1.3 参考文档 (1)
2 窗体分割模块功能描述 (2)
2.1 数据结构定义 (2)
2.1.1 数据类型定义 (2)
2.1.1.1 SPC_NMHDR (2)
2.1.2 全局变量定义 (2)
2.1.3 常量定义 (2)
2.2 CSplitterControl类功能实现 (3)
2.2.1 类数据成员 (3)
2.2.2 类成员函数 (3)
2.2.2.1 CreateSplitter (4)
2.2.2.2 SetRange (6)
2.2.2.3 ChangeWidth (7)
2.2.2.4 ChangeHeight (9)
2.2.2.5 MoveWindowTo (11)
2.2.2.6 DrawLine (13)
1文档概述
1.1 文档目的和范围
本文档描述了使用分隔条对主窗体进行分割的相关内容,为日后开发提供相关参考和依据。
1.2 术语/缩略语
1.3 参考文档
2窗体分割模块功能描述
窗体分割模块位于GUI层,其功能是通过用户对分隔条的水平或竖直方向的拖拽动态改变主窗体各个控件尺寸的大小。
2.1 数据结构定义
2.1.1数据类型定义
2.1.1.1 SPC_NMHDR
typedef struct SPC_NMHDR
{
NMHDR hdr;
int delta;
} SPC_NMHDR;
SPC_NMHDR结构体由通知消息结构体和偏移量两部分组成,通知消息结构。变量hdr用于记录消息内的具体信息,偏移量:delta记录水平或竖直方向的拖拽距离
2.1.2全局变量定义
static HCURSOR SplitterControl_hCursor1 = NULL; //分隔条水平拖拽可选状态图标指针
static HCURSOR SplitterControl_hCursor2 = NULL; //分隔条垂直拖拽可选状态图标指针
2.1.3常量定义
#define CW_LEFTALIGN 1 //左对齐
#define CW_RIGHTALIGN 2 //右对齐
#define CW_TOPALIGN 3 //顶端对齐
#define CW_BOTTOMALIGN 4 //底对齐
#define SPS_VERTICAL 1 //分隔条垂直拖拽
#define SPS_HORIZONTAL 2 //分隔条水平拖拽
2.2 CSplitterControl类功能实现
用户拖拽分隔条通过对鼠标事件的捕获判断出拖拽方向和偏移量并表示出拖拽效果,然后逐个设置需要进行改变的控件的宽度或高度,最后更新窗口,从而实现了分割窗口的效果。
2.2.1类数据成员
BOOL m_bIsPressed; //判断是否选中了分隔条标志
int m_nType; //分隔条退拽类型
int m_nX; //分隔条中心点水平坐标
int m_nY; //分隔条中心点垂直坐标
int m_nMin; //分隔条拖拽最小值
int m_nMax; //分隔条拖拽最大值
int m_nSavePos; //存储分隔条拖拽过程中的前一水平或垂直坐标
2.2.2类成员函数
void CreateSplitter(DWORD dwStyle, const CRect& rect, CWnd* pParent, UINT nID);
void SetRange(int nMin, int nMax);
static void ChangeWidth(CWnd* pWnd, int dx, DWORD dwFlag = CW_LEFTALIGN);
static void ChangeHeight(CWnd* pWnd, int dy, DWORD dwFlag = CW_TOPALIGN);
void MoveWindowTo(CPoint pt);
virtual void DrawLine(CDC* pDC, int x, int y);
2.2.2.1 CreateSplitter 【函数式样】表2-1
CreateSplitter函数处理逻辑:(见图2-1)
图2-1CreateSplitter流程图
2.2.2.2 SetRange 【函数式样】表2-2
2.2.2.3 ChangeWidth 【函数式样】表2-3
ChangeWidth函数处理逻辑:(见图2-3)
图2-3ChangeWidth流程图
2.2.2.4 ChangeHeight 【函数式样】表2-4
ChangeHeight函数处理逻辑:(见图2-4)
图2-4ChangeHeight流程图
2.2.2.5 MoveWindowTo 【函数式样】表2-5
MoveWindowTo函数处理逻辑:(见图2-5)
图2-5MoveWindowTo流程图