用于EagleEye3.0 规则集漏报和误报测试的示例项目,项目收集于github和gitee
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

503 lines
23 KiB

/**
* Copyright (C) 2014-2050 SOUI团队
* All rights reserved.
*
* @file SListboxex.h
* @brief
* @version v1.0
* @author soui
* @date 2014-07-06
*
* Describe 扩展列表框
*/
#pragma once
#include "core/SPanel.h"
#include "core/Sitempanel.h"
namespace SOUI
{
class EventLBGetDispInfo : public TplEventArgs<EventLBGetDispInfo>
{
SOUI_CLASS_NAME(EventLBGetDispInfo,L"on_listbox_get_display_info")
public:
EventLBGetDispInfo(SObject *pSender):TplEventArgs<EventLBGetDispInfo>(pSender){}
enum{EventID=EVT_EXTERNAL_BEGIN+301};
int iItem;
SWindow * pItem;
BOOL bSel;
BOOL bHover;
};
/**
* @class SListBox
* @brief 扩展列表框
*
* Describe 扩展列表框
*/
class SListBoxEx :public SScrollView
,public IItemContainer
{
public:
SOUI_CLASS_NAME(SListBoxEx, L"listboxex")
/**
* SListBoxEx::SListBox
* @brief 构造函数
*
* Describe 构造函数
*/
SListBoxEx();
/**
* SListBox::~SListBox
* @brief 析构函数
*
* Describe 析构函数
*/
virtual ~SListBoxEx();
/**
* SListBoxEx::DeleteAllItems
* @brief 删除所有
* @param BOOL bUpdate -- 是否更新
*
* Describe 删除所有
*/
void DeleteAllItems(BOOL bUpdate=TRUE);
/**
* SListBoxEx::DeleteItem
* @brief 删除指定项
* @param int iItem -- 索引
*
* Describe 删除指定项
*/
void DeleteItem(int iItem);
/**
* SListBoxEx::InsertItem
* @brief 插入新项
* @param int iItem -- 索引
* @param pugi::xml_node xmlNode -- xml文件
* @param DWORD dwData -- 附加数据
*
* Describe 在某项之后插入
*/
int InsertItem(int iItem,pugi::xml_node xmlNode,LPARAM dwData=0);
/**
* SListBoxEx::InsertItem
* @brief 插入新项
* @param int iItem -- 索引
* @param LPCWSTR pszXml -- xml文件
* @param DWORD dwData -- 附加数据
*
* Describe 在某项之后插入
*/
int InsertItem(int iItem,LPCWSTR pszXml,LPARAM dwData=0);
/**
* SListBoxEx::SetCurSel
* @brief 设置选中项
* @param int nIndex -- 待选中索引
*
* Describe 设置选中项
*/
BOOL SetCurSel(int iItem);
/**
* SListBoxEx::EnsureVisible
* @brief 设置某项显示
* @param int nIndex -- 索引
*
* Describe 设置某项显示
*/
void EnsureVisible(int iItem);
/**
* SListBoxEx::GetCurSel
* @brief 获取当前选中项索引
* @return 返回int
*
* Describe 获取当前选中项索引
*/
int GetCurSel();
/**
* SListBoxEx::GetItemPanel
* @brief 获取指定项结构
* @param int iItem -- 索引
* @return 返回SWindow
*
* Describe 获取指定项索引
*/
SWindow * GetItemPanel(int iItem);
/**
* SListBoxEx::GetItemData
* @brief 获取附加数据
* @param int nIndex -- 选项索引
* @return 返回LPARAM
*
* Describe 获取附加数据
*/
LPARAM GetItemData(int iItem);
/**
* SListBoxEx::SetItemData
* @brief 设置选项附加数据
* @param int nIndex -- 选项索引
* @param LPARAM lParam -- 附加数据
* @return 返回BOOL
*
* Describe 设置选项附加数据
*/
void SetItemData(int iItem,LPARAM lParam);
/**
* SListBoxEx::SetItemCount
* @brief 设置条目数量
* @param int nItems 条目数量
* @param LPCTSTR pszXmlTemplate 显示时使用的XML模板,
* 为空时使用XML脚本中指定的template子节点数据
* @return 设置条目数量
*
* Describe 设置选项附加数据
*/
BOOL SetItemCount(int nItems,LPCTSTR pszXmlTemplate=NULL);
/**
* SListBoxEx::GetItemCount
* @brief 获取条目数量
* @return 返回 int
*
* Describe 获取条目数量
*/
int GetItemCount() ;
/**
* SListBoxEx::GetItemHeight
* @brief 获取高度
* @return 返回int
*
* Describe 获取高度
*/
int GetItemHeight()
{
return m_nItemHei;
}
/**
* SListBoxEx::RedrawItem
* @brief 重绘选项
* @param int iItem -- 索引
*
* Describe 重绘选项
*/
void RedrawItem(int iItem);
/**
* SListBoxEx::HitTest
* @brief 获取鼠标相关信息
* @param CPoint &pt -- 坐标
*
* Describe 自动修改pt的位置为相对当前项的偏移量
*/
int HitTest(CPoint &pt);
protected:
/**
* SListBoxEx::OnItemSetCapture
* @brief
* @param SItemPanel *pItem
* @param BOOL bCapture
*
* Describe
*/
virtual void OnItemSetCapture(SItemPanel *pItem,BOOL bCapture);
/**
* SListBoxEx::OnItemGetRect
* @brief
* @param SItemPanel *pItem
* @param CRect &rcItem
*
* Describe
*/
virtual BOOL OnItemGetRect(SItemPanel *pItem,CRect &rcItem);
/**
* SListBoxEx::IsItemRedrawDelay
* @brief
*
* Describe
*/
virtual BOOL IsItemRedrawDelay(){return m_bItemRedrawDelay;}
virtual void OnItemRequestRelayout(SItemPanel *pItem);
protected:
/**
* SListBoxEx::UpdatePanelsIndex
* @brief 更新索引
* @param UINT nFirst
* @param UINT nLast
*
* Describe 更新索引
*/
void UpdatePanelsIndex(UINT nFirst=0,UINT nLast=-1);
/**
* SListBoxEx::GetItemRect
* @brief 获取指定位置
* @param int iItem -- 索引
* @return 返回CRect
*
* Describe 更新索引
*/
CRect GetItemRect(int iItem);
/**
* SListBoxEx::OnPaint
* @brief 绘制
* @param IRenderTarget *pRT -- 绘制设备
*
* Describe 消息响应函数
*/
void OnPaint(IRenderTarget * pRT);
/**
* SListBoxEx::OnSize
* @brief 消息响应函数
* @param UINT nType --
* @param CSize size --
*
* Describe 获取某项得索引
*/
void OnSize(UINT nType, CSize size);
/**
* SListBoxEx::DrawItem
* @brief 绘制
* @param IRenderTarget *pRT -- 绘制设备
* @param CRect & rc -- 位置
* @param int iItem -- 索引
*
* Describe 绘制
*/
virtual void DrawItem(IRenderTarget *pRT, CRect & rc, int iItem);
/**
* SListBoxEx::CreateChildren
* @brief 创建新项
* @param pugi::xml_node xmlNode -- xml文件
*
* Describe 通过解析xml文件创建
*/
virtual BOOL CreateChildren(pugi::xml_node xmlNode);
/**
* SListBoxEx::OnUpdateToolTip
* @brief 更新提示
* @param CPoint pt -- 感应位置
* @param SwndToolTipInfo & tipInfo -- 提示信息
* @return BOOL
*
* Describe
*/
virtual BOOL OnUpdateToolTip(CPoint pt, SwndToolTipInfo & tipInfo);
/**
* SListBoxEx::NotifySelChange
* @brief 修改选中项
* @param int nOldSel -- 旧选中项
* @param int nNewSel -- 新选中项
*
* Describe 修改选中项
*/
void NotifySelChange(int nOldSel,int nNewSel);
/**
* SListBoxEx::OnMouseEvent
* @brief 自定义消息响应函数
* @param UINT uMsg -- 鼠标消息类型
* @param WPARAM wParam -- wParam
* @param LPARAM lParam -- lParam
* @return 返回LRESULT
*
* Describe 自定义消息响应函数
*/
LRESULT OnMouseEvent(UINT uMsg,WPARAM wParam,LPARAM lParam);
/**
* SListBoxEx::OnKeyEvent
* @brief 自定义消息响应函数
* @param UINT uMsg -- 键盘消息类型
* @param WPARAM wParam -- wParam
* @param LPARAM lParam -- lParam
* @return 返回LRESULT
*
* Describe 自定义消息响应函数
*/
LRESULT OnKeyEvent( UINT uMsg,WPARAM wParam,LPARAM lParam );
/**
* SListBoxEx::OnMouseLeave
* @brief 自定义消息响应函数
*
* Describe 自定义消息响应函数
*/
void OnMouseLeave();
/**
* SListBoxEx::OnMouseWheel
* @brief 鼠标滚轮事件
* @param UINT nFlags -- 标志
* @param short zDelta -- 滚轮滚动的距离
* @param CPoint pt -- 坐标
* @return 返回BOOL
*
* Describe 鼠标滚轮事件
*/
BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
/**
* SListBoxEx::OnKeyDown
* @brief 按键按下
* @param TCHAR nChar -- 键码值
* @param UINT nRepCnt -- 重复次数
* @param UINT nFlags -- 标志
*
* Describe 消息响应函数
*/
void OnKeyDown( TCHAR nChar, UINT nRepCnt, UINT nFlags );
/**
* SListBoxEx::OnChar
* @brief 按键按下
* @param TCHAR nChar -- 键码值
* @param UINT nRepCnt -- 重复次数
* @param UINT nFlags -- 标志
*
* Describe 消息响应函数
*/
void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
/**
* SListBoxEx::OnGetDlgCode
* @brief 获取窗口消息码
* @param 返回UINT
*
* Describe 获取窗口消息码
*/
UINT OnGetDlgCode();
/**
* SListBoxEx::OnSetCursor
* @brief 设置鼠标位置
* @param 返回BOOL
*
* Describe 设置鼠标位置
*/
virtual BOOL OnSetCursor(const CPoint &pt);
/**
* SListBoxEx::OnViewOriginChanged
* @brief
* @param CPoint ptOld --
* @param CPoint ptNew --
*
* Describe
*/
virtual void OnViewOriginChanged(CPoint ptOld,CPoint ptNew);
/**
* SListBoxEx::OnDestroy
* @brief 销毁
*
* Describe 销毁
*/
void OnDestroy();
/**
* SListBoxEx::OnSetFocus
* @brief 获得焦点
*
* Describe 获得焦点
*/
void OnSetFocus(SWND wndOld);
/**
* SListBoxEx::OnKillFocus
* @brief 失去焦点
*
* Describe 失去焦点
*/
void OnKillFocus(SWND wndFocus);
/**
* SListBoxEx::OnNcCalcSize
* @brief 计算非客户区大小
* @param BOOL bCalcValidRects -- 大小
* @param LPARAM lParam -- 附加参数
* Describe 计算非客户区大小
*/
LRESULT OnNcCalcSize(BOOL bCalcValidRects, LPARAM lParam);
/**
* SListBoxEx::Relayout
* @brief 重新布局
*
* Describe 重新布局
*/
void Relayout();
protected:
SArray<SItemPanel *> m_arrItems; /**< 保存条目的数组 */
int m_nItemHei; /**< 高度 */
int m_iSelItem; /**< 选中条目 */
int m_iHoverItem; /**< Hover状态条目 */
int m_iScrollSpeed; /**< 滚动速度 */
BOOL m_bHotTrack; /**< */
pugi::xml_document m_xmlTempl; /**< 列表模板XML */
SItemPanel *m_pCapturedFrame; /**< 当前调用了setcapture的列表项 */
ISkinObj *m_pItemSkin; /**< 列表项的背景skin */
COLORREF m_crItemBg; /**< 背景色 */
COLORREF m_crItemSelBg; /**< 选中背景色 */
COLORREF m_crItemHotBg; /**< Hot背景色 */
BOOL m_bItemRedrawDelay; /**< 表项重绘时缓冲 */
public:
SOUI_ATTRS_BEGIN()
ATTR_INT(L"itemHeight", m_nItemHei, FALSE)
ATTR_SKIN(L"itemSkin", m_pItemSkin, TRUE)
ATTR_COLOR(L"colorItemBkgnd",m_crItemBg,FALSE)
ATTR_COLOR(L"colorItemSelBkgnd",m_crItemSelBg,FALSE)
ATTR_COLOR(L"colorItemHotBkgnd",m_crItemHotBg,FALSE)
ATTR_INT(L"itemRedrawDelay", m_bItemRedrawDelay, TRUE)
ATTR_INT(L"hotTrack",m_bHotTrack,FALSE)
SOUI_ATTRS_END()
SOUI_MSG_MAP_BEGIN()
MSG_WM_MOUSEWHEEL(OnMouseWheel)
MESSAGE_RANGE_HANDLER_EX(WM_MOUSEFIRST,WM_MOUSELAST,OnMouseEvent)
MESSAGE_RANGE_HANDLER_EX(WM_KEYFIRST,WM_KEYLAST,OnKeyEvent)
MESSAGE_RANGE_HANDLER_EX(WM_IME_STARTCOMPOSITION,WM_IME_KEYLAST,OnKeyEvent)
MESSAGE_HANDLER_EX(WM_IME_CHAR,OnKeyEvent)
MSG_WM_DESTROY(OnDestroy)
MSG_WM_PAINT_EX(OnPaint)
MSG_WM_MOUSELEAVE(OnMouseLeave)
MSG_WM_KEYDOWN(OnKeyDown)
MSG_WM_CHAR(OnChar)
MSG_WM_SIZE(OnSize)
MSG_WM_SETFOCUS_EX(OnSetFocus)
MSG_WM_KILLFOCUS_EX(OnKillFocus)
MSG_WM_NCCALCSIZE(OnNcCalcSize)
SOUI_MSG_MAP_END()
};
}//namespace SOUI